私は現在、悲しいことや幸せのようなユーザーの表情(ウェブカメラから一度に1人のユーザーのみ)を抽出しなければならないプロジェクトに取り組んでいます。SVMを使用したリアルタイムの表情分類
表情を分類するための私の方法は次のとおりです。顔の特徴点
を取得する画像- 使用OpenCVの
今、私は表情の分類をしようとしています
はSVMがいいですか? SVMで始めるにはどうすればよいでしょうか:
どのように私はこの目印を使用してすべての感情のためにSVMを訓練するつもりですか?
私は現在、悲しいことや幸せのようなユーザーの表情(ウェブカメラから一度に1人のユーザーのみ)を抽出しなければならないプロジェクトに取り組んでいます。SVMを使用したリアルタイムの表情分類
表情を分類するための私の方法は次のとおりです。顔の特徴点
を取得する画像今、私は表情の分類をしようとしています
はSVMがいいですか? SVMで始めるにはどうすればよいでしょうか:
どのように私はこの目印を使用してすべての感情のためにSVMを訓練するつもりですか?
はい、SVMは、このタスクでうまく動作することがわかりました。このような手続きを記述している論文は何十もありました(そうでなければhundreads)。例えば
:
自身が本のタイトルのようなhttp://www.support-vector-machines.org/(、ソフトウェア上で取得することができるのSVMのいくつかの基本的な情報源リンクなど)
そして、あなたはあなたが基本的なライブラリのいずれかを取得することができます理解することではなく、それらを使用することにだけ興味がある場合:
すでに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 =嫌悪
ディープニューラルネットワークは常にSVMよりも優れている説明を見つけることができます。 – usamec
私はSVM、どんな助けで作業しなければならないのですか? – TIBOU
@usamec、あなたのステートメントは常に真ではありません。で始まる "より良い"の定義に依存します。 – Bull