ysku's blog

ウェブ・無線通信・組み込みとか

Haar-likeによる人物検出【OpenCV + Python】

次はHaar-likeによる人物検出を行いたいと思います
以下のサイトを参考にさせて頂きました
http://python-gazo.blog.jp/opencv/%E4%BA%BA%E6%A4%9C%E5%87%BA
http://python-gazo.blog.jp/opencv/%E4%BA%BA%E6%A4%9C%E5%87%BA

プログラム

# -*- coding: utf-8 -*-
import cv2
import sys

dataset_dir = u"/path/to/dataset/"
 
def haarlike():
    argv = sys.argv
    argc = len(argv)
    if (argc != 2):
        #引数がちゃんとあるかチェック
        #正しくなければメッセージを出力して終了
        print 'Usage: python %s arg1' %argv[0]
        quit()
    # 画像の読み込み
    img_name = dataset_dir + argv[1]
    im = cv2.imread(img_name)
    # 探索用の機械学習ファイルを取得
    cascade = cv2.CascadeClassifier("haarcascade_fullbody.xml")
    # 探索(画像,縮小スケール,最低矩形数)
    eye = cascade.detectMultiScale(im, 1.1, 3)
    
    # 検出した部分を長方形で囲う
    for (x, y, w, h) in eye:
        cv2.rectangle(im, (x, y),(x+w, y+h),(0, 50, 255), 3)
 
    # 画像表示
    cv2.imshow("Show Image",im)
    # キー入力待機
    cv2.waitKey(0)
    # 画像保存
    out_file_name = "after" + argv[1]
    cv2.imwrite(out_file_name,im)

    print u"saved"
    cv2.destroyAllWindows()

    #プログラムの終了
    quit()

if __name__ == '__main__':
    haarlike()

プログラムの説明
■実行方法
$ python [上記のプログラム名] [人物検出したい画像名]

■関数の説明
・CascadeClassifier:ファイルから分類器を読み込む
・detectMultiScale:入力画像中から異なるサイズのオブジェクトを検出する
検出されたオブジェクトは、矩形のリストとして返される

以上が、OpenCV + Pythonでの、簡単なHaar-likeによる人物検出の説明になります