Python初心者でも簡単にできるリアルタイム顔認識

公開:2021年05月16日

Pythonは初心者でも覚えやすく、触ってみると色々と便利な機能がたくさんあります。今回はカメラを人に向けると自動でリアルタイムに顔認識して枠がつくプログラムをご紹介します。

初心者でも簡単に覚えられますので、これを機にPythonの勉強をしてみてはどうでしょうか。

リアルタイム顔認識を始める前にまずは準備から

まずはPythonのインストールからなのですが、「Let’sプログラミング」さんがPythonのインストールを詳しく説明をしてくれていますので、Pythonのインストールがまだという方は目を通してみて下さい。

もしも、ここまでの話がまったくわからないという生粋の初心者であれば、「ゼロから始めるPython入門講座(オンライン・無料)+【テックジム】」に参加するのもいいかもしれません。最初は指導のプロにアドバイスを受けながら、しっかり教えてもらった方が時間を無駄にしなくてすみますよ。

すでにPythonのインストールはすんでいるということで話を進めさせていただくと、今回の顔認識のプログラムを動かすためには「OpenCV」というモジュールが必要です。画像関係がかなり快適になりますので、もしもまだインストールされていないという事であれば、$ pip install opencv-contrib-pythonとコンソールで入力して、インストールしておきましょう。

今回は「OpenCV」だけ入っていれば、問題ありません。それではさっそく顔認識プログラムを見ていきましょう。

静止画から顔を認識するプログラム

まずは静止画を選んで、その中にある顔認識をするプログラムを紹介します。顔を認識できれば、それをフラグに新しい動作なども作れるようになるので、プログラムの幅が大きく広がりますよ。

import cv2

#顔認識プログラムの呼びだし
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xmlのパス')

#画像ファイルの読み込み
img = cv2.imread('画像ファイルのパス')

#グレースケール変換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#顔認識の実行
faces = face_cascade.detectMultiScale(gray)

#顔枠の色を決める
face_waku = (0,0,255)

#認識した部分に枠と色をつける
for (x,y,w,h) in faces:
    # 検知した顔を矩形で囲む
    cv2.rectangle(img,(x,y),(x+w,y+h),face_waku,2)

#画像表示
cv2.imshow('image', img)

# 何かキーを押したら終了
cv2.waitKey(0)
cv2.destroyAllWindows()

プログラムはたったこれだけです。右上のボタンを押せばコピーできます。不必要なモノはありませんので、こういうモノだと思って覚えてしまいましょう。

webカメラの映像から顔認識

webカメラの映像を顔認識させるなんて、初心者じゃ絶対に無理だと考えてしまいますよね。わかります。私もプログラムを見るまではそう思っていました。でも、開いてみたら画像からの認識とあまり変わりません。

変わるところと言えば、webカメラを指定する「cap = cv2.VideoCapture(0)」と、webカメラの映像を呼び出す「ret, img = cap.read()」くらいですね。プログラムはこうなっています。

import cv2

cap = cv2.VideoCapture(0)

#顔認識プログラムの呼びだし
face_cascade = cv2.CascadeClassifier('./img/dast/haarcascade_frontalface_alt.xml')

while True:

	#画像の取り出し
	ret, img = cap.read()

	#鏡表示
	img = cv2.flip(img,1)

	#画像を白黒にする
	gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

	#顔枠の色を決める
	face_waku = (0,0,255)

	#顔認識の実行
	faces = face_cascade.detectMultiScale(gray, 1.1, 5)

	#認識した部分に枠と色をつける
	for (x,y,w,h) in faces:
		cv2.rectangle(img,(x,y),(x+w,y+h),face_waku,2)

	#画像の表示
	cv2.imshow('webcamera',img)

	#ループ状態をエスケープ
	k = cv2.waitKey(1)
	if k == 27:
		break

#ウィンドウをすべて閉じる
cap.release()
cv2.destroyAllWindows()

画像からの顔認識と大差はありません。注意点としてはループを使っていますので、ボタンを押しても再びウインドウが立ち上がってしまいます。「ESC」キーを押してストップさせてください。

まとめ

こんな簡単に顔認識ができるなんてと驚かれた人も多いでしょう。今回紹介したプログラムをコピーして貼り付けるだけで、すぐにリアルタイムの顔認識が組み込めます。

アプリでもよく使われている機能ですので、確実に覚えておきましょう。汎用性は高いですよ。プログラミングについてもっと詳しく学びたいときは、以下のスクールがおすすめです。

ゼロから始めるPython入門講座(オンライン・無料)+【テックジム】

zoomを使ったプログラミング教室で、自宅や職場で気軽にPythonが学べます。カウンセリングも受けられますので、興味がある人は一度覗いてみるといいかも。自分でプログラムを組めるようになれば、アプリを作ってみたり、エンジニアを目指せたりとキャリアも広がっていきますよ。

弊社では無料相談も行っています。ホームページやPHP、Pythonのことなど不明なことがあれば、いつでも無料メール相談からご連絡下さい!

  • きちんと結果を出せるホームページにしたい
  • 今のホームページを新しく作り替えたい
  • ホームページをもっと効果的に運用したい
  • ホームページの定期的アドバイザーが欲しい

こんなお悩みをお持ちではありませんか?

弊社はホームページの悩みをすべて解決します!

ご相談は下記からお気軽にご連絡ください!