2016年1月8日金曜日

Windows上でOpenCV 3.1で人物を検出してみた

環境
Windows 7 Home 64bit
OpenCV 3.1.0
Visual Studio 2013

これまでなぜかCascadeDetectorに存在していたHOG検出器は削除され、使用不可となった。
(ソースは整理されていなく、いくつ残骸が残っている。Type指定でHOGをはねている)

変わりに、OpenCV 3.1でようやくHOGの説明が設けられた。

使い方

ファイルの読み込み、GRAYへの変換、領域の表示は省略

    cv::HOGDescriptor hog;
    hog.setSVMDetector(hog.getDefaultPeopleDetector());
    std::vector< cv::Rect > locations;
    hog.detectMultiScale(gray, locations);

以上で検出できる。また、detectMultiScaleのパラメータがいくつか省略されており、きちんと書くと

    hog.detectMultiScale(gray, locations, 0, cv::Size(), cv::Size(), 1.05, 2, false);

となる。

DefaultPeopleDetectorの辞書は、INRIAのデータで作成されたもので、2.4のころからなぜかソースに辞書データがハードコーディングされている。画像のサイズは、64x128と大きめである。

アニメの人も検出できるが精度はいまひとつ




また、代わりの辞書としてDaimlerPeopleDetectorも提供されており、こちらの画像のおおきさは、48x96で、使用方法は以下の用である。
   
    hog.winSize = cv::Size(48, 96);
    hog.setSVMDetector(hog.getDaimlerPeopleDetector()));



さらに、3.1からは、辞書の作成方法もサポートされるようになり、

opencv31\sources\samples\cpp\train_HOG.cpp

を使用すれば自分で辞書を作成することができる。

注意

リリースモードでは、なぜか落ちるのでdebugで使用している。ubuntuで確認してみる

以上

0 件のコメント:

コメントを投稿