顔認識 Python* デモ¶
この例では、ビデオ処理用の対話型アプリケーションを作成するアプローチを示します。これは、Python の OpenVINO ライブラリーを使用した、さまざまなデバイスへのモデルの配置と同時並列または逐次実行をサポートするモデル・パイプラインを構築する基本アーキテクチャーを示しています。特に、このデモでは 3 つのモデルを使用して、ビデオ上の顔とそのキーポイント (別名 “ランドマーク”) を検出し、提供された顔データベース (ギャラリー) を使用して人物を認識できるパイプラインを構築します。次の事前トレーニング済みモデルを使用できます。
face-detection-retail-0004
とface-detection-adas-0001
は顔を検出し、その境界ボックスを予測します;landmarks-regression-retail-0009
、顔のキーポイントを予測します;face-reidentification-retail-0095
、facenet-20180408-102900
またはface-recognition-resnet100-arcface-onnx
を使用して人物を認識します。
動作の仕組み¶
アプリケーションはコマンドラインから起動します。カメラデバイスでもビデオファイルでも、指定された入力ビデオストリームをフレームごとに読み取り、各フレームの独立した分析を実行します。予測を行うため、アプリケーションは OpenVINO ライブラリーを使用して指定されたデバイスに 3 つのモデルをデプロイし、非同期で実行します。入力フレームは顔検出モデルによって処理され、顔の境界ボックスが予測されます。次に、対応するモデルによって顔のキーポイントが予測されます。フレーム処理の最終ステップは、顔認識モデルによって実行されます。顔認識モデルは、見つかったキーポイントを使用して顔を位置合わせし、顔ギャラリーを使用して、ビデオフレーム上で見つかった顔をギャラリー内の顔と照合します。そして、処理結果は視覚化されて画面に表示されたり、出力ファイルに書き込まれたりします。
注: デフォルトでは、Open Model Zoo のデモは BGR チャネル順序での入力を期待します。RGB 順序で動作するようにモデルをトレーニングした場合は、サンプルまたはデモ・アプリケーションでデフォルトのチャネル順序を手動で再配置するか、
--reverse_input_channels
引数を指定したモデル・オプティマイザー・ツールを使用してモデルを再変換する必要があります。引数の詳細については、[前処理計算の埋め込み](@ref openvino_docs_MO_DG_Additional_Optimization_Use_Cases) の入力チャネルを反転するセクションを参照してください。
実行の準備¶
デモの入力画像またはビデオファイルについては、Open Model Zoo デモの概要のデモに使用できるメディアファイルのセクションを参照してください。デモでサポートされるモデルリストは、<omz_dir>/demos/face_recognition_demo/python/models.lst
ファイルにあります。このファイルは、モデル・ダウンローダーおよびコンバーターのパラメーターとして使用され、モデルをダウンロードし、必要に応じて OpenVINO IR 形式 (*.xml + *.bin) に変換できます。
モデル・ダウンローダーの使用例:
omz_downloader --list models.lst
モデル・コンバーターの使用例:
omz_converter --list models.lst
サポートされるモデル¶
face-detection-adas-0001
face-detection-retail-0004
face-recognition-resnet100-arcface-onnx
face-reidentification-retail-0095
facenet-20180408-102900
landmarks-regression-retail-0009
注: 各種デバイス向けのモデル推論サポートの詳細については、インテルの事前トレーニング・モデルのデバイスサポートとパブリックの事前トレーニング・モデルのデバイスサポートの表を参照してください。
顔認識用のギャラリーを作成¶
顔を認識するために、アプリケーションは顔データベースまたはギャラリーを使用します。ギャラリーは人物の画像が格納されたフォルダーです。ギャラリー内の各画像は任意のサイズにすることができ、適切な品質で正面を向いた顔が 1 つ以上含まれている必要があります。同一人物の画像は複数掲載可能ですが、命名形式は、{id}-{num_of_instance}.jpg
のようにする必要があります。例えば、Paul-0.jpg
、Paul-1.jpg
のような画像ファイルが存在する場合、それらは同一人物の画像として扱われます。1 人につき 1 つの画像がある場合は、{id}.jpg
(例: Paul.jpg
) という形式も使用できます。アプリケーションは、ギャラリーの構築中に顔検出器を使用できます。これは --run_detector
フラグで制御できます。これにより、ギャラリー画像に複数の顔画像を含めることができ、厳密に切り取られることがなくなります。このモードでは、特定の画像を画像ギャラリーに追加するか確認されます (これにより、画像がディスク上の同じフォルダーに自動的にダンプされます)。存在する場合、開いているウィンドウで画像の名前を指定し、Enter
キーを押します。そうでない場合は、Escape
キーを押します。開いたウィンドウに同じ名前を設定することで、同じ人物の複数の画像を追加できます。ただし、顔検出器が失敗して結果が不十分になることがあるため、結果として得られるギャラリーを厳密にチェックする必要があります。
画像ファイル名は、視覚化中に人物名として使用されます。person_N_name.png
または person_N_name.jpg
という名前規則を使用します。
実行¶
-h
オプションを指定して、または引数を指定せずにアプリケーションを実行すると、次のメッセージが表示されます。
usage: face_recognition_demo.py [-h] -i INPUT [--loop] [-o OUTPUT] [-limit OUTPUT_LIMIT] [--output_resolution OUTPUT_RESOLUTION] [--no_show] [--crop_size CROP_SIZE CROP_SIZE] [--match_algo {HUNGARIAN,MIN_DIST}] [-u UTILIZATION_MONITORS]
[-fg FG] [--run_detector] [--allow_grow] -m_fd M_FD -m_lm M_LM -m_reid M_REID [--fd_input_size FD_INPUT_SIZE FD_INPUT_SIZE] [-d_fd {CPU,GPU,HETERO}] [-d_lm {CPU,GPU,HETERO}] [-d_reid {CPU,GPU,HETERO}] [-v]
[-t_fd [0..1]] [-t_id [0..1]] [-exp_r_fd NUMBER]
optional arguments:
-h, --help show this help message and exit
General:
-i INPUT, --input INPUT
Required. An input to process. The input must be a single image, a folder of images, video file or camera id.
--loop Optional. Enable reading the input in a loop.
-o OUTPUT, --output OUTPUT
Optional. Name of the output file(s) to save. Frames of odd width or height can be truncated. See https://github.com/opencv/opencv/pull/24086
-limit OUTPUT_LIMIT, --output_limit OUTPUT_LIMIT
Optional. Number of frames to store in output. If 0 is set, all frames are stored.
--output_resolution OUTPUT_RESOLUTION
Optional. Specify the maximum output window resolution in (width x height) format. Example: 1280x720. Input frame size used by default.
--no_show Optional. Don't show output.
--crop_size CROP_SIZE CROP_SIZE
Optional. Crop the input stream to this resolution.
--match_algo {HUNGARIAN,MIN_DIST}
Optional. Algorithm for face matching. Default: HUNGARIAN.
-u UTILIZATION_MONITORS, --utilization_monitors UTILIZATION_MONITORS
Optional. List of monitors to show initially.
Faces database:
-fg FG Optional. Path to the face images directory.
--run_detector Optional. Use Face Detection model to find faces on the face images, otherwise use full images.
--allow_grow Optional. Allow to grow faces gallery and to dump on disk. Available only if --no_show option is off.
Models:
-m_fd M_FD Required. Path to an .xml file with Face Detection model.
-m_lm M_LM Required. Path to an .xml file with Facial Landmarks Detection model.
-m_reid M_REID Required. Path to an .xml file with Face Reidentification model.
--fd_input_size FD_INPUT_SIZE FD_INPUT_SIZE
Optional. Specify the input size of detection model for reshaping. Example: 500 700.
Inference options:
-d_fd {CPU,GPU,HETERO}
Optional. Target device for Face Detection model. Default value is CPU.
-d_lm {CPU,GPU,HETERO}
Optional. Target device for Facial Landmarks Detection model. Default value is CPU.
-d_reid {CPU,GPU,HETERO}
Optional. Target device for Face Reidentification model. Default value is CPU.
-v, --verbose Optional. Be more verbose.
-t_fd [0..1] Optional. Probability threshold for face detections.
-t_id [0..1] Optional. Cosine distance threshold between two vectors for face identification.
-exp_r_fd NUMBER Optional. Scaling ratio for bboxes passed to face recognition.
アプリケーションを実行するコマンドラインの例:
Linux* (sh
、bash
、…) (OpenVINO が /opt/intel/openvino
にインストールされていると仮定):
# Set up the environment
source /opt/intel/openvino/bin/setupvars.sh
python ./face_recognition_demo.py \
-i <path_to_video>/input_video.mp4 \
-m_fd <path_to_model>/face-detection-retail-0004.xml \
-m_lm <path_to_model>/landmarks-regression-retail-0009.xml \
-m_reid <path_to_model>/face-reidentification-retail-0095.xml \
--verbose \
-fg "/home/face_gallery"
Windows* (cmd
、powershell
) (OpenVINO が C:/Intel/openvino
にインストールされていると仮定):
# Set up the environment
call C:/Intel/openvino/bin/setupvars.bat
python ./face_recognition_demo.py ^
-i <path_to_video>/input_video.mp4 ^
-m_fd <path_to_model>/face-detection-retail-0004.xml ^
-m_lm <path_to_model>/landmarks-regression-retail-0009.xml ^
-m_reid <path_to_model>/face-reidentification-retail-0095.xml ^
--verbose ^
-fg "C:/face_gallery"
注: 単一の画像を入力として指定すると、デモはすぐに処理してレンダリングし終了します。推論結果を画面上で継続的に視覚化するには、
loop
オプションを適用します。これにより、単一の画像がループで処理されます。
-o
オプションを使用すると、処理結果を Motion JPEG AVI ファイル、または別の JPEG または PNG ファイルに保存できます。
処理結果を AVI ファイルに保存するには、
avi
拡張子を付けた出力ファイル名を指定します (例:-o output.avi
)。-
処理結果を画像として保存するには、出力画像ファイルのテンプレート名を拡張子
jpg
またはpng
で指定します (例:-o output_%03d.jpg
)。実際のファイル名は、実行時に正規表現%03d
をフレーム番号に置き換えることによってテンプレートから構築され、output_000.jpg
、output_001.jpg
などになります。カメラなど連続入力ストリームでディスク領域のオーバーランを避けるため、limit
オプションを使用して出力ファイルに保存されるデータの量を制限できます。The default value is 1000.これを変更するには、-limit N
オプションを適用します。ここで、N
は保存するフレームの数です。
注: Windows* システムには、デフォルトでは Motion JPEG コーデックがインストールされていない場合があります。この場合、OpenVINO ™ インストール・パッケージに付属する、
<INSTALL_DIR>/opencv/ffmpeg-download.ps1
にある PowerShell スクリプトを使用して OpenCV FFMPEG バックエンドをダウンロードできます。OpenVINO ™ がシステムで保護されたフォルダーにインストールされている場合 (一般的なケース)、スクリプトは管理者権限で実行する必要があります。あるいは、結果を画像として保存することもできます。
デモの出力¶
デモでは、OpenCV ウィンドウを使用して、結果のビデオフレームと検出を表示します。デモレポート
FPS: ビデオフレーム処理の平均レート (1 秒あたりのフレーム数)。
-
レイテンシー: 1 フレームの処理 (フレームの読み取りから結果の表示まで) に必要な平均時間。これらのメトリックの両方を使用して、アプリケーション・レベルのパフォーマンスを測定できます。