4

Pythonで顔認識プログラムをコーディングしようとしています(分類にはk-nnアルゴリズムを適用します)。

まず、画像をグレースケールに変換してから、画像のピクセル(128x128 = 16384の機能の合計)を使用して(Opencvのimagedata関数を使用して)長い列ベクトルを作成しました。

したがって、次のようなデータセットを取得しました(最後の列はクラスラベルであり、16384ではなくデータセットの最初の7つの機能のみを表示しました)。

176, 176, 175, 175, 177, 173, 178, 1 
162, 161, 167, 162, 167, 166, 166, 2

しかし、このデータセットにk-nnを適用すると、厄介な結果が得られます。画像をピクセル表現に変換するだけでなく、このデータセットに追加のプロセスを適用する必要がありますか?

ありがとう。

4

4 に答える 4

2

通常、顔認識パイプラインを効果的にするには、いくつかのステージが必要です。ある程度の幾何学的正規化は、精度にとって重要です。手動で基準点にラベルを付けて各画像の変換を取得するか、オープンソースの基準点検出器がある基準点を自動的に検出する必要があります。opencv の getAffineTransform 関数を試してください。また、照明の不一致は大きな問題を引き起こす可能性があります。照明の正規化手法 (自己商イメージなど) を試してみるとよいでしょう。拡散反射と影 (鏡面反射はそれほど多くない) に対してうまく機能するからです。次元削減の場合、主成分分析 (PCA) または線形判別分析 (LDA) が出発点として適しています。ただし、未加工のピクセル機能ではなく、LBP、HOG、SIFT などのより意味のある機能を検討することもできます。また、

于 2013-08-08T00:29:06.373 に答える
1

おそらく、目、鼻先、口の位置を合わせる必要があります。

おそらく、より洗練された画像表現方法も必要になるでしょう。たとえば、勾配の方向と自己商イメージが出発点として適しています。

于 2010-11-17T03:59:27.267 に答える
1

うまく機能させたい場合は、はい、機能変換を行う必要があります。

PCA または LDA はうまく機能します。PCA は、入力ベクトル (この場合はベクトル化された画像) のコレクションを受け取り、一連の入力にまたがる固有顔を見つけます。次に、テスト中に、入力ベクトル (画像など) をこの一連の固有顔に投影し、結果の座標ベクトルを特徴ベクトルとして使用します。詳細については、[ Turk and Pentland, 1991 ] を参照してください。

この基本的な PCA 手法をPIE データベースで使用した私の個人的な実験は成功しました。

于 2010-11-14T06:08:27.253 に答える
0

これどうやって印刷するの?リシェイプ機能を使ってみましたか?2D 画像を複数チャンネルあり/なしの 1D 画像に変換します。

また、画像のピクセルは特徴ではありません。カーテン、本、他の顔など、顔の後ろにさまざまなオブジェクトを配置できます。顔の境界、目の間の距離などは、そのようなものに対してより不変です。

于 2010-11-14T05:57:58.760 に答える