17

一人の人物の全身を撮影し、その人物の「顔写真」を作成するアプリケーションを作成しています。

マグショットとは、別のマグショットと同じ一般的なサイズの人の顔全体、首、髪の毛、耳の画像を意味します。

現在、私は
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つの問題を作成します。

  • 現在使用しているカメラは使用できなくなっているため、現時点では画像をキャプチャする方法がありません。グーグルの全身画像検索のような純粋なプロンではない人々の全身画像はどこで見つけることができますか?
    編集:「立っている人」は良い検索になります:)
4

3 に答える 3

1

単一のカスケードは、このように設定されている場合、すべてのカスケードが行うことを行うことができます。さらに、判断するためのいくつかの結果は得られません. 使用するカスケードは、それらを構成する教育用画像のコレクションやいくつかのパラメーターが異なる場合があります。

独自のカスケードを構築する方法に関するチュートリアルは、こちらにあります。使用する 4 つのカスケードのトレーニングに使用する写真を入手すると便利ですが、それらが公開されているかどうかはわかりません。

于 2011-04-23T23:02:56.237 に答える
0

肩まで長方形に戻る上半身のハール カスケード ファイルを使用することをお勧めします。「 http://alereimondo.no-ip.org/OpenCV/34」で頭と肩のカスケード ファイルを見つけてください。

于 2015-02-20T10:21:18.553 に答える
0

わかりました、私はそれを理解しましたが、プロジェクトは今のところ氷上にあります.
VM のロードに永遠に時間がかかるため、貼り付けるソースがありません。
誰かが本当に興味を持っている場合は、お知らせください。投稿します。
もっとうまくできるように見えるものを見つけたら、私に知らせてください。

私が取った手順は次のとおりです。

  1. 高さまたは幅のいずれかが 500 ピクセルを超える場合は、画像を読み込み、高さまたは幅が最大 500 ピクセルに縮小されたバージョンの新しい画像を作成します。スケールを保存します。
  2. Harrtraining のすべての正面顔 Harrcascades で、Ask Ernestの C# OpenCV 実装を実行します。
  3. 何らかの理由で、Ask Ernest によって生成された長方形を 1.3 倍に拡大する必要があります
  4. 生成された四角形では、標準偏差を使用して誤検出を除去します。長方形の各コーナーに対してこれを行い、各長方形のコーナーが平均コーナー位置から離れている距離を見つけました。私は角が壊れている長方形をメモし、候補長方形のリストから削除しました。
  5. 残りの長方形から平均長方形を取得し、質問の上から「GetMugshotRectangle」を適用します。
  6. 手順 1 で保存した縮尺を使用して、マグショットの四角形を拡大縮小します。
  7. 元の画像からマグショットを切り取り、新しい場所に保存します。

終わり!

于 2011-05-03T16:27:24.333 に答える