人体の検出は分類器が違うだけで顔と目の検出と同じです。
分類器は、
haarcascade_fullbody.xml
を使います。
ソースコード
# -*- coding: utf-8 -*-
import cv2
# 人体検出用の分類器を読み込む
bodyCascade = cv2.CascadeClassifier('haarcascade_fullbody.xml')
# カメラで動画を撮影する カメラ1台の場合は引数に0 or -1を設定する
cap = cv2.VideoCapture(0)
cap.set(3,640) # 横幅を設定
cap.set(4,480) # 縦幅を設定
while True:
# フレーム毎にキャプチャする
ret, img = cap.read()
# 顔検出の負荷軽減のために、キャプチャした画像をモノクロにする
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 顔検出のパラメータの設定
bodys = bodyCascade.detectMultiScale(
gray,
scaleFactor=1.2,
minNeighbors=5,
minSize=(20, 20)
)
# 人体出時に四角い枠を表示
for (x,y,w,h) in bodys:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
# imshow関数で結果を表示する
cv2.imshow('人体の検出中',img)
# ESCキーが押されたら終了
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
頭から足まで映らないと認識しないようです。頭から足まであれば同時に4人くらい検出できました。
|