やること
カメラ入力の動画の画像から顔を検出し、バウンディングボックス(検出領域を示す矩形)を表示させます。
pythonです。
準備
https://github.com/opencv/opencv/tree/master
からカスケード識別器をDLしておき、そこに含まれる
https://github.com/opencv/opencv/tree/master/data/haarcascades
のフォルダを適切な場所に保存しておきます。
(これから作るpythonファイルのフォルダと同じ場所など)
face_detect.py
import cv2 as cv
capture = cv.VideoCapture(1) #カメラの指定 ID1はノートブック内蔵カメラ 必要に応じてID変更
cascade = cv.CascadeClassifier( #顔認識用学習ファイルの指定
r'<該当箇所までのフルパス>/haarcascades/haarcascade_frontalface_alt.xml'
)
while(True):#ループでカメラから連続で画像を取得する
ret, frame = capture.read()# retにはカメラの接続状況がBoolで入る。frameには画像データが入る
facerect = cascade.detectMultiScale(frame)#frameに含まれる顔を検出し、その位置をfacerectに格納する
if len(facerect) > 0:#顔が検出されない場合はlen(facerect)が0以下になる、検出されればfacerectに位置が格納される。
for rect in facerect:#rectの1,2個目、3,4個目のデータを取得して矩形を書く
cv.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]),(255,0,0), thickness =2)#blue,green,red
cv.imshow('Frame', cv.flip(frame, 1))#結果をwindowに鏡像表示する
if cv.waitKey(1) & 0xFF == 27:#ESCキーが押されたら終わる
break
capture.release() #カメラ終了
cv.destroyAllWindows() #ウィンドウ破棄
さきほどDLして保管した「haarcascade_frontalface_alt.xml」までのフルパスを指定します。
カスケード識別器を変更すれば他のものも検出できます。
実行結果
カメラの動画入力に対してリアルタイムに顔検出が行われ青色で矩形が表示されます。
参考
『Pythonで始めるOPENCV4プログラミング』北山直洋著