2016-03-20 6 views
1
() in opencv3.0 svm.train

ich opencv3.0 verwende, ist mein IDE PyCharmWie kann ich meine Liste zu formatieren, um ihn als Eingabe

Ich habe zwei Listen eine Liste von training_set und einer Liste von trainig_labels. training_set ist eine Liste von Listen wie

[array([119, 122, 91, ..., 185, 80, 255], dtype=uint8), array([112, 106, 120, ..., 121, 138, 255], dtype=uint8), ....... ] 

training_labels ist die Liste von Etiketten für jede Liste in training_set.training_labels sieht aus wie

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] 

Aber wenn ich versuche, diese (svm.train passieren)

svm = cv2.ml.SVM_create() 

trainingdata = map(int, training_set) 
responses = map(int, training_labels) 

svm.train(trainingdata,responses,params=svm_params) 
svm.save('svm_data.dat') 

ich erhalte diesen Fehler

trainingdata = map(int, training_set) 
TypeError: only length-1 arrays can be converted to Python scalars 

Wie kann ich meine Daten korrekt, bevor es zu formatieren als Eingabe für svm.train()

+0

Was erwarten Sie nach 'map (int, training_set)'? Momentan versuchen Sie, 'int' auf' array ([119, ..., 255], dtype = uint8) 'aufzurufen. Natürlich ist es falsch. –

+0

@AleksandrKovalev Ich erwarte, dass die Liste in Int konvertiert wird. Was ist die richtige Methode? Ich googelte und ich endete in http://StackOverflow.com/Questions/7368789/Convert-All-Strings-in-A- list-to-int –

+0

Sie haben eine Liste von Arrays. Was möchtest du nach der Konvertierung bekommen? Plain Liste von ganzen Zahlen? Oder Liste von Listen von ganzen Zahlen? –

Antwort

1

Finaly Ich habe die answer.I geschaltet opencv2.4.I modifed meinen Code als

trainData=np.float32(training_set) 
responses=np.float32(training_labels) 
svm = cv2.SVM() 
svm.train(trainData,responses, params=svm_params) 
svm.save('svm_data.dat') 

geben Jetzt ist alles perfekt.