web-dev-qa-db-ja.com

顔画像を揃える方法c ++ opencv

顔認証用のC++アプリケーションを開発しています。まず、顔を検出して画像を前処理する必要があります。

  1. 顔検出には、HaarCascadeClassifierを使用しました。問題は、このツールまたはこのアルゴリズムによって、髪の毛と背景の一部を包み込む少し大きな長方形によって検出された顔の領域が得られることです。この長方形の寸法を変更する解決策はありますか? 「frontalfacecascaadclassifier.xml」を使用しました。
  2. 顔の前処理では、 このテクニック とまったく同じように顔の位置合わせを行います。これを達成するにはどうすればよいですか?
18
OntoBLW

次に、別のHaar分類子を使用して各目を見つけることはできません(目は非常に簡単に見つけることができます)。次に、その人に2つの目があり、目が水平であることを意味する「レベル」の顔を定義します。

2つの目の間の角度を測定し、その角度で画像を回転させるだけです。

angle = atan ( eye1.Y - eye2.Y ) / (eye1.X - eye2.X )
8
Martin Beckett

与えられた画像で目の正確な位置を見つけることは簡単ではありません。 OpenCVで目を見つけるためのHaarカスケードは、有用ではないほど多くの偽陽性を生成します。さらに、このアプローチは画像の回転に対してロバストではありません(ただし、わずかな回転を補正する可能性がありますが、トレーニング画像はわかりません)。もし私があなたなら、この研究分野の関連論文を http://scholar.google.com で幅優先探索を開始します。

顔画像を位置合わせするには、堅牢な頭のポーズの推定が必要です。私は自分でいくつかの調査を行いましたが、アルゴリズムとコードを共有することはここで役立つと思います。私が見た中で最も興味深いアプローチは次のとおりです。

18
bytefish

WildプロジェクトページのLabeledFacesから次の顔の位置合わせコードを試しました。それは本当にうまく機能し、顔の特徴点を検出する必要はありません。 C++コードは次の場所からダウンロードできます: http://vis-www.cs.umass.edu/faceAlignment/

それでも顔の要点を見つけたい場合は、Viola-Jones検出器はあまり堅牢で正確ではないことがわかります。個人的には、Flandmark顔キーポイント検出器を使用することをお勧めします: http://cmp.felk.cvut.cz/~uricamic/flandmark/ これははるかに堅牢で正確です。 Cコードは上記サイトからダウンロードできます。

6
lightalchemist

顔の位置合わせのための最先端のアプローチは次のようにする必要があります:

教師あり降下法とその顔の位置合わせへの適用X.XiongおよびF.De la Torre in CVPR 2013

それは非常に高速で効果的です。あなたは彼らのプロジェクトのウェブサイトをチェックすることができます IntraFace

それらは使いやすいソフトウェアを提供します。 ただし、コアパーツコード、つまり教師あり降下法(SDM)リリースされていません、それは単純です簡単に実装できる線形回帰。

傾斜した顔を処理できることを示すデモはこちらです(プライバシーの問題については、ぼかしを追加し、左上隅の軸に注意してください): https://drive.google.com/file/d/0BztytuqPViMoTG9QaEpZWi1NMGc/edit?usp = Sharing

4
rookiepig

ずれた顔を検出すると、顔認識が困難になります。位置合わせを修正したい場合もあれば、正しく位置合わせされていないものを除外するだけで十分な場合もあります(たとえば、ビデオストリームで顔を検出している場合)。私は後者のアプローチを採用し、特別なHaar Cascadeをトレーニングして、正しく位置合わせされた明るい顔のみを検出しました。詳細はこちら: http://rwoodley.org/?p=417

私のカスケードを使用する場合は、それがどのように機能するかを教えてください。他の人がどのような結果を得るのか興味があります。それは私のニーズを満たしました。

1
Bob Woodley

ここでは、OpenCVとDLibを使用して実装しました: https://github.com/ManuBN786/Face-Alignment-using-Dlib-OpenCV

傾斜した面は、私のコードを使用して位置合わせできます。

1
Manu B.N

CSIRO顔分析SDK( ウェブサイトとデモソースコード )ソフトウェアを見てください。顔の位置合わせを行い、66の基準点で追跡します。それは速くて非常に正確です。

0
ivan_a

これを実現するアルゴリズムを一日中検索したところ、Hemlata et al。による「 顔の特徴と傾斜した顔の傾斜角度を見つけることによる顔検出 」が見つかりました。 GoogleからDuckDuckGoに切り替えた後。 45度を超える角度で傾斜した面をサポートします。

コードで実装する方法に関しては、それは私が現在取り組んでいる別の問題ですが、少なくともこれは出発点です。

0
Seanny123

顔認証の場合、 dlib または face_recognition を使用してこれを行うことができます。これは、現在opencvよりも非常に便利で正確です。

Dlibに関しては、顔の位置合わせはここにあります(C++コード) http://dlib.net/face_alignment.py.html

またはここ(pythonコード) https://www.pyimagesearch.com/2017/05/22/face-alignment-with-opencv-and-python/

ローカルバイナリ機能の回帰による3000 FPSでの顔の位置合わせ という名前のアルゴリズムペーパーは、dlibによって実現されます。

0
Jayhello