2017-06-26 19 views
1

ここでは、顔モジュールでFaceRecognizerクラスを使用してOpenCV 3.2で顔認識を実装するために多くの試みを行ったと言います。しかし、私が望むように受け入れられた結果は得られませんでした。FaceRecognizer OpenCVで顔を訓練して最良の結果を得る最善の方法は何ですか?

ここで私は尋ねたいことがあります。私は、最善の方法は何か、あるいは訓練と認知の間に気をつけるべき条件は何かを知りたいと思います。

  • は、(少なくとも)最高の品質、サイズ、および角度でそれぞれの人を訓練するための10匹の顔を作成します。私は、精度を向上させるためにやっていること

  • 顔を画像に合わせてみてください。

画像のHISTをイコライズそして、私はすべての3つの顔認識(EigenFaceRecognizer、FisherFaceRecognizer、LBPHFaceRecognizer)を試してみました、結果はすべて同じであったが、認識率は本当に非常に低かった、I 3人だけのための訓練を受けているだけでなく、非常によく認識することができません(拳の人は2番目のように問題に認識された)。

質問:

  • はトレーニングと認識の画像が同じ カメラからでなければならないのですか?
  • トレーニングイメージを手動でトリミングするか(photoshop - >イメージを読み込んでトレインする)、またはこのタスク をプログラムで実行する必要があります(検出→トリミング→サイズ変更してトレインする)か?
  • そして、それぞれの顔認識(int num_components, double threshold)
  • そして、どのように戻るには-1、それは不明 人であるとき訓練アルゴリズムを設定するための最良のパラメータが何をしています。
+0

** Q1 **:推奨されていますが、必須ではありませんが、カメラの品質は同等でなければなりません。 ** Q2 **:両方に違いはありませんが、プログラムで行うことを選択します。私の時間。 ** Q3 **:ドキュメントのデフォルトパラメータを試してみてください。彼らはうまく機能しました。 ** Q4 **:[line 134](http://docs.opencv.org/2.4/modules /contrib/doc/facerec/facerec_tutorial.html#eigenfaces-in-opencv)* Happy Eid * – ZdaR

+0

@ZdaRありがとう!より高い閾値とは何か、そしてより低い閾値は何を意味するのか、そしてそのための良い値は何ですか?そして、これらのパラメータは、訓練のためのものか、あるいは認識のためのものですか?私がデータを訓練したとき、私はそれを保存し、次にデータをロードするだけです。データをロードするときには、訓練を受けたときと同じパラメータを準備する必要がありますか? –

+0

これらの用語が参照されるところで、ドキュメントのリンクを添付できますか? – ZdaR

答えて

2

私のコメントを拡張し、マスタリングOpenCVの第8章のような前処理は、認識処理の援助をするために直面​​しているために本当に役立つヒント、提供:両眼が検出された場合にのみ、サンプルを採取

  • 幾何学的変換とトリミング:このプロセスは、目が整列するように画像をスケーリング、回転、平行移動し、額、顎、耳、および背景を除去することを含みます顔画像。左右用

  • 個別のヒストグラム均等化:このプロセスは、独立して、顔の左右両側の明るさとコントラストを標準化。

  • スムージング:このプロセスは、バイラテラルフィルタを用いて画像のノイズを低減します。

  • 楕円マスク:楕円形のマスクは、顔画像からいくつかの残りの毛髪及びバックグラウンドを除去します。

私はハックロード/ my fork of the example codeにセーブを追加した、あなたがそれを必要として、それを微調整/それを試して自由に感じます。現在のところ非常に限られていますが、それはスタートです。

さらに、OpenFace and it's DNN face recognizerもチェックする必要があります。 私はまだそれをしていないので、詳細を提供することはできませんが、それは本当にクールに見えます。

+0

あなたの説明をお寄せいただきありがとうございます。質問があります。224行目のpreprocessing.cppファイルに、 'scaledWidth'パラメータを渡していないことと、デフォルト値がないことがあります。これを解決するには? –

+0

@BahramdunAdil章全体のコード例を調べましたが、 'scaledWidth'を見つけることができず、あなたが何を参照しているのか分かりません。 –

+0

'void detectLargestObject(const Mat&img、CascadeClassifier&Cascade、Rect&largestObject、int scaledWidth)'私はpreprocessing.cppファイルの224行目で 'scaledWidth'の値が何もないので注意してください。それを見るでしょう。 –

関連する問題