1

ウェブカメラからのライブ ビデオ フィードで手を検出するように HAAR 分類器をトレーニングしました。621 のポジティブと 3712 のネガティブを使用しました。

opencv_createsamples を使用してポジティブの vec ファイルを生成しました: ./opencv_createsamples -vec /Users/.../positivesvec.vec -info /Users/.../positiveDesc.txt -w 20 -h 30

次に、opencv_traincascade を使用して分類器をトレーニングしました。 numNeg 3712 -numStages 15 minHitRate 0.999 maxFalseAlarmRate 0.5 -w 20 -h 30 -mode ALL

トレーニングには約 30 時間ほどかかり、xml ファイルを取得しました。ただし、そのxmlファイルを検出に使用すると、非常に遅くなります(おそらく3〜4秒で1フレーム)。

顔に対して完全に機能するため、オブジェクト検出コードが正しいことはわかっています。これは私が使用するものです:

trained_cascade_name = "/Users/.../cascade.xml";
if( !cascade.load( trained_cascade_name ) ){ qDebug()<<"Error loading cascade file!"; return; };
std::vector<Rect> hands;
    Mat frame_gray; // Haar works on grayscale images
    cvtColor(frame, frame_gray, CV_RGB2GRAY);
    equalizeHist(frame_gray, frame_gray);

    cascade.detectMultiScale( frame_gray, hands, 1.1, 3, 0|CV_HAAR_DO_CANNY_PRUNING|CV_HAAR_FIND_BIGGEST_OBJECT, cv::Size(30,30),cv::Size(100,100));
    CvPoint topleft, bottomright;
    for( int i = 0; i < hands.size(); i++ )
      {
        topleft.x=hands[i].x;
        topleft.y=hands[i].y;
        bottomright.x=hands[i].x+hands[i].width;
        bottomright.y=hands[i].y+hands[i].height;
        cv::rectangle(frame, topleft, bottomright, Scalar(255,0,255), 1, 8, 0);
      }
4

2 に答える 2

1

オブジェクトが異なれば、偽陽性の 50% を拒否するために、ステージごとに異なる数の木/切り株が生成されます。

任意の地域を選択して分類します。この手順では、下位ステージで呼び出されるツリー/切り株の数を確認します。

カスケードのステージごとに木/切り株が増えるだけで、領域の分類により多くの時間が費やされる可能性があります。

それはただの勝手な推測です……。

于 2014-04-08T10:40:57.380 に答える