Python を使った顔認識ソフトウェアです。OpenCV と tkinter を使っています。
簡単に顔認識をPythonで行うことができます。
環境:
・ Windows パソコン、USB カメラ
・ Anaconda、Python 3、OpenCV をインストールしています。
使い方
① PC に USB カメラを接続しておきます。
② 任意のフォルダを作成し、中に face_recognition1.py 等のファイル名でテキストファイルを作ってください。
③ 下記のサンプルスクリプトを貼りつけて保存してください。
④ path1 のパスを参考に、使用している環境で、OpenCV の “haarcascade_frontalface_default.xml” があるフォルダ(★)を探してください。
見つけたら、★のフォルダのパスに対応するよう path1 の文字列を修正して保存してください。
⑤ Python スクリプトを実行してください。
→ アプリが動作したら、成功です!
カメラのライブ画像が表示されない場合は、または、カメラが複数接続されている場合は、# camera number としている行の番号 1 を 0, 2, 3 などに変更してみて、使用するカメラ番号を設定して下さい。
まとめ
Python を使って、人の顔の検出もできるようになりました。
なお、動作確認をしている USB カメラなどについて、以下の関連リンクにまとめています。関心のある方は、参照してみてください。
関連リンク
・ 【Python】 動作確認済み USB カメラ 【おすすめ】
・ 接続中のカメラ番号を抽出する 【OpenCV & Python】
・ 【Python】 バーコードリーダ 【QRコード読み取り対応!】
サンプルスクリプト face_recognition1.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
import cv2
import tkinter as tk1
from PIL import Image, ImageTk
def stop1():
global stp1
if stp1 == 0:
stp1 = 1
button1["text"] = "start"
else:
stp1 = 0
button1["text"] = "stop"
def live_view1():
global frame1
global canvas1
global img1
global stp1
global cascade1
if stp1 == 0:
result0, img0 = cap1.read()
if result0:
img1 = cv2.cvtColor( img0, cv2.COLOR_BGR2RGB )
gray1 = cv2.cvtColor(img0, cv2.COLOR_RGB2GRAY )
faces1 = cascade1.detectMultiScale( gray1 )
for x1, y1, w1, h1 in faces1:
cv2.rectangle( img1, (x1, y1), (x1+w1, y1+h1), (0,255,0), 1)
img1 = ImageTk.PhotoImage( image= Image.fromarray( img1 ) )
canvas1.create_image( 0, 0, anchor=tk1.NW, image=img1 )
frame1.after( 500, live_view1 )
frame1 = tk1.Tk()
frame1.title(u"face_recognition v0.1")
frame1.geometry("680x550")
button1 = tk1.Button( frame1, text='stop', command=stop1 )
button1.place(x=560, y=10, width=100)
cap1 = cv2.VideoCapture( 1, cv2.CAP_DSHOW ) # camera number
canvas1 = tk1.Canvas( frame1, width=cap1.get( cv2.CAP_PROP_FRAME_WIDTH ), height=cap1.get( cv2.CAP_PROP_FRAME_HEIGHT ), bg='white' )
canvas1.place(x=20, y=50)
path1 = "C:\\Users\\…\\Anaconda3\\pkgs\\libopencv-4.5.0-py37_3\\Library\\etc\\haarcascades\\"
file1 = path1 + "haarcascade_frontalface_default.xml"
cascade1 = cv2.CascadeClassifier( file1 )
img1 = 0
stp1 = 0
live_view1()
frame1.mainloop()
cap1.release()
cv2.destroyAllWindows()