Zoom用Face Trackingカメラ! – 検証編 –

9月 25, 2020

複数記事に分けて解説しています.

Zoom用顔追従カメラ! – 機能とセットアップ編 –
Zoom用顔追従カメラ! – 作成編 –
Zoom用顔追従カメラ! – 検証編 –

顔追従のコンセプト

今回の顔追従はWEBカメラのフレームの中心座標(320, 240)と顔認識で得られた顔の座標(x, y)から得られた偏差ベクトル(320 – x, 240 – y)を用いてPID制御をし, サーボモータの回転量を決めています.
また, 顔認識を行っているface_recognitionというライブラリはDeep Metrics LearningというDeep learningの一種の手法を用いています. 詳しくは過去記事をご覧ください.

顔追従性能

今回の顔追従の性能に関して顔認識速度とサーボモータのステップ応答を調べました.

顔認識速度

入力されるカメラ映像のFPSを制御して, それの顔認識のFPSへの影響を調べました. 以下よりソースを取得してFPS計測用のソフトウェアを実行してください.

# FPS計測用のソースを取得
git clone https://github.com/tech-life-hacking/FaceTrackingForZoom.git
cd FaceTrackingForZoom

# FPS計測用のソフトウェアを実行
python CameraInputFPS.py

上図はCameraInputFPS.pyの実行結果で, 横軸がカメラ映像のFPS, 縦軸が実測した顔認識のFPSです. WEBカメラの仕様により, FPSの限界が30FPSだったので10から30の間で値をサンプリングしています. 入力されるカメラの映像をもとに画像認識するわけなので, 顔認識のFPSはカメラの映像のFPSによって決まっています. しかし, カメラ映像のFPSが25以降は顔認識のFPSが変わっていません. 顔認識部分をコメントアウトして, カメラ映像の取り込みだけにしてもFPSは25に留まるので, カメラ映像のFPSが設定値通りになっていないみたいです. 結果, 顔認識速度としては25FPS程度とわかりました.

ステップ応答

サーボモータの追従性能としてx軸方向とy軸方向のステップ応答を計測しました. 入力として, 顔の中心のx軸座標が0(x = 0), y軸座標が0(y = 0)となるようにし, 偏差が(320, 240)となるようにしました. これはカメラフレームの端に顔が位置したときに相当します. ステップ応答計測用のソフトウェアとしては以下を実行してください.

# ステップ応答計測用のソースを取得
git clone https://github.com/tech-life-hacking/FaceTrackingForZoom.git
cd FaceTrackingForZoom

# ステップ応答計測用のソフトウェアを実行
python TestStepResponse.py

上図はTestStepResponse.pyの実行結果です. 顔の中心座標が目標であるカメラフレームの中心座標に0.5秒以内に達していることがわかります. 姿勢を崩して顔がカメラフレームの端にずれても0.5秒以内に追従してくれそうです.

おわり

いかがだったでしょうか、皆さんの実装の一助になれば幸いです.