顔認識 Python* デモ

この例では、ビデオ処理用の対話型アプリケーションを作成するアプローチを示します。これは、Python の OpenVINO ライブラリーを使用した、さまざまなデバイスへのモデルの配置と同時並列または逐次実行をサポートするモデル・パイプラインを構築する基本アーキテクチャーを示しています。特に、このデモでは 3 つのモデルを使用して、ビデオ上の顔とそのキーポイント (別名 “ランドマーク”) を検出し、提供された顔データベース (ギャラリー) を使用して人物を認識できるパイプラインを構築します。次の事前トレーニング済みモデルを使用できます。

  • face-detection-retail-0004face-detection-adas-0001 は顔を検出し、その境界ボックスを予測します;

  • landmarks-regression-retail-0009、顔のキーポイントを予測します;

  • face-reidentification-retail-0095facenet-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

注: 各種デバイス向けのモデル推論サポートの詳細については、インテルの事前トレーニング・モデルのデバイスサポートパブリックの事前トレーニング・モデルのデバイスサポートの表を参照してください。

実行

-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* (shbash、…) (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* (cmdpowershell) (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.jpgoutput_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 フレームの処理 (フレームの読み取りから結果の表示まで) に必要な平均時間。これらのメトリックの両方を使用して、アプリケーション・レベルのパフォーマンスを測定できます。