1

私は現在、人の検出とカウントのプロジェクトに取り組んでいます。基本的に、USB ウェブカメラを介してシーン内の人を検出し、通り過ぎる人をカウントします。現在、私のセットアップは次のとおりです。

  1. OpenCV 2.4.6、Haar法(浮動小数点処理)で人の頭を検出
  2. ARM A9クアッドコアとMaliクアッドコアGPUを搭載したARMボード

残念ながら、処理時間は 1 フレームあたり 70 ~ 100 ミリ秒 (14 ~ 10 fps) と十分に速くないため、通常の速度またはそれより速い速度で歩いている人はカウントされません。ボトルネックは OpenCV の HaarDetection メソッドにあり、基本的に 1 フレームあたりの処理時間の 90% がプロセスによって消費されます。

整数処理に基づく LBP モデルである Haar 以外の別のモデルを使用してみましたが、これまでのところ、私の LBP モデルは満足のいくものではなく、まだ新しいモデルの作成に取り組んでいます。また、OpenCV (OpenCV でネイティブに実装されたマルチスレッド) で TBB を使用してみましたが、Odroid で何らかの理由でクラッシュが発生し、TBB を使用しないとアプリケーションが安定して動作します。

私が考えることができる唯一の最適化は、ボードで Mali GPU を利用し、修正された HaarDetection で OpenCV を再コンパイルして GPU 処理能力を利用することです。私の質問は、これは OpenGL ライブラリを使用して実行可能ですか? OpenGLのほとんどの例は、画像を処理するのではなく、グラフィックをレンダリングすることです。

4

2 に答える 2

2

考慮できるその他の最適化:
1. パラメーターをいじる - スケール ファクターと最小ウィンドウ サイズを少し変更するだけでも、アルゴリズムを高速化できます。
2. 別のカスケードを使用してみて
ください 3. OpenCV ビルド パラメータを試してみてください - プロセッサがマルチスレッドをサポートし、カスケードが複数のスレッドを使用できる場合 ( http://www.threadingbuildingblocks.org/)、WITH_TBBが役立つかもしれません(私は可能です - 常にではないかもしれませんが、少なくとも一部は可能です)。ENABLE_SSE と ENABLE_SSE2 も見てください。
4. haar カスケード検出器の他の実装を検索するか、独自に作成してみてください。高速化することは可能です。(記事とコメント) を参照してください。http://www.computer-vision-software.com/blog/2009/06/fastfurious-face-detection-with-opencv/
5. 画像シーケンスを分析している場合は、2 つの連続するフレームが同じか非常に似ているかどうかを確認します -その場合、現在のフレームの分析をスキップできます。結果は同じ (または非常に似ている) ためです。私はこのソリューションを私の学士論文 (720p ウェブカメラを使用した単純なアイトラッカー) で使用しましたが、うまくいきました。
6. 上記のように + 差異が発生している地域のみを検索します。
7. たとえば 16 個の長方形に画像を分割します。各長方形の現在のフレームと前のフレームの違いを確認します - 1 つの行または列のすべての長方形が前のフレームとほぼ同じ場合 - この行/列を分析しないでください (画像の一部のみをハール カスケードに渡します - ROI を使用します) . 人々はフレームの片側から別の側に歩いたり走ったりするため、非常に良い結果が得られ、速度が向上するはずです.2つの連続するフレーム間ですべての長方形が変わる可能性はほとんどありません.

于 2013-08-23T00:13:08.130 に答える
0

latensvm 検出器 (パーツごとの検出) を使用して人物の検出を試すことができます。幸いなことに、ここに person のトレーニング済みモデルがあります。

https://github.com/Itseez/opencv_extra/tree/master/testdata/cv/latentsvmdetector/models_VOC2007

おそらくHOGよりも速いでしょう。

それが役立つことを願っています。

于 2013-08-22T09:14:08.120 に答える