4

私は、OpenCV-2.1.0(cvHaarDetectObjects)のHaarアルゴリズムを使用して、iOS4.2のObjective-Cプロジェクト内から写真やビデオフレームの顔を検出することに成功しています。ただし、ほとんどの条件下でiPhone 4のビデオフレームの処理時間は約1〜2秒かかります。私が使用しているコードの例を以下に示します。

    NSString *path = [[NSBundle mainBundle] pathForResource:@"haarcascade_frontalface_alt" ofType:@"xml"];

    CvHaarClassifierCascade* cascade = 
            (CvHaarClassifierCascade*)cvLoad([path cStringUsingEncoding:NSASCIIStringEncoding], 
                                             NULL, NULL, NULL);
    CvMemStorage* storage = cvCreateMemStorage(0);

    CvSeq* faces = cvHaarDetectObjects(small_image, cascade, storage, 1.2, 0, 
                                       0 |CV_HAAR_DO_ROUGH_SEARCH |CV_HAAR_FIND_BIGGEST_OBJECT, cvSize(30, 30));

ROIのスマートな適用や、浮動小数点数ではなく整数の使用など、複数の最適化手法を試しました。しかし、これらの変更には膨大な時間がかかり、わずかなメリットしかありませんでした。

LBPを利用すると、顔検出時間を大幅に短縮できることが示唆されました。私はLBPを実装する方法を実験して探してきましたが、役に立ちませんでした。opencvにはカスケードファイル(lbpcascade_frontalface.xml)がありますが、それを使用する方法についての提案は見つかりません。

他の最適化手法や検索で見逃した可能性のあるGoogleリンクなど、助けていただければ幸いです。検出の精度は、それが合理的に効果的である限り、重要ではありません。

ありがとう!

4

1 に答える 1

2

Instrumentsを使用して、アプリケーションのパフォーマンスのボトルネックがどこにあるかを判断してみてください。おそらく、彼らはあなたが思っているものとは異なっているでしょう。

また、このパフォーマンスガイドもご覧ください。

于 2011-06-04T15:02:09.653 に答える