はじめに
前回、第2回目として「Web会議画面の構成」について概要を説明しました。
第3回目は「Web会議画面の構成」の続きとして、参加者の名前、所属などを表示するという部分(reidentification)になります。
処理概要
以下の流れで参加者の名前、所属を表示しています。
- 事前に参加者の情報(顔画像、名前、所属)を読み込んでDBを作成する
- person detect. / face detect で切り出した領域の画像をDBで確認
- 近しい人と判断した場合にDB内の情報を取得
- person detect. / face detect で切り出した領域の画像に情報(名前、所属)を記載
- 画面を構成する
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に格納します。なお、フォルダ配下のファイルは列挙するため、ファイル名は問いません。
顔データ画像を採取するオプションはプログラムに付けていませんが、以下の方法で増やす事ができます。
- meeting_demo.py – def main()内の、f_reid.PreloadImage() ## preload files for build db をコメントアウトする。
- reidentification.py – def fncReid()内の、 #cv2.imwrite(face_dir + str(feature_db[-1][‘time’]) + ‘.jpg’, feature_db[-1][‘img’]) のコメントを外す
- meeting_demo.py実行すると、rsc/face配下に顔データが保存されるので、手作業で該当するフォルダに配置する
tile_resize.py
前回記事と同様に、Person detection、または、Face detectionで検出した人物の領域を切り出して、会議用の画面を構成します。画面構成前に、既に名前と所属が記載された画像になっているので、あとは画面を構成するだけです。
まとめ
第3回目は「Web会議画面の構成」の続きとして、参加者の名前、所属などを表示するという部分(reidentification)を説明しました。
次回はミーティング中の話者を特定し大写しにする機能の予定です。
フリーのITエンジニア(何でも屋さん)。趣味は渓流釣り、サッカー観戦、インラインホッケー、アイスホッケー、RaspberryPiを使った工作など。AI活用に興味があり試行錯誤中です。