質問
私は疑問に思っていました、顔の認識はどのように正確に機能しますか?誰もが異なる顔を持っているので、「一般的な」顔か何かを検出することはできません。
解決
Jun Zhang et al。 (1997)コンピュータービジョンに適用可能な3つの異なる顔認識の方法を調査します。それぞれが統計分析の注目に値する領域です。
1)Eigenfaceアルゴリズム
2)弾性マッチング
3)オートアソシエーションおよび分類ネット
Eigenfaceメソッドは、何らかの形式の次元低減方法(PCAなど)を使用してフェイス画像間の統計的変動をコードします。ここでは、特徴空間の結果として生じる特徴的な違いは、必ずしも目、耳、鼻などの孤立した顔の特徴に対応するものではありません(単語、特徴ベクトルの不可欠なコンポーネントは事前に決定されていません)。
弾性マッチングは、目、あご、鼻の先端など、顔の特定の輪郭ポイントに対応するノードグラフ(つまり、ワイヤーフレームモデル)を生成し、認識は既知のデータベースとの画像グラフの比較に基づいています。マッチングプロセス中に画像グラフを回転させることができるため、このシステムは画像の大きなバリエーションに対してより堅牢になる傾向があります。
分類ネット認識は、弾性マッチングと同じ幾何学的特性を利用しますが、監視された機械学習技術(多くの場合、サポートベクターマシンの使用を含む)であることによって根本的に異なります。
照明や顔のアライメントの変動が大きい場合、固有性検出は他の方法を下回りますが、実装しやすく、計算効率が良く、監視されていない方法で顔を認識できるという利点があり、したがって事実上の標準である傾向があります。多くの最先端の検出技術は、特徴ベクトル抽出が異なって処理されたとしても、認識前の何らかの形の次元削減にも依存しています。
他のヒント
ここで答えを見つけることができます: 顔認識
すべての顔には、顔の特徴を構成する多数の識別可能なランドマーク、さまざまなピークと谷があります。 Faceitは、これらのランドマークをノードポイントとして定義しています。それぞれの人間の顔には約80の節点があります。ソフトウェアによって測定されたこれらのいくつかは次のとおりです。
* Distance between the eyes
* Width of the nose
* Depth of the eye sockets
* The shape of the cheekbones
* The length of the jaw line
これらのノードポイントは、データベース内の顔を表すフェイスプリントと呼ばれる数値コードの作成を測定します。
開始する良い方法は、主成分分析(固有表とも呼ばれるPCA)、フィッシャーの線形判別分析(LDA)、およびサポートベクターマシン(SVM)について読むことです。これらは、顔の分類に非常に役立つ分類方法です。
OpenCVには、の優れた実装が既に含まれています PCA と SVM. 。 C ++のOpenCVの顔認識と分類コードのための優れたリソースは このウェブサイト.
顔の分類に関連する最も関連する方法のための論文へのリソースとリンクを提供する1つのWebサイトは これです.
私の最初の顔分類プログラムに非常に役立つMATLABのサンプルコードを備えたPCA固有表とLDAのよく説明されている例 ここにある.
これは、多くの学習を必要とする複雑な主題です。 OpenCVを見ることから始めることをお勧めします - http://opencv.willowgarage.com/wiki/ - チュートリアルなどを備えたコンピュータービジョンライブラリなど。これは、「一般的な顔」ではなく、機能を選択し、メトリックを実行することです。