6

現在、EmguCV (OpenCV C# ラッパー) を使用して、リアルタイム (ウェブカメラ) で顔を正常に検出しています。私は約7 FPSを取得します。

今、私はパフォーマンスを向上させる (そして CPU サイクルを節約する) ことを検討しており、オプションを探しています。ここに私のアイデアがあります:

  • 顔を検出し、顔の特徴をピックアップし、次のフレームでそれらの特徴を見つけようとする (SURF アルゴリズムを使用) ため、これは「顔検出 + 追跡」になります。見つからない場合は、顔検出を再度使用します。

  • 顔を検出し、次のフレームで、前に顔があった ROI で顔を検出しようとします (つまり、画像の小さな部分で顔を探します)。顔が見つからない場合は、画像全体でもう一度探してみてください。

  • 補足: 2 ~ 3 フレームで顔が検出されず、画像に動きがない場合は、動きが検出されるまで顔を検出しようとしないでください。

私に提案はありますか?

ありがとう。

4

3 に答える 3

3

あなたが紹介したすべてのソリューションは、スマートで合理的なようです。ただし、顔検出に Haar を使用する場合は、段階の少ないカスケードを作成しようとすることがあります。顔検出には 20 段階が推奨されていますが、10 ~ 15 段階で十分かもしれません。これにより、パフォーマンスが著しく向上します。独自のカスケードの作成に関する情報は、チュートリアル: OpenCV haartraining (Rapid Object Detection With A Cascade of Boosted Classifiers Based on Haar-like Features) にあります。

ここでも、SURF を使用することをお勧めします。また、 PN 学習を試すこともできます: 構造的制約によるバイナリ分類器のブートストラップ。この方法を紹介する興味深いビデオが YouTube にあるので、探してみてください。

于 2011-07-16T16:14:01.957 に答える
3
  • SURF アルゴリズムの場合は試してみることができますが、顔に関連する機能が提供されるかどうかはわかりません。おそらく目の周り、近くにいて肌の不規則性がある場合、または解像度が十分な場合は髪にある可能性があります。さらに、SURF はそれほど高速ではありません。CPU 時間を節約したい場合は、より計算を行うことを避けたいと思います。

  • roi は良い考えです。カムシフト アルゴリズムを実行して選択します。CPU の節約にはなりませんが、カムシフトは非常に軽量なアルゴリズムであるため、試すことができます。繰り返しますが、それが本当に関連性があるかどうかはわかりませんが、2番目の投稿で良いアイデアを得ました:検索するゾーンを最小限に抑えます...

  • 副次的なアイデアは私にはかなり良いようです。モーション(たとえば、グローバルモーション)を検出しようとすることができます。それほど多くない場合は、すでに検出したものを再度検出しようとしないでください...モーションでそれを試すことができます平均シフトまたは顔検出からのシルエットを知っているテンプレート... フレーム n-1 およびフレーム n との非常に単純で軽量ですが、堅牢ではないテンプレート マッチングにより、これら 2 つのフレーム間の類似性を測定する係数も得られます。 、特定のしきい値を下回ると、顔検出がアクティブになると言えます....なぜでしょうか? C# ラッパーに matchTemplate() と同等の関数がある場合、実装に 5 分かかるはずです...

より良い(より深い)アイデアがあればここに戻ってきますが、今のところ、仕事から戻ったばかりで、これ以上考えるのは難しいです...

ジュリアン

于 2011-07-15T18:06:08.107 に答える
0

これは完璧な答えではなく、単なる提案です。

B.Tech in CS の最終学期のデジタル画像処理クラスで、ビット プレース スライシングと、MSB プレーン情報だけの画像が有用な画像情報のほぼ 70% をどのように提供するかについて学びました。したがって、ほぼ元の画像で作業しますが、サイズは元の 8 分の 1 にすぎません。

自分のプロジェクトでは実装していませんが、顔検出を高速化するために、それについて疑問に思っていました。後で、目の検出、瞳孔、目尻の検出にも多くの計算時間がかかり、プログラム全体が遅くなるためです。

于 2012-04-29T05:49:12.663 に答える