web-dev-qa-db-ja.com

非正面画像用のOpenCVによる顔検出

Opencvを使用して顔を検出しようとしています。顔は正面ではなく、カメラが顔を横からキャプチャしたため、片方の目と口の一部だけが表示されます。メリットを得ることなく、複数の構成でHaarDetectObjectsを試しました。カスケードを変更してテストしました:haarcascade_frontalface_default.xml、haarcascade_frontalface_alt.xml、haarcascade_profileface.xml、非常に悪い結果になりました。他にもっと良いカスケードはありますか?他に提案はありますか?

ありがとう

12
Hani

これで、OpenCVに、VadimPisarevskyによって作成されたプロファイル面の新しいLBPカスケードができました。

https://github.com/Itseez/opencv/blob/master/data/lbpcascades/lbpcascade_profileface.xml

どうやら、それは正しいプロファイル面のみを検出するので、すべてのプロファイル面を検出するには、画像を反転させて2番目のステップを実行する必要があります。

14
Jose Gómez

参照したカスケードファイル(例:aarcascade_frontalface_default.xml、haarcascade_frontalface_alt.xml、haarcascade_profileface.xml)は、完全な正面面を使用してdetect完全な正面面を使用して作成されます。そのため、顔の半分は、コンピューターにとって正しい形状として正しく認識されないことは明らかです。

この状況で行う必要があるのは、「この場合はface_の半分」である関心のあるオブジェクトを認識するようにOpenCVをトレーニングすることです。OpenCVの専門用語では、-' HaarTraining 'として知られています。 thisthis および this トレーニングを開始するための開始点としての記事。

データ(顔の半分のさまざまな画像など)を使用してOpenCVをトレーニングすると、XMLカスケードファイルが準備でき、独自のコードにプラグインして顔の半分を検出できます。

幸運を!

9
gsbabil

私は前頭葉以外の画像の顔検出の同じ問題に取り組んできました。マルチタスクCNNを使用してみてください。これは、顔の検出と位置合わせに最適なソリューションです。さまざまなポーズ、照明、オクルージョンなどの問題に対処できます。

論文は リンク で入手できます。コードはGitHubの Link で入手できます。 python実装を使用したところ、結果は素晴らしいです。ただし、画像に顔がたくさんある場合、コードは少し遅くなります。

OpenCVに固執したい場合でも、顔検出用の新しいディープラーニングモデルがOpenCVに追加されました。結果はマルチタスクCNNほど良くありません。 pyimagesearchに顔検出用のOpenCVディープラーニングモデルの実装があります リンク

2
archit522