2013-09-05 11 views
7

Ich arbeite derzeit an einem Projekt, wo ich den Gesichtsausdruck eines Benutzers (nur ein Benutzer zu einer Zeit von einer Webcam) wie traurig oder glücklich extrahieren.Gesichtsausdruck Klassifizierung in Echtzeit mit SVM

Meine Methode Gesichtsausdrücke für die Klassifizierung ist:

  • Verwenden opencv das Gesicht im Bild zu erkennen
  • Verwenden ASM und stasm den Gesichtsmerkmalspunkt

facial landmarks

zu erhalten

und jetzt versuche ich Gesichtsausdruck Klassifizierung

zu tun

ist SVM eine gute Option? und wenn es ist, wie kann ich mit SVM anfangen:

wie werde ich svm für jede Emotionen mit dieser Orientierungspunkte zu trainieren?

+1

Tiefe neuronales Netz ist immer besser als SVM. – usamec

+0

aufgrund der zeit muss ich mit SVM arbeiten, jede hilfe !! – TIBOU

+4

@ usamec, Ihre Aussage ist nicht immer wahr. Hängt von der Definition von "besser" ab. – Bull

Antwort

7

Ja, SVMs haben in dieser Aufgabe zahlreiche Erfolge gezeigt. Es gab Dutzende (wenn nicht gar Hunderte) von Papieren, die solche Verfahren beschreiben.

Zum Beispiel:

einige grundlegende Quellen der SVM können sich auf http://www.support-vector-machines.org/ erhalten werden (wie Bücher Titel, Software Links usw.)

Und wenn Sie nur daran interessiert sind sie eher dann Sie mit Verständnis kann man von Basisbibliotheken erhalten:

+0

ich will svm trainieren um den gesichtsausdruck zu klassifizieren (glücklich, wütend, ekel, ...) mit der position von landmarkss wie kann ich das machen? – TIBOU

+1

http://stackoverflow.com/questions/18647405/train-svm-to-dofacial-expression-classification – TIBOU

+0

Wenn Sie mich nicht fragen, "Ich werde hier als ein Noob klingen" warum SVM über Logistik verwenden Regression? ist das nicht grundsätzlich das gleiche Konzept? – Nour

3

, 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

+0

Ich möchte SVM trainieren, um Gesichtsausdrücke (glücklich, wütend, Ekel, ...) zu klassifizieren, indem ich die Position von historichss verwende, wie kann ich das tun? – TIBOU

+0

http://stackoverflow.com/questions/18647405/train-svm-to-do-facial-expression-classification – TIBOU

+0

im training habe ich viele bilder für jede emotionen wie kann ich die svm dann trainieren !! für jede Emotion, tut mir leid, ich bekomme es nicht – TIBOU

0

Sie this Code überprüfen könnten, zu erhalten Idee, wie dies mit SVM gemacht werden könnte.

Sie Algorithmus finden erklärt here