Загрузка изображения OpenCV в Scikit Learn

#python #opencv #scikit-learn

#python #opencv #scikit-learn

Вопрос:

Я программирую скрипт машинного обучения, чтобы делать снимки и помечать их. У меня есть мой набор данных в папке, и я добавляю их в массив и создаю другой массив для меток. когда я пытаюсь использовать svm.fit, он выдает ошибку :

 File "scikit.py", line 43, in <module>
    clf.fit(arrayimg, arraylabel)
  File "/home/mkmeral/.local/lib/python2.7/site-packages/sklearn/svm/base.py", line 151, in fit
    X, y = check_X_y(X, y, dtype=np.float64, order='C', accept_sparse='csr')
  File "/home/mkmeral/.local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 521, in check_X_y
    ensure_min_features, warn_on_dtype, estimator)
  File "/home/mkmeral/.local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 405, in check_array
    % (array.ndim, estimator_name))
ValueError: Found array with dim 3. Estimator expected <= 2.
  

И вот сценарий, который я написал:

 import cv2
import numpy as py
from sklearn import svm

camera_port = 0
camera = cv2.VideoCapture(camera_port)
ramp_frames = 5

def getImage():
    retval, im = camera.read()
    gray_image = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    return gray_image

def insertToArray(arrayone, arraytwo, no, true):
    if (true==1):
        directory = "/home/mkmeral/Desktop/opencv/strue/"
        arraytwo.append(1)
    else:
        directory = "/home/mkmeral/Desktop/opencv/sfalse/"
        arraytwo.append(0)

    im = cv2.imread(directory   str(no)   ".png")
    gray_image = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    arrayone.append(gray_image)

arrayimg = []
arraylabel = []
count = 1
while (count<43):
    insertToArray(arrayimg, arraylabel, count, 1)
    print("True = " , count)
    count = count   1

count = 0
while (count<43):
    insertToArray(arrayimg, arraylabel, count, 0)
    print("False = ", count)
    count = count   1

print("Done adding to arrays")
clf = svm.SVC()
print("Done adding to arrayssss")
clf.fit(arrayimg, arraylabel)

print("Done fitting")
for i in xrange(ramp_frames):
    temp = getImage()

testimage = getImage()

clf.predict(testimage)
  

Как я могу поместить эти изображения в Scikit learn и не будет ли проблемой предсказать изображение, полученное с веб-камеры?

Ответ №1:

Я не эксперт в области обработки изображений, но я предполагаю, что ваша getImage функция возвращает 2d-массив для каждого изображения. Где как sckit-learn будет ожидаться одномерный массив для каждого обучающего экземпляра. Предполагая, что все ваши изображения имеют одинаковый размер, тогда должно сработать следующее

 def getImage():
    retval, im = camera.read()
    gray_image = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    return gray_image.flatten()
  

Это преобразует каждое из ваших изображений в одномерный массив. Если не все ваши изображения одинакового размера, вам нужно будет выполнить некоторые шаги по обработке изображений, такие как изменение размера или уменьшение выборки.