一人の人物の全身を撮影し、その人物の「顔写真」を作成するアプリケーションを作成しています。
マグショットとは、別のマグショットと同じ一般的なサイズの人の顔全体、首、髪の毛、耳の画像を意味します。
現在、私は
http://askernest.com/archive/2008/05/03/face-detection-in-c.aspx
を使用
してOpenCVを実装しており、
harrcascade_frontalface_default.xml
harrcascade_frontalface_alt.xml
harrcascade_frontalface_alt2.xml
harrcascade_frontalface_alt_tree.xml
私のカスケードとして。
1つのカスケードではすべての顔が検出されないため、すべてのカスケードを使用します。すべてのカスケードによってすべての顔が検出された後、平均的な正方形を見つけ、それを使用して、マグショットの高さと幅を最終的に推測します。
私の問題は3つの部分です。
私の現在のプロセスはかなり遅いです。どうすれば検出プロセスを高速化できますか?
編集:処理時間は写真のサイズに直接関係していることがわかりました。写真のサイズを小さくすると役立つ場合があります。単一のカスケードでは、遭遇したすべての顔を検出できないため、すべての顔を使用しています。もちろん、これにより、さまざまな正方形といくつかの誤検知が発生します。誤検知を特定し、それらを平均二乗計算から除外するには、どのような方法を使用できますか?元。
編集:標準偏差内の値の平均を実装しています。すぐにコードを投稿します。顔の正方形の座標を考えると、マグショットを見つける最善の方法が正確にはわかりません。顔と顔の比率はどこにありますか?
編集:これを解決しました。私のすべての頭が彼らの顔の比率であると仮定します。static public Rectangle GetMugshotRectangle(Rectangle rFace) { int y2, x2, w2, h2; //adjust as neccessary double heightRatio = 2; y2 = Convert.ToInt32(rFace.Y - rFace.Height * (heightRatio - 1.0) / 2.0); h2 = Convert.ToInt32(rFace.Height * heightRatio); //height to width ratio is 1.25 : 1 in mugshots w2 = Convert.ToInt32(h2 * 4 / 5); x2 = Convert.ToInt32((rFace.X + rFace.Width / 2) - w2 / 2); return new Rectangle(x2, y2, w2, h2); }
私はそれらの誤検知を取り除く必要があります。
わかりました、その4つの問題を作成します。
現在使用しているカメラは使用できなくなっているため、現時点では画像をキャプチャする方法がありません。グーグルの全身画像検索のような純粋なプロンではない人々の全身画像はどこで見つけることができますか?
編集:「立っている人」は良い検索になります:)