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

はじめに

前回、第2回目として「Web会議画面の構成」について概要を説明しました。

第3回目は「Web会議画面の構成」の続きとして、参加者の名前、所属などを表示するという部分(reidentification)になります。

処理概要

以下の流れで参加者の名前、所属を表示しています。

  1. 事前に参加者の情報(顔画像、名前、所属)を読み込んでDBを作成する
  2. person detect. / face detect で切り出した領域の画像をDBで確認
  3. 近しい人と判断した場合にDB内の情報を取得
  4. person detect. / face detect で切り出した領域の画像に情報(名前、所属)を記載
  5. 画面を構成する

Web会議画面の構成

実際のソースは以下にありますので、合わせてご確認ください。前回記事のソースに加えて、reidentification.pyが追加になっています。

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

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

使用モデル

  • 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

meeting_demo.py

main()

オレンジ色の部分が前回記事からの追加分です。f_reid.preloadimage()で個人認識用に用意した画像を読み込み、DBを作成しています。

callback()

fnc_Reid()の処理で、検出した参加者の領域に対してreidentificationを実行します。DB内に近しい顔が読み込まれていた場合、同一人物と判定し、名前、所属を表示します。

reidentification.py

preloadimage()

参加者のデータは、meeting_member.ymlに以下のように定義しています。

member:
#
  -
    EmployeeID: "12345"
    FirstName:
    LastName: Sato
    Section: Sales Div.1
    Position: 2
#
  -
    EmployeeID: "23456"
    FirstName:
    LastName: Suzuki
    Section: Research
    Position: 1
#
  -
    EmployeeID: "34567"
    FirstName:
    LastName: Takahashi
    Section: Develop
    Position: 3
#
  -
    EmployeeID: "45678"
    FirstName:
    LastName: Tanaka
    Section: Sales Div.2
    Position: 0

#  -
#    EmployeeID: "abcde"
#    FirstName: test
#    LastName: test
#    Section: test div

meeting_memberに対応した顔データとして、\rsc\face配下に画像データを格納します。preloadimage()で顔データを読み出し、DBに格納します。なお、フォルダ配下のファイルは列挙するため、ファイル名は問いません。

顔データ画像を採取するオプションはプログラムに付けていませんが、以下の方法で増やす事ができます。

  1. meeting_demo.py – def main()内の、f_reid.PreloadImage() ## preload files for build db をコメントアウトする。
  2. reidentification.py – def fncReid()内の、 #cv2.imwrite(face_dir + str(feature_db[-1][‘time’]) + ‘.jpg’, feature_db[-1][‘img’]) のコメントを外す
  3. meeting_demo.py実行すると、rsc/face配下に顔データが保存されるので、手作業で該当するフォルダに配置する

tile_resize.py

前回記事と同様に、Person detection、または、Face detectionで検出した人物の領域を切り出して、会議用の画面を構成します。画面構成前に、既に名前と所属が記載された画像になっているので、あとは画面を構成するだけです。

まとめ

第3回目は「Web会議画面の構成」の続きとして、参加者の名前、所属などを表示するという部分(reidentification)を説明しました。

次回はミーティング中の話者を特定し大写しにする機能の予定です。