作成の経緯
高校の授業でC#を使って顔認識プログラムを作成した経験があり、同じ機能をPythonで実現してみようと思いました。
C#のプログラムではHaarcascadesを使用したので、Pythonでも同じ手法を採用しました。
準備するもの
- Python環境(バージョン3.x)
-
カスケード分類器のダウンロード
-
Haarcascade Frontal Face XMLファイルをダウンロードします(
haarcascade_frontalface_default.xml
)。 - ダウンロードしたファイルをPythonスクリプトと同じディレクトリに配置します。
-
Haarcascade Frontal Face XMLファイルをダウンロードします(
-
OpenCVのインストール
pip install opencv-python
コード
import cv2
# カメラのキャプチャを開始
capture = cv2.VideoCapture(0)
# カスケード分類器のパスを指定
cascade_path = "./haarcascade_frontalface_default.xml"
cascade = cv2.CascadeClassifier(cascade_path)
while True:
# フレームを読み取る
ret, frame = capture.read()
# グレースケールに変換
image_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 顔を検出
facerect = cascade.detectMultiScale(image_gray)
print('\n', facerect, end='')
# 顔が検出された場合、四角形で囲む
if len(facerect) > 0:
for rect in facerect:
xy1 = tuple(rect[0:2])
xy2 = tuple(rect[0:2] + rect[2:4])
color = (255, 0, 0)
width = 2
cv2.rectangle(frame, xy1, xy2, color, width)
# フレームを表示
cv2.imshow('face camera', frame)
# 'q'キーが押されたら終了
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# キャプチャを解放し、ウィンドウを閉じる
capture.release()
cv2.destroyAllWindows()
終了方法: q
キーを押してプログラムを停止します。
あとがき
このプログラムを作成したのはかなり前のことで、各部分のコードの引用元を特定することができませんでした。
引用元の方々にはこの場を借りてお詫び申し上げます。