Я использую SVM для рукописной классификации символов.Я подготовил свой собственный набор данных (изображения) для персонажей.На данный момент от а до ф.В каждой папке (от a до f) содержится от 20 до 22 изображений.итого около 188 изображений.
У меня проблема с добавлением изображений в массив numpy и прогнозом во время тестирования.
Весь исходный код доступен ниже.
импорт всех необходимых пакетов
import cv2
import numpy as np
import glob
from sklearn import svm
from sklearn.externals import joblib
from sklearn import model_selection
#constant values
image_location = "/home/syedjafer/Documents/Handwriting_recognition_svm/test1/images/"
folder_depth = 7
image_x = []
image_y = []
files = []
#to get all files in images folder
for level in range(folder_depth):
folder = chr(ord("b")+level)
print (image_location+folder+"/")
label_len = len(glob.glob(image_location+folder+"/"+"*.png"))
files = files + glob.glob(image_location+folder+"/"+"*.png")
print(files)
image_y = image_y + [folder] * (label_len)
print(image_y)
['b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h']
# adding images to numpy arrays
for file in files:
image = cv2.imread(file,0) # 0 for grayscale 2D array
image_x.append(image.flatten().tolist())
print(len(image_x))
166
# decalring test size and seed
test_size = 0.33
seed = 7
X = np.array(image_x , dtype="uint8")
image_y = np.array(image_y)
x_train , x_test , y_train , y_test = model_selection.train_test_split(image_x, image_y, test_size=test_size, random_state=seed)
clf = svm.SVC(gamma=0.0001, C=100)
clf.fit(x_train, y_train)
SVC(C=100, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma=0.0001, kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
print(y_train)
['f' 'h' 'b' 'g' 'f' 'h' 'f' 'h' 'e' 'g' 'e' 'b' 'h' 'e' 'c' 'b' 'c' 'g'
'e' 'd' 'h' 'c' 'f' 'd' 'f' 'd' 'b' 'd' 'b' 'b' 'h' 'e' 'b' 'b' 'b' 'c'
'd' 'h' 'f' 'g' 'b' 'd' 'g' 'b' 'c' 'e' 'g' 'e' 'f' 'd' 'c' 'c' 'h' 'g'
'c' 'h' 'f' 'f' 'h' 'f' 'g' 'f' 'b' 'f' 'g' 'g' 'g' 'b' 'd' 'd' 'c' 'f'
'b' 'h' 'e' 'h' 'f' 'g' 'b' 'e' 'h' 'e' 'g' 'b' 'c' 'h' 'c' 'f' 'd' 'e'
'c' 'b' 'b' 'd' 'e' 'b' 'g' 'g' 'e' 'g' 'c' 'f' 'e' 'e' 'b' 'g' 'f' 'f'
'h' 'd' 'c']
for xx , yy in zip(x_test,y_test):
print(clf.predict(np.array(xx).reshape(1,-1)),"=>",yy,"\n",)
['b'] => d
['b'] => f
['b'] => g
['b'] => c
['b'] => d
['b'] => e
['b'] => e
['b'] => h
['b'] => h
['f'] => f
['b'] => h
['b'] => g
['b'] => h
['b'] => c
['b'] => h
['b'] => g
['b'] => b
['b'] => f
['b'] => g
['b'] => f
['b'] => e
['b'] => c
['b'] => f
['b'] => g
['b'] => c
['b'] => f
['b'] => b
['b'] => f
['b'] => e
['b'] => e
['b'] => e
['b'] => g
['g'] => g
['b'] => h
['b'] => c
['b'] => d
['f'] => f
['b'] => d
['b'] => f
['b'] => g
['b'] => d
['b'] => c
['b'] => c
['b'] => d
['b'] => h
['b'] => g
['b'] => b
['b'] => h
['b'] => c
['b'] => e
['b'] => d
['b'] => c
['b'] => d
['b'] => c
['b'] => b
Шаги, необходимые для добавления изображений в массив numpy
- , откройте изображение в cv2.imread изатем я выравниваю изображение и добавляю его в новый список.
- Затем я преобразовал массив в массив np.
Обучение классификатора
clf = svm.SVC(gamma=0.0001, C=100)
clf.fit(x_train, y_train)
На этапе тестирования выдает ошибку.Это метка класса в первом наборе, которая была предсказана более.(например: первый набор «а», затем «б» и другие.)
Я не знаю, где происходит ошибка.
scrnsht изображений набора данных, которые я использую, изображений набора данных