У меня возникли трудности с получением серии изображений в правильном формате для подачи в sklearn.svm.SVC.
Это мой первый проект по распознаванию изображений, и поэтому я немного страдаю.
У меня есть цикл, который выводит кучу RGB-изображений base64 (разных размеров) на фрейм данных
imageData = mpimg.imread(io.BytesIO(base64.b64decode(value)),format='JPG')
затем я конвертирую изображение RGB в оттенки серого и сглаживаю
data_images = rgb2gray(imageData).ravel()
где rgb2gray:
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
Если я смотрю на различия в размере
df_raw.sample(10)
Мы видим, что длины пикселей изображения не совпадают между моими сэмплами. Я немного запутался здесь о том, как действовать. Из-за отсутствия лучшей идеи я решил добавить отступ, основанный на картинке с самым большим размером,
df_raw.picLen.max()
Затем добавляем количество нулей в конец каждого массива 1D изображений.
def padPic(x,numb,maxN):
N = maxN-len(x)
out = np.pad(x,(numb,N),'constant')
return out
вызывающий
df_raw['picNew'] = df_raw.apply(lambda row: padPic(row['pic'],0,df_raw.picLen.max()), axis=1)
df_raw['picNewLen'] = df_raw.apply(lambda row: len(row['picNew']), axis=1)
Теперь у меня есть массивы одного размера
Отсюда я пытаюсь подобрать модель для поддержки векторного алгоритма, используя данные изображения в качестве X и набор меток в качестве y.
from sklearn.svm import SVC
X_train, X_test, y_train, y_test = train_test_split(df_raw.picNew, df_raw.name, test_size = 0.2, random_state=42)
проверьте размер:
print('Training data and target sizes: \n{}, {}'.format(X_train.shape,y_train.shape))
print('Test data and target sizes: \n{}, {}'.format(X_test.shape,y_test.shape))
Данные обучения и размеры целей: (198,), (198,) Данные испытаний и цели
размеры: (50,), (50,)
после того, как я убедил себя, что все готово, тогда я пытаюсь соответствовать модели
svm = SVC()
svm.fit(X_train, y_train)
это выдает ошибку, и я не могу понять, почему:
/ opt / wakari / anaconda / envs / ulabenv_2018-11-13_10.15.00 / lib / python3.5 / site-packages / numpy / core / numeric.py в asarray (a, dtype, order)
499
500 "" "
-> 501 возвращаемый массив (a, dtype, copy = False, order = order)
502
503
ValueError: установка элемента массива с последовательностью.
Я думаю, что это связано с размером массива, но я не могу понять это. : - /
В дополнение к ошибке, в общем, у меня есть вопрос к моему подходу в целом. В частности, я думаю, что мои "отступы", вероятно, неверны, и, возможно, некоторые изменения размера будут лучше.
Я ценю любые отзывы о моей методологии. Спасибо