ブログのアイコン画像、覚えてますか?実はPythonを使って簡単に顔検出ができるんです!今回は、OpenCVライブラリを使ってリアルタイムで顔を認識するプログラムを紹介します。実際に私のアイコン画像で試した結果も載せているので、ぜひ参考にしてみてください!
顔検出って聞くと難しそうに感じるかもしれませんが、実は身近なところで使われているんですよ。例えば、スマートフォンの顔認証や、カメラアプリの顔認識フォーカスなど。セキュリティシステムや写真管理アプリにも活用されています。
OpenCV(Open Source Computer Vision Library)は、画像処理やコンピュータビジョンに特化したオープンソースライブラリです。高機能なのに使いやすく、リアルタイム処理も得意なので、今回のような顔検出プログラムにぴったりです。
早速ですが、今回使うプログラムを紹介します。少し長いですが、一つずつ解説していくので安心してくださいね。
import cv2
import time
def main():
# 事前学習済み カスケード分類器の XML ファイルを読み込み(今回は、Opencvで標準のデータを使用)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture( 0 )
while(True):
ret, frame = cap.read()
if ret == True:
# 顔を検出
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # グレースケールに変換(色情報を落とす)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 検出した顔に矩形を描画
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
# フレームを表示
cv2.imshow('Camera Feed', frame)
# 'q'キーが押されたらループを終了
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
プログラムの中でcv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)という部分、これは画像をグレースケールに変換する処理です。なぜこんなことをする必要があるのでしょうか?
face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))の部分では、カスケード分類器を使って顔検出を行っています。
haarcascade_frontalface_default.xml以外にも、opencvでは色々なカスケード分類器のデータセットがが用意されているんです。
ファイル名 | 検出対象 |
haarcascade_frontalface_alt.xml | 正面の顔(代替版) |
haarcascade_frontalface_alt2.xml | 正面の顔(代替版2) |
haarcascade_frontalface_alt_tree.xml | 正面の顔(代替ツリー版) |
haarcascade_profileface.xml | 横顔 |
haarcascade_eye.xml | 目 |
haarcascade_eye_tree_eyeglasses.xml | 眼鏡をかけた目 |
haarcascade_nose.xml | 鼻 |
haarcascade_smile.xml | 笑顔 |
haarcascade_fullbody.xml | 全身 |
haarcascade_upperbody.xml | 上半身 |
haarcascade_lowerbody.xml | 下半身 |
PythonとOpenCVを使えば、意外と簡単に顔検出プログラムが作れるんです!パラメータを調整することで、精度と速度のバランスも取れるので、色々試してみてください。
OpenCVのこの方法での顔検出は、非常に軽い処理でできているので、RaspberryPiなんかでも動作すると思いますので、試してみても面白いと思います。
RaspberryPiの立ち上げ方に関する記事はこちら
GUI付きでカメラ映像を表示して、録画と静止画保存ができるプログラムをこちらで紹介していますので、組み合わせると顔を認識すると録画開始!なんてことができて面白いかもしれないですね。
この記事が、あなたの役に立てば幸いです!
Pythonの学習には、こちらを参考にしてみてください