この記事では、Python+OpenCVでHoG SVM識別器(分類器)を実装し、画像から人を検出する方法をソースコード付きで解説します。
Haar SVM
HoG SVMは、HoG特徴とSVM(サポートベクターマシン)を使った識別器です。
– | HoG SVMの詳細 |
---|---|
参考 | ■HoG SVMによる人検出の原理 |
このアルゴリズムは、OpenCVを使うと簡単に実装できます。
今回はOpenCVの「cv2.HOGDepreor」を使って入力画像から人を検出してみました。
書式
hog = cv2.HOGDepreor() hog.setSVMDetector(cv2.HOGDepreor_getDefaultPeopleDetector()) hogParams = {'winStride': (8, 8), 'padding': (32, 32), 'scale': 1.05} human, r = hog.detectMultiScale(gray, **hogParams)
パラメータ名 | 説明 |
---|---|
cv2.HOGDepreor_getDefaultPeopleDetector() | 人検出用のHoG特徴 |
gray | 入力画像(グレースケール) |
winStride | ウィンドウの移動量 |
padding | 入力画像の周囲の拡張範囲 |
scale | スケール |
ソースコード(Python3)
サンプルプログラムのソースコードです。
# -*- coding: utf-8 -*- import cv2 def main(): # 入力画像の読み込み img = cv2.imread("input.jpg") # グレースケール変換 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # HoG特徴量 + SVMで人の識別器を作成 hog = cv2.HOGDepreor() hog.setSVMDetector(cv2.HOGDepreor_getDefaultPeopleDetector()) hogParams = {'winStride': (8, 8), 'padding': (32, 32), 'scale': 1.05} # 作成した識別器で人を検出 human, r = hog.detectMultiScale(gray, **hogParams) # 人の領域を赤色の矩形で囲む for (x, y, w, h) in human: cv2.rectangle(img, (x, y), (x + w, y+h), (0,0,200), 3) # 結果を出力 cv2.imwrite("result.jpg",img) if __name__ == '__main__': main()
※動作には、OpenCVとNumPyライブラリが必要です。
■ライブラリの導入方法は「【Python3】OpenCV3+NumPyをインストール(Windows編)」で紹介します。
実行結果
サンプルプログラムの実行結果です。
– | 関連記事 |
---|---|
1 | PythonでOpenCV入門 サンプル集 |
2 | 【Python】画像処理プログラミング入門 |
3 | 【画像処理入門】アルゴリズム&プログラミング |
コメント
参考の「HoG + SVMによる顔検出の原理」がリンク切れしています。
※匿名様
コメントありがとうございます。
リンク切れを修正いたしました。