8

OpenCV(SVNの最後のバージョン)をコンパイルしてMac Os Xにインストールしました(これが問題の原因である可能性があります)。

サンプルは機能しますが、顔検出アルゴリズムは私には遅いようです。顔の検出時間は約400msです(含まれている例を使用しました)。その場合、FPSはかなり低くなります。

YouTubeやその他すべてで、リアルタイムの顔検出機能を備えた非常にスムーズなビデオを見るので(iPhoneでも)、混乱を感じます。古いWindowsPCではさらに高速だったことを覚えています。

400ミリ秒は正しい検出時間ですか?

注:私のMacbookは古くはなく(2009)、すべてが正常に動作します。iSight Webカメラ(統合Webカメラ)を使用しています。ウェブカメラに顔(私の顔)が1つだけあります。そして、顔がなければほぼ同じ時期です。

4

6 に答える 6

9

入力画像のサイズはどれくらいですか。640x480だと思います。通常、YouTube動画を投稿する人は、画像のサイズを160x120に変更します。640x480のフル解像度では、2〜3fpsを超えるものを取得することは非常に困難です。160x120の画像を送信してみてください。少なくとも10fpsを取得する必要があります。

于 2011-02-02T19:37:12.813 に答える
4

前の回答に追加:

の最大サイズと最も重要な最小サイズを設定することで、処理を高速化することもできますdetectMultiScale

[また、前の回答が述べているように、Haar検出器は非常に単純な機能を使用するため、大幅な縮小が必要です(最大6ピクセルの関係の場合、より大きなスケールでは、長方形のような領域を1ピクセルのように追加します) 。標準のmac/mbp2011では、約60fpsで十分です。]

さらに高速化するために、たとえばtemplateMatchingを使用して、変化しない領域を排除することもできます。

于 2012-11-01T22:48:57.343 に答える
4

最近、HAARおよびLBPカスケード分類子が実装されているSimdライブラリを見つけました。OpenCVの標準のHAARおよびLBPカスケードを使用できます。この実装には、SSE4.1、AVX2、およびNEON(ARM)を使用したSIMD最適化があるため、元のOpenCV実装よりも2〜3倍高速に動作します。

于 2016-10-20T12:25:42.680 に答える
1

私は同じ問題を抱えていました。4GBのRAMを搭載したクアッドコアマシンでは、検出ごとに500ミリ秒でしたが、スケールオプションがあることに気づきました。

./facedetect --scale = 4

20ms未満の検出率が得られます

お役に立てば幸いです。

ククパ

于 2011-03-18T09:52:09.673 に答える
1

イメージで実行する場合は、特定の制限までダウンスケールする必要があります。ビデオの場合、顔検出とともに、追跡を試すこともできます。代替フレームごとに顔検出を実行し、フレーム間の顔の位置を追跡できます。

また、OpenCvは、Cannyを使用して、Faceを見つける可能性がない領域を破棄することをサポートしています。

于 2016-05-25T22:19:54.137 に答える
0

ビデオシーケンスでフレームのサイズを10倍に変更しましたが、うまく機能しています。また、プロセスを高速化するには、各フレームで顔検出器を使用してから、(ドリフトを避けるために)間のフレームで代わりにフェイストラッカーを使用します。xx-1

このリンクをチェックアウト:追跡と検出


また、サンプルコードが誰かを助けるかもしれません(追跡認識ではなく、単純な検出です):

これはAndroidの例ですが、他のプラットフォームや言語のopencvでもほとんど同じです。」

mRgba = inputFrame.rgba();
mGray = inputFrame.gray();

int resizeFactor=10;//or any other number based on your input resolution
Imgproc.resize(mGray,mGray,newSize(mGray.width()/resizeFactor,mGray.height()/resizeFactor));
mRgba = proc(mRgba, mGray,resizeFactor);

そして、「proc」機能は次のようになります-OpenCV4Android顔検出サンプルからこれを見つけてアップグレードしました:

public Mat proc(Mat mRgba, Mat mGray, int resizeFactor) {
MatOfRect faces = new MatOfRect();
        if (mJavaDetector != null)
            mJavaDetector.detectMultiScale(mGray, faces, 1.1, 2, 2, new Size(0,0), new Size());//change this according to your usage-> Size(0, 0)

        Rect[] facesArray = faces.toArray();
        for (Rect rect : facesArray) {
            Point t1 = rect.tl();
            t1.x *= resizeFactor;
            t1.y *= resizeFactor;
            Point br = rect.br();
            br.x *= resizeFactor;
            br.y *= resizeFactor;
            Imgproc.rectangle(mRgba, t1, br, FACE_RECT_COLOR, 3);
        }

        return mRgba;
    }

私が使用したCPU:Snapdragon 720G


また、関連するフォーラムから、LBPはHAARよりもはるかに高速であることがわかりました。これと性能や品質についてはよくわかりませんが、この点についても触れておくといいと思いました。

于 2021-03-19T07:52:47.383 に答える