1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

カメラ画像から顔を検出して矩形で囲む15行

Last updated at Posted at 2022-10-01

メモ

やること

カメラ入力の動画の画像から顔を検出し、バウンディングボックス(検出領域を示す矩形)を表示させます。
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プログラミング』北山直洋著

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?