2016-10-23 16 views
3

私は、機械学習スクリプトをプログラミングして写真を撮り、ラベルを付けます。私はフォルダ内に自分のデータセットを持っていて、それらを配列に追加し、ラベル用の別の配列を作成します。私はsvm.fitを使用しようとすると、エラーを与える:OpenCVイメージをScikitに読み込むLearn

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ために、それらのイメージに合うことができる方法:

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. 

そして、ここでは、私が書いたスクリプトですウェブカメラから撮影した画像を予測するには?

答えて

0

私は画像処理の面では専門家ではありませんが、あなたのgetImage関数がそれぞれの画像に対して2次元配列を返していると推測しています。ここで、sckit-learnは、各トレーニングインスタンスごとに1次元の配列が必要です。すべての画像が同じサイズであると仮定すると、次のように動作します。

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

これは、各画像を1次元配列に変換します。画像がすべて同じサイズでない場合は、サイズ変更やダウンサンプリングなどの画像処理を行う必要があります。

関連する問題