Мой школьный проект Ñто нейроÑеть, ÑпоÑÐ¾Ð±Ð½Ð°Ñ Ñ€Ð°Ñпознавать цифры которые Ñ Ñ€Ð¸Ñую в paint, а затем загружаю в код. Проблема в том что когда Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÑŽ абÑолютно любое изображение то вÑегда выдает Ñимвол 2. ПодÑкажите как иÑправить, Ñ ÑƒÐ¶Ðµ другие библиотеки попробовал но в оÑновном они не поддерживаютÑÑ Ð½Ð° моем ПК.ПодÑкажите, что можно иÑправить, пожалуйÑта!
import os
import numpy as np
import struct
import gzip
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from PIL import Image, ImageEnhance
# Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ изображений
def load_images(filename, limit=None, new_size=(28, 28)):
with gzip.open(filename, 'rb') as f:
_, size, rows, cols = struct.unpack(">IIII", f.read(16))
images = np.frombuffer(f.read(), dtype=np.uint8)
if limit:
images = images[:limit * rows * cols]
images = images.reshape((limit or size, rows, cols))
resized_images = [
np.array(Image.fromarray(image).resize(new_size, Image.LANCZOS))
for image in images
]
return np.array(resized_images).reshape((limit or size, -1))
# Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ меток
def load_labels(filename, limit=None):
with gzip.open(filename, 'rb') as f:
_, size = struct.unpack(">II", f.read(8))
labels = np.frombuffer(f.read(), dtype=np.uint8)
return labels[:limit] if limit else labels
# Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ нового изображениÑ
def preprocess_image(image_path, size=(28, 28)):
image = Image.open(image_path).convert('L')
image = ImageEnhance.Contrast(image).enhance(2)
image = image.resize(size, Image.LANCZOS)
return np.array(image).reshape(1, -1) / 255.0
# Загрузка данных
data_dir = r'C:\Work(Standart)\Personal Project\dataBase\gzip'
limit = 15000
X_train = load_images(os.path.join(data_dir, 'emnist-digits-train-images-idx3-ubyte.gz'), limit=limit)
y_train = load_labels(os.path.join(data_dir, 'emnist-digits-train-labels-idx1-ubyte.gz'), limit=limit)
X_test = load_images(os.path.join(data_dir, 'emnist-digits-test-images-idx3-ubyte.gz'))
y_test = load_labels(os.path.join(data_dir, 'emnist-digits-test-labels-idx1-ubyte.gz'))
# Разделение данных
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)
# СтандартизациÑ
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)
X_test = scaler.transform(X_test)
# PCA
pca = PCA(n_components=97)
X_train = pca.fit_transform(X_train)
X_val = pca.transform(X_val)
X_test = pca.transform(X_test)
# Обучение модели Ñ Ñдром 'rbf'
model = SVC(kernel='rbf', C=1.0, max_iter=1000)
model.fit(X_train, y_train)
# Оценка на валидационных данных
y_val_pred = model.predict(X_val)
val_accuracy = accuracy_score(y_val, y_val_pred)
print(f'Validation accuracy: {val_accuracy}')
# Оценка на теÑтовых данных
y_test_pred = model.predict(X_test)
test_accuracy = accuracy_score(y_test, y_test_pred)
print(f'Test accuracy: {test_accuracy}')
# Пример иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÐµÐ»Ð¸
image_path = r"C:\Work(Standart)\Personal Project\testImages\TestSymbol4.png"
preprocessed_image = preprocess_image(image_path)
scaled_image = scaler.transform(preprocessed_image)
pca_transformed_image = pca.transform(scaled_image)
predicted_label = model.predict(pca_transformed_image)
print(f"Predicted symbol: {predicted_label[0]}")
# Проверка прогнозов на теÑтовых данных
test_predictions = model.predict(X_test)
print(f'Predicted labels for test data: {test_predictions[:10]}')
print(f'Actual labels for test data: {y_test[:10]}')