Xacti社の360°Web会議カメラにAI機能を実装する#2

はじめに

前回、第1回目として、Xacti社のWebカメラ紹介と、全体の概要を説明しました。

今回から各機能の概要について説明します。第2回目は「Web会議画面の構成」の機能となります。

Web会議画面の構成の概要(おさらい)

「Web会議画面の構成」って何だ?という事で、まずは前回のおさらいです。

Xacti社Webカメラの上下パノラマモードで撮影するとこのような動画が撮影できます。

ここからOpenVINOで人や顔を認識し、認識した領域を切り出す事で、Web会議画面を構成します。

Web会議画面その1です。上部に参加者を、下部に全体の様子を表示しています。

参加者それぞれを認識し、名前、所属などを表示します。

Web会議画面その2です。4人の参加者を切り出しています。

参加者それぞれを認識し、名前、所属などを表示します。

使用モデル

今回はPerson detection, Face detection の内容について説明します。Person reidentificationは次回を予定しています。

  • Person Detection(今回)
    • intel/pedestrian-detection-adas-0002/FP16/pedestrian-detection-adas-0002
  • Face Detection(今回)
    • intel/face-detection-adas-0001/FP16/face-detection-adas-0001
  • Person reidentification(次回)
    • intel/person-reidentification-retail-0288/FP16/person-reidentification-retail-0288

参考にさせて頂いたプログラム

Web会議画面の構成については、openvino-wrapperの「iewrap_object_detection_async.py」をベースに作成しましたので、まずはそちらを確認してみましょう。

https://github.com/yas-sim/openvino-wrapper

なお、処理の流れを示すためにPAD(Problem Analysis Diagram)図を利用しました。全てのステップを図示するのは大変なので主な部分のみ記載しています。

色付きの部分がポイントとなる部分です。

main()

Webカメラ、動画で撮影した内容を1コマずつ取り出し、OpenVINOで推論を行うという動作になります。モデルはmobilenet-ssdです。

main処理

callback()

推論が実行されるとcallbackが呼び出されます。何か検出した場合(ここでは60%以上の閾値)、検出した領域に対して四角とラベルを描画しています。

callback()

ここまでのまとめ

  1. 動画やWebカメラから1枚取り出す
  2. OpenVINOで推論
  3. 検出したものに枠をつける

Web会議画面の構成を確認してみましょう

openvino-wrapperの「iewrap_object_detection_async.py」をベースに、Person detectionとFace detectionを行い、検出した領域を切り出して結合する事で、Web会議画面を実現します。

実際のソースは以下にありますので、合わせてご確認ください。

https://github.com/OpenVINO-jp/360camera-meeting-demo/blob/main/meeting_demo.py

https://github.com/OpenVINO-jp/360camera-meeting-demo/blob/main/tile_resize.py

meeting_demo.py

main()

モデルをPerson detectionに変更した以外は、ほぼ同じ流れとなります。

main()

callback()

callback()

tile_resize.py

Person detection、または、Face detectionで検出した人物の領域を切り出して、会議用の画面を構成します。cv2.hconcatやcv2.vconcatでサイズが異なる画像を結合するとエラーになりますので注意が必要です。

まとめ

第2回目として「Web会議画面の構成」について概要を説明しました。まずは、openvino-wrapperの「iewrap_object_detection_async.py」を試すことが早道だと思います。ぜひご確認ください。

次回はPerson reidentificationを利用して、画面に映っている人を認識し、名前や所属を表示する機能を説明したいと思います。