Невозможно импортировать изображение, чтобы протестировать приложение Scikit Learn - PullRequest
0 голосов
/ 29 апреля 2020

Я начинающий программист с Scikit learn, поэтому мой вопрос - базовый c. Я создал свою первую программу машинного обучения с набором данных эскиза для распознавания объектов между набросками яблока и банана, и она отлично работает в плане обучения и тестирования.

import cv2 as cv
import numpy as np
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split as tts
from sklearn.metrics import accuracy_score

#loading datasets
apples_Full = np.load('dataset/apple.npy')
bananas_Full = np.load('dataset/banana.npy')

N_Samples = 1000
test_Number = 0.2
APPLE = 0
BANANA = 1

def normalize(data):
    return np.interp(data , [0 , 255] , [-1 , 1])

apples = apples_Full[:N_Samples]
bananas = bananas_Full[:N_Samples]
dataset = np.concatenate((apples , bananas))
dataset = normalize(dataset)
labels = [APPLE] * N_Samples + [BANANA] * N_Samples
#spliting data
x_train , x_test , y_train , y_test = tts(dataset , labels ,test_size = test_Number)

alg = SVC()
alg.fit(x_train , y_train)
preds = alg.predict(x_test)
Result = accuracy_score(y_test , preds)
print(Result)

Теперь я хочу ввести изображение эскиза по порядку использовать его в качестве приложения для распознавания объектов. Я попытался импортировать изображение и преобразовать его в файл .npy и использовать его в качестве набора данных, как на шаге теста, но я получил ошибку: X.shape [1] = 151875 должен быть равен 784, количество функций во время обучения

testfile = "My_test.jpg"
Image = cv.imread(testfile)
TEST = np.array(Image , dtype = 'uint8')
np.save('My_test' + '.npy' , TEST)
Sketch = np.load('My_test.npy')
Sketch = np.reshape(Sketch, (1 , -1))
Testdata = normalizer(Sketch)
finaltest = alg.predict(Testdata)
print(finaltest)

Что мне делать?

1 Ответ

0 голосов
/ 29 апреля 2020

Если исходить из ошибки, я думаю, что форма вашего ввода при выводе отличается от формы изображения, которое вы использовали во время обучения модели. Вы использовали изображения размером 28*28 во время тренировки, вводя изображение другого размера во время вывода, вам просто нужно resize свои тестовые изображения, как показано ниже:

testfile = "My_test.jpg"
Image = cv.imread(testfile)
Image = cv.resize(Image,(28,28))  # will convert your image to 28*28
TEST = np.array(Image , dtype = 'uint8')

Кроме того, если вы пытаясь нормализовать ваши данные, вы можете просто разделить все изображение на 255 вместо использования np.interp, что-то вроде этого:

Image = Image/255.0

Надеюсь, это поможет!

...