LoginSignup
4
7

More than 1 year has passed since last update.

サクッとPython + OpenCVで顔検出した時のメモ

Last updated at Posted at 2020-10-25

#目次
1.仮想環境の準備
2.openCVのインストール
3.顔検出のプログラム準備
4.分類器のファイルを取得
5.実行
6.ソースコード

仮想環境の準備

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を以下のサイトから取得し、任意の場所にファイルをダウンロードする。

実行

face_ detect.pyを実行する。ターミナルからカメラのアクセス許可を求めらるので許可する。

(opencvEnv)$ python face_ detect.py

カメラで取得できる映像から顔検出することができる。カメラは[Esc]で強制終了できる。

ソースコード

今回のソースコードは以下のリポジトリのface_detect.pyから転載。

参考記事

Webカメラを使ってリアルタイムに顔検出してみる

個人ブログもやっています。長野エンジニアライフ

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7