, wenn Sie bereits opencv verwenden, Ich schlage vor, Sie verwenden die integrierte SVM-Implementierung, Training/Speichern/Laden in Python ist wie folgt. C++ hat eine entsprechende API, um dasselbe in etwa der gleichen Menge Code zu tun. es hat auch ‚train_auto‘ beste Parameter
import numpy as np
import cv2
samples = np.array(np.random.random((4,5)), dtype = np.float32)
labels = np.array(np.random.randint(0,2,4), dtype = np.float32)
svm = cv2.SVM()
svmparams = dict(kernel_type = cv2.SVM_LINEAR,
svm_type = cv2.SVM_C_SVC,
C = 1)
svm.train(samples, labels, params = svmparams)
testresult = np.float32([svm.predict(s) for s in samples])
print samples
print labels
print testresult
svm.save('model.xml')
loaded=svm.load('model.xml')
und Ausgang
#print samples
[[ 0.24686454 0.07454421 0.90043277 0.37529686 0.34437731]
[ 0.41088378 0.79261768 0.46119651 0.50203663 0.64999193]
[ 0.11879266 0.6869216 0.4808321 0.6477254 0.16334397]
[ 0.02145131 0.51843268 0.74307418 0.90667248 0.07163303]]
#print labels
[ 0. 1. 1. 0.]
#print testresult
[ 0. 1. 1. 0.]
, so dass Sie die n liefern finden abgeflachte Form Modelle als Muster und n-Etikett und Sie sind gut zu gehen. Sie brauchen wahrscheinlich nicht einmal den asm-Teil, wenden Sie einfach einige Filter an, die für Orientierung wie sobel oder gabor empfindlich sind, und verketten Sie die Matrizen und glätten Sie sie dann füttern Sie sie direkt an svm. Sie können wahrscheinlich 70-90% Genauigkeit erhalten.
wie jemand sagte cnn sind eine Alternative zu svms.hier gibt es einige Links, die Lenet5 implementieren. bis jetzt finde ich svms viel einfacher zu beginnen.
https://github.com/lisa-lab/DeepLearningTutorials/
http://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi
-edit-
Grenzsteine sind nur n-Vektoren (x, y) wahr? also warum versuchst du nicht, sie in ein Array der Größe 2n zu legen und sie einfach direkt in den obigen Code einzufügen?
zum Beispiel 3 Trainingsproben von 4 Landmarken (0,0),(10,10),(50,50),(70,70)
samples = [[0,0,10,10,50,50,70,70],
[0,0,10,10,50,50,70,70],
[0,0,10,10,50,50,70,70]]
labels=[0.,1.,2.]
0 = glücklich
1 = wütend
2 = Ekel
Tiefe neuronales Netz ist immer besser als SVM. – usamec
aufgrund der zeit muss ich mit SVM arbeiten, jede hilfe !! – TIBOU
@ usamec, Ihre Aussage ist nicht immer wahr. Hängt von der Definition von "besser" ab. – Bull