こんにちは。Kです。
Raspberry Pi 4B編ということで回を分けて細かく解説してきたわけですが、
顔認識だけでも機能や簡単な原理を説明するとまだ2〜3本作れることに気づきました。
なのでもう少しお付き合いください。
顔認識と一言でお話ししていましたが、実際には下記の2点の機能に分かれています。
- ① 顔の特徴点解析(Haar-Like分類機)+顔方向へ首振り
- ② DNNを使った年齢と性別判別機能
この回では①について説明していきます。
画像解析に使用するライブラリはOpenCVのver3系列を使います。
物体の特徴点を分類するアルゴリズムの一つとして、Haar-Like分類機のアルゴリズムを使用します。
顔の標準的な特徴データはOpenCVに内包してあるので、こちらを使います。
おまけとして目の特徴データもあるのでこちらも読み込ませます。
face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_default.xml' )
eye_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_eye.xml')
下記はカメラ画像に対する解析処理です。
特徴点分類にはグレースケール画像で処理する必要があるため、カメラ画像は必ずグレースケール画像に置き換えます。前段の顔認識オブジェクトからdetectMultiScale関数使うことで顔の特徴と分類された矩形データを返します。
顔の特徴と捉えた矩形を全て返すため、複数返される場合があります。
# グレースケールに変換
gray = cv2.cvtColor(frame_for_analyze, cv2.COLOR_BGR2GRAY)
# 顔認識
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
顔認識した矩形情報から目の検出を行うため、顔部分から画像データを抽出してそこから目を検出します。
また、顔部分の画像データは年齢/性別判断に使用するため、画像データリストとしてメモリに保持しておきます。
上記処理の終わりにカメラの首振りの位置を算出します。本来であれば顔の推定距離から正確な角度を割り出したいところですが、処理を簡易化しています。
for (x,y,w,h) in faces:
# Eye Detect
if spp.eyedetect == 1:
roi_gray = gray[y:y + h, x:x + w]
eyes_ = eye_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes_:
eyes.append(pygame.Rect(x + ex, y + ey, ew, eh))
# Age/Gender Detect
if spp.agegenderdetect == 1:
if analyzing_agegender == False:
face_images.append(frame_for_analyze[y:y + h, x:x + w])
# 顔認識位置からパンチルト移動量を算出
rectcenterx = x + w / 2
rectcentery = y + h / 2
res_x = analyze_width / 2 - rectcenterx
res_y = -(analyze_height / 2 - rectcentery)
if rectcenterx != analyze_width / 2:
mov_x += res_x / 30
if rectcentery != analyze_height / 2:
mov_y += res_y / 40
これで顔検出とカメラの移動については完成です。
次回は性別/年齢推定部分の解説です。ではまた!
関連記事
-
第1回 Visual C++で作成したDLL内のクラスをC#で利用する方法
こんにちは、ILCです。 Visual C++ (以下 VC++)で作成されたDynamic...
公開日:2024.01.19 更新日:2024.01.19
tag : Windows
-
-
-
第1回 ラズパイを使用したBLE通信 ~ ディスプレイ、キーボード、マウスを接続しないで設定 前編 ~
こんにちは、GTです。よろしくお願いします。 最近業務でラズパイのBluetooth機能を使...
公開日:2021.12.24 更新日:2021.12.24
tag : Bluetooth Raspberry Pi
-
【新機能探訪】Android 13から導入された『アプリごとの言語設定』
こんにちは、KNSKです。よろしくお願いします。 今回は Android13の新機能である『...
公開日:2022.12.09 更新日:2022.12.09
tag : スマートデバイス
-
こんにちは。WwWです。 システム系の開発をしていると様々な問題が起こります。 そこで今回は...
公開日:2023.04.28 更新日:2023.04.28