Python + OpenCVで顔検出(1)〜リアルタイムカメラから検出〜
qiita.com 上の記事を参考にOpenCVで顔検出したときのメモ
仮想環境の準備
opencvEnvの環境をvenvで作成
$ python3 -m venv opencvEnv # activate しておく $ source opencvEnv/bin/activate (opencvEnv)$ ...
openCVのインストール
pipでopenCVをイントール
(opencvEnv)$ pip install opencv-python Collecting opencv-python Downloading https://files.pythonhosted.org/packages/e2/a9/cd3912ca0576ea6588095dce55e54c5f0efeb3d63fb88f16f4c06c0fac8d/opencv_python-4.1.2.30-cp36-cp36m-macosx_10_9_x86_64.whl (45.2MB) 100% |████████████████████████████████| 45.2MB 721kB/s Collecting numpy>=1.11.3 (from opencv-python) Using cached https://files.pythonhosted.org/packages/22/99/36e3408ae2cb8b72260de4e538196d17736d7fb82a1086cb2c21ee156ddc/numpy-1.17.4-cp36-cp36m-macosx_10_9_x86_64.whl Installing collected packages: numpy, opencv-python Successfully installed numpy-1.17.4 opencv-python-4.1.2.30 import cv2
顔検出のプログラム準備
face_ detect.pyを作成する
【face_ detect.py】
import cv2 if __name__ == '__main__': # 定数定義 ESC_KEY = 27 # Escキー INTERVAL= 33 # 待ち時間 FRAME_RATE = 30 # fps ORG_WINDOW_NAME = "org" GAUSSIAN_WINDOW_NAME = "gaussian" DEVICE_ID = 0 # 分類器の指定 cascade_file = "../xml/haarcascade_frontalface_alt2.xml" cascade = cv2.CascadeClassifier(cascade_file) # カメラ映像取得 cap = cv2.VideoCapture(DEVICE_ID) # 初期フレームの読込 end_flag, c_frame = cap.read() height, width, channels = c_frame.shape # ウィンドウの準備 cv2.namedWindow(ORG_WINDOW_NAME) cv2.namedWindow(GAUSSIAN_WINDOW_NAME) # 変換処理ループ while end_flag == True: # 画像の取得と顔の検出 img = c_frame img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) face_list = cascade.detectMultiScale(img_gray, minSize=(100, 100)) # 検出した顔に印を付ける for (x, y, w, h) in face_list: color = (0, 0, 225) pen_w = 3 cv2.rectangle(img_gray, (x, y), (x+w, y+h), color, thickness = pen_w) # フレーム表示 cv2.imshow(ORG_WINDOW_NAME, c_frame) cv2.imshow(GAUSSIAN_WINDOW_NAME, img_gray) # Escキーで終了 key = cv2.waitKey(INTERVAL) if key == ESC_KEY: break # 次のフレーム読み込み end_flag, c_frame = cap.read() # 終了処理 cv2.destroyAllWindows() cap.release()
分類器のファイルを取得
顔検出に使用するhaarcascade_frontalface_alt2.xml
を以下のサイトから取得し、任意の場所にファイルをダウンロードする。
ja.osdn.net
実行
face_ detect.pyを実行する。ターミナルからカメラのアクセス許可を求めらるので許可する。
(opencvEnv)$ python face_ detect.py
カメラで取得できる映像から顔検出することができる。カメラは[Esc]で強制終了できる。