AI画像処理を使った人物特定
イントロダクション
本記事では、展示会(スマート物流EXPO 2023 名古屋)で展示物セミナー実施時に、カメラで社内ブースを撮影し、社内登壇者の顔検出,人物特定を行いました。顔の検出と人物特定は、セキュリティ向上、出席管理の効率化、参加者体験の向上など、さまざまな場面で重要な役割を果たします。
市販のUSBカメラを使用して動画を収集し、オープンソースソフトウェア「InsightFace」を活用して顔の検出と人物特定を行うプロセスについて説明します。 InsightFaceの詳細技術につきましては、参考文献をご参照ください。
カメラ撮影と顔検出技術
市販されているUSBカメラ(ロジクール ウェブカメラ C270)を使って社内ブースの動画撮影を行いました。
USBカメラとPCを接続し、撮影した動画を入力としてInsightFaceを用いて顔の検出を行いました。
人物特定を行うにはまず人の顔を検出する必要があります。 今回はInsightFaceの公開済み学習モデルを利用して人の顔検出を行いました。
InsightFaceはオープンソースソフトウェアであり、学習済みモデルを提供しています。ただし、これらの学習モデルの商用利用には制約があります。
詳細なライセンス情報や商用利用の許可については、InsightFaceの公式ウェブサイトやリポジトリをご確認ください。
人物特定プロセス
社内登壇者の顔画像と苗字ラベルを準備し、InsightFaceの公開済み学習モデルに追加学習を学習を行いました。
検出をした顔領域の特徴ベクトルと、追加学習をした顔画像の特徴ベクトルとの類似度を求めます。
閾値を設定し、閾値を超える最大の類似度を持つ画像の苗字ラベルを取得し、人物特定を行います。
今回は追加学習をした画像データの数が少なかったので、映像中の人物との類似度が低くなり、類似度の閾値を低くしています。
InsightFaceの利用方法
展示会で行ったInsightFaceを使った顔検出,人物特定に利用したシステム構成は下記になります。
項目 | バージョン |
---|---|
OS | Windows 10 Pro |
GPU | NVIDIA GeForce GT 1030 |
カメラ | ロジクール ウェブカメラ C270 |
InsightFace | 0.7.3 |
Python | 3.10.9 |
Cython | 0.29.35 |
ONNX Runtime GPU | 1.15.1 |
opencv-python | 4.8.0.74 |
numpy | 1.23.5 |
scikit-learn | 1.2.1 |
kivy | 2.2.1 |
InsightFaceのシステム要件は
- OS
- Python
- Cython
- ONNX Runtime
になります(参考3)。
GPUを利用せずにInsightFaceを動作させることもできますが、今回のように動画を使う場合は処理速度が遅くなり、 「カクカク」した動きになるためGPUを利用し、ONNX Runtime GPUを利用しました。
opencv-pythonはカメラからの映像取得、苗字ラベルの表示、および未登録人物だった場合に顔にモザイク処理をかけることに利用をしました。
numpyは
scilit-learnは公開済み学習モデルに追加学習、および類似度計算に利用しました。
kivyはGUI作成に利用をしました。
本システムを利用して社内ブースを撮影し、社内登壇者の顔検出,人物特定をした結果が下図になります。
画像中に未登録人物がいた場合は未登録人物にモザイクをかけます。
InsightFaceは正面顔から顔領域の特徴ベクトルを求めます。そのため、正面を向いていないと、正しく認識をしてくれません。(少しくらい横を向いている場合なら大丈夫ですが)
InsightFaceを利用すると、検出した顔と性別,年齢が表示されますが、特定した人物の苗字だけを表示させています。
InsightFaceは検出をした顔に関して下記情報を持ちます。
・年齢
・性別
・人種
・感情
これらの属性を持ちますがドンピシャで推定を行う事は難しいようです。 (性別はかなりの精度で当たるようですが・・・)
まとめ
顔の推定や個人の識別に利用される顔認証技術には、InsightFace以外にDeepFaceというオープンソースソフトウェアもあります。
DeepFaceは複数人の顔を同時検出する機能を持っていないため、InsightFaceを利用しました。
開発コストを考慮すると、既存のAIモデルを適用することが最善と考えております。
今後、既存のAIモデルを利用してサービスを展開できるノウハウを蓄積していきたいと考えております。
参考
No. | 内容 | URL |
---|---|---|
1 | InsightFace GitHub | https://github.com/deepinsight/insightface |
2 | InsightFaceで顔認証(特徴量抽出、比較)してみた | https://zenn.dev/yuyakato/articles/d35b185d36a33b |
3 | OpenCVを超えたInsightFaceによる顔認識 | https://self-development.info/%e3%80%90python%e3%80%91opencv%e3%82%92%e8%b6%85%e3%81%88%e3%81%9finsightface%e3%81%ab%e3%82%88%e3%82%8b%e9%a1%94%e8%aa%8d%e8%ad%98/ |
4 | Tutorial: Deploy Face Recognition Model via TVM | https://github.com/deepinsight/insightface/wiki/Tutorial:-Deploy-Face-Recognition-Model-via-TVM |
5 | add buffalo_l model | https://github.com/deepinsight/insightface/releases |
6 | DeepFace | https://pypi.org/project/deepface/ |
7 | DeepFace GitHub | https://github.com/serengil/deepface |
8 | Deepface(顔認証・表情推定・年齢推定)を触ってみた | https://qiita.com/ysenkun/items/b8b8704e6b7ae6625680 |