6
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-07

res2.PNG

動作環境

Windows 7 Home 64bit
OpenCV 3.1.0
Visual Studio 2013

はじめに

これまでなぜかCascadeDetectorに存在していたHOG検出器は削除され、使用不可となった。
(ソースは整理されていなく、いくつ残骸が残っている。Type指定でHOGをはねている。またdataフォルダーには、hogcascade_pedestrianの辞書が残ったままである。)
変わりに、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()));

Daimler辞書での検出結果、デフォルトに比べで検出枠が増えているが誤検出が多い。

res1.PNG

オリジナル辞書作成

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

opencv31\sources\samples\cpp\train_HOG.cpp

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

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

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5