2013-09-05 33 views
7

私は現在、悲しいことや幸せのようなユーザーの表情(ウェブカメラから一度に1人のユーザーのみ)を抽出しなければならないプロジェクトに取り組んでいます。SVMを使用したリアルタイムの表情分類

表情を分類するための私の方法は次のとおりです。顔の特徴点

facial landmarks

を取得する画像
  • 使用ASMとstasmで顔を検出する

    • 使用OpenCVの

      今、私は表情の分類をしようとしています

      はSVMがいいですか? SVMで始めるにはどうすればよいでしょうか:

      どのように私はこの目印を使用してすべての感情のためにSVMを訓練するつもりですか?

  • +1

    ディープニューラルネットワークは常にSVMよりも優れている説明を見つけることができます。 – usamec

    +0

    私はSVM、どんな助けで作業しなければならないのですか? – TIBOU

    +4

    @usamec、あなたのステートメントは常に真ではありません。で始まる "より良い"の定義に依存します。 – Bull

    答えて

    7

    はい、SVMは、このタスクでうまく動作することがわかりました。このような手続きを記述している論文は何十もありました(そうでなければhundreads)。例えば

    自身が本のタイトルのようなhttp://www.support-vector-machines.org/(、ソフトウェア上で取得することができるのSVMのいくつかの基本的な情報源リンクなど)

    そして、あなたはあなたが基本的なライブラリのいずれかを取得することができます理解することではなく、それらを使用することにだけ興味がある場合:

    +0

    私は表情(幸せ、怒り、嫌悪感、...)をランドマークの位置を使って分類するためにSVMを練習したいのですがどうすればいいですか? – TIBOU

    +1

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

    +0

    私が尋ねるのを気にしないなら、「私はここでの騒ぎのように聞こえます」なぜSVMをロジスティックに使うか回帰?これは基本的に同じ概念ではありませんか? – Nour

    3

    すでにOpenCVのを使用している場合は、私はあなたが組み込みSVMの実装を使用することをお勧めします、訓練/保存/ Pythonの読み込みは、次のとおりです。 C++には対応するAPIがあり、同じ量のコードで同じことをする。それはまた、あなたは、nはサンプルとnラベルとして形状モデルを平らにし、あなたが行ってもいいです提供最高のパラメータ

    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') 
    

    と出力

    #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.]  
    

    を見つけるために、「train_auto」を有します。あなたはたぶんasmの部分を必要としません。sobelやgaborのような向きに敏感ないくつかのフィルタを適用し、行列を連結してそれらを平坦化してから、直接SVMに送ります。おそらくおそらく70-90%の精度を得ることができます。

    誰かが言ったように、cnnはsvms.hereの代わりにlenet5を実装するいくつかのリンクがあります。これまでのところ、私はsvmsをはるかに簡単に開始することがわかります。

    https://github.com/lisa-lab/DeepLearningTutorials/

    http://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi

    -edit-

    ランドマークだけであるN(x、y)は、正しいベクトル?だからあなたはなぜそれらを2nの大きさの配列に入れて、単にそれらを上記のコードに直接送り込んでみませんか?

    例えば、4土地マークの3つの訓練サンプル(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 =幸せ

    1 =怒っ

    2 =嫌悪

    +0

    私は表情(幸せ、怒り、嫌な、...)をランドマークの位置を使って分類するためにSVMをトレーニングしたいと思います。 – TIBOU

    +0

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

    +0

    トレーニング中私はどのように私はSVMを訓練することができますすべての感情のための多くの画像があります!すべての感情のために、申し訳ありません私はそれを得ることはありません – TIBOU

    0

    あなたが得るためにthisコードをチェックすることができますどのようにSVMを使ってこれを行うことができるかという考え。

    あなたはアルゴリズムがhere

    関連する問題