産業用UVCカメラのすすめ 産業用UVCカメラのすすめ

※画面を横にするとパソコン版のレイアウトでご覧いただけます。正しく表示されていない場合は横向きでご覧ください。

【OpenCV】cascade.detectMultiScale関数で顔認証

顔検出のアルゴリズムを使ったプログラムについて

OpenCVに含まれる物体・顔検出機能を使用すると、画像の中に含まれる特定の顔を検出することが可能になります。人間の顔検出を行うためにどんな特徴を持っているのか、人間の顔を含む学習用画像と含まない学習用画像を用意し、検出したい顔の特徴点を抽出します。これらの学習用画像のすべての特徴点をまとめたデータのことを「カスケード分類器」と呼びます。ここでは産業用カメラを使って、カスケード分類器を用いた顔認識の画像処理のプログラムについて解説します。
OpenCVのオープンソースのライブラリのみを用いたPythonのサンプルです。

検証のための準備

1.サンプルプログラムをダウンロード

2.顔検出のためのカスケード型識別器ファイルをダウンロード

OpenCVでは、顔・目などを検出できるカスケード識別器の学習済みファイルが下記のGithub上にxmlファイルが用意されています。

今回は顔検出のために「haarcascade_frontalface_default.xml」を使います。
1.と同じフォルダ内に「haarcascade_frontalface_default.xml」を投函してください。
https://github.com/opencv/opencv/tree/master/data/haarcascades

実行結果


※便宜上顔にはモザイク処理を行っております。

プログラム解説

OpenCVモジュールをインポートします。

import cv2

準備②でダウンロードしたファイルの場所を指定し読み込みます。

# カスケード型識別器の読み込み 
cascade_path="./haarcascade_frontalface_alt.xml"
#カスケード識別器のファイルパス
cascade=cv2.CascadeClassifier(cascade_path) 

他にも以下のようなデータが存在します。

haarcascade_smile.xml 笑顔検出
haarcascade_eye.xml 目検出
haarcascade_frontalface_default.xml 顔検出

OpenCVライブラリを使ってVideoCapture オブジェクトを取得します。

capture = cv2.VideoCapture(1)

下記のループにてOpenCVでカメラ映像を取得する手順は、リアルタイム静止画像の読み込みと表示をずっと繰り返すという処理の流れになります。

try:
    while(True):
        # フレームの読み取り
        ret,frame=capture.read()

カラースケールのみでも十分顔検出が可能ですが、グレースケールを使用することで高速に顔検出できるのでグレー化します。

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

読み込ませたxmlファイルにグレースケールのデータをセットし顔検出を行っています。検出に成功した場合は画像のサイズが出力されます。

        # 顔の学習データ精査
        front_face_list=cascade.detectMultiScale(gray,minSize=(50,50))
        print(front_face_list)

顔認識しない場合は確認できるようにコマンドラインに"Failed"と出力します。

        # 認識しない場合はコマンドラインに"Failed"と出力
        if len(front_face_list) ==0:
            print("Failed")
            cv2.waitKey(100)
            continue

検出した顔の座標で顔枠を白で囲っています。

        #顔を四角で囲みWindowに表示する
        for (x,y,w,h) in front_face_list:
            cv2.rectangle(gray,(x,y),(x+w,y+h),(255,0,255),thickness=5)
            cv2.imshow("frame_orig",gray)
            cv2.waitKey(100)


産業用カメラの機種選定

産業用UVCカメラ
産業用カメラの基礎
産業用カメラのスペックの見方

カメラ制御用プログラム開発

開発のフレームワーク
オープンソース(Python)
オープンソース(C++)
ICImagingControl(Python)
tiscamera(Python)
NVIDIA Jetson(Python)
サードパーティ

リンク集