対話型顔検出 C++ デモ

example

このデモでは、一連のニューラル・ネットワークを使用して顔認識に適用される物体検出タスクを紹介します。非同期 API を使用すると、推論の完了を待機することなく、アクセラレーターがビジー状態の間もアプリケーションはホスト上で動作を継続できるため、アプリケーションの全体的なフレームレートを向上できます。このデモでは、年齢/性別認識、頭部姿勢推定、感情認識、顔のランドマーク検出、およびスプーフィング防止分類子ネットワークに対する 5 つの推論要求を同時に実行します。デモでは、次の事前トレーニングされたモデルのセットを使用できます。

  • face-detection-adas-0001 は、顔を検出するための主要な検出ネットワークです。

  • age-gender-recognition-retail-0013 は、最初のモデルの結果に基づいて実行され、検出された顔ごとに推定年齢と性別が報告されます。

  • head-pose-estimation-adas-0001 は、最初のモデルの結果に基づいて実行され、Tait-Bryan 角度で推定された頭部姿勢を報告します。

  • emotions-recognition-retail-0003 は、最初のモデルの結果に基づいて実行され、検出された顔ごとに感情を報告します。

  • facial-landmarks-35-adas-0002 は、最初のモデルの結果に基づいて実行され、推定された顔のランドマークの正規化された座標を報告します。

  • anti-spoof-mn3 は、最初のモデルの結果に基づいて実行され、なりすまし顔または本物の顔が表示される推定確率を報告します。

デモの目的は次のとおりです。

  • OpenCV* による入力としてのビデオのサポート

  • 顔検出ネットワークから得られる顔境界ボックスの視覚化

  • 検出された顔ごとに、年齢/性別、なりすまし/本物、頭の姿勢、感情情報、顔のランドマークの位置を可視化

OpenCV は、結果として得られる境界ボックス、ラベル、その他の情報を描画するために使用されます。

どのように動作するか

  1. アプリケーションはコマンドライン・パラメーターを読み取り、-m... オプションのファミリーに応じて最大 5 つのネットワークを推論エンジンに読み込みます。

  2. アプリケーションは OpenCV VideoCapture からフレームを取得します。

  3. アプリケーションは顔検出ネットワーク上で推論を実行します。

  4. アプリケーションは、コマンドラインで指定されている場合、年齢/性別、頭のポーズ、感情、顔のランドマーク、およびスプーフ防止検出ネットワークを使用して、最大 5 つの同時推論を実行します。

  5. アプリケーションは結果を表示します。

注: デフォルトでは、Open Model Zoo のデモは BGR チャネル順序での入力を期待します。RGB 順序で動作するようにモデルをトレーニングした場合は、サンプルまたはデモ・アプリケーションでデフォルトのチャネル順序を手動で再配置するか、--reverse_input_channels 引数を指定したモデル・オプティマイザー・ツールを使用してモデルを再変換する必要があります。引数の詳細については、[前処理計算の埋め込み](@ref openvino_docs_MO_DG_Additional_Optimization_Use_Cases) の入力チャネルを反転するセクションを参照してください。

非同期 API は、入力/出力をカプセル化し、スケジュールと結果の待機を分離する “推論要求” の概念で動作します。

実行の準備

デモの入力画像またはビデオファイルについては、Open Model Zoo デモの概要デモに使用できるメディアファイルのセクションを参照してください。デモでサポートされるモデルリストは、<omz_dir>/demos/interactive_face_detection_demo/cpp/models.lst ファイルにあります。このファイルは、モデル・ダウンローダーおよびコンバーターのパラメーターとして使用され、モデルをダウンロードし、必要に応じて OpenVINO IR 形式 (*.xml + *.bin) に変換できます。

モデル・ダウンローダーの使用例:

omz_downloader --list models.lst

モデル・コンバーターの使用例:

omz_converter --list models.lst

サポートされるモデル

  • age-gender-recognition-retail-0013

  • anti-spoof-mn3

  • emotions-recognition-retail-0003

  • face-detection-adas-0001

  • face-detection-retail-0004

  • face-detection-retail-0005

  • facial-landmarks-35-adas-0002

  • head-pose-estimation-adas-0001

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

実行中

-h オプションを指定してデモを実行すると、ヘルプ・メッセージが表示されます。

    [ -h]                                         show the help message and exit
                                    [--help]                                      print help on all arguments
                                    -m <MODEL FILE>                             path to an .xml file with a trained Face Detection model
                                    [ -i <INPUT>]                                 an input to process. The input must be a single image, a folder of images, video file or camera id. Default is 0
                                    [--bb_enlarge_coef <NUMBER>]                  coefficient to enlarge/reduce the size of the bounding box around the detected face. Default is 1.2
                                    [ -d <DEVICE>]                                specify a device to infer on (the list of available devices is shown below). Use '-d HETERO:<comma-separated_devices_list>' format to specify HETERO plugin. Use '-d MULTI:<comma-separated_devices_list>' format to specify MULTI plugin. Default is CPU
                                    [--dx_coef <NUMBER>]                          coefficient to shift the bounding box around the detected face along the Ox axis
                                    [--dy_coef <NUMBER>]                          coefficient to shift the bounding box around the detected face along the Oy axis
                                    [--fps <NUMBER>]                              maximum FPS for playing video
                                    [--lim <NUMBER>]                              number of frames to store in output. If 0 is set, all frames are stored. Default is 1000
                                    [--loop]                                      enable reading the input in a loop
                                    [--mag <MODEL FILE>]                          path to an .xml file with a trained Age/Gender Recognition model
                                    [--mam <MODEL FILE>]                          path to an .xml file with a trained Antispoofing Classification model
                                    [--mem <MODEL FILE>]                          path to an .xml file with a trained Emotions Recognition model
                                    [--mhp <MODEL FILE>]                          path to an .xml file with a trained Head Pose Estimation model
                                    [--mlm <MODEL FILE>]                          path to an .xml file with a trained Facial Landmarks Estimation model
                                    [ -o <OUTPUT>]                                name of the output file(s) to save
                                    [ -r]                                         output inference results as raw values
                                    [--show] ([--noshow])                         (don't) show output
                                    [--show_emotion_bar] ([--noshow_emotion_bar]) (don't) show emotion bar
                                    [--smooth] ([--nosmooth])                     (don't) smooth person attributes
                                    [ -t <NUMBER>]                                probability threshold for detections. Default is 0.5
                                    [ -u <DEVICE>]                                resource utilization graphs. Default is cdm. c - average CPU load, d - load distribution over cores, m - memory usage, h - hide
                                    Key bindings:
                                    Q, q, Esc - Quit
                                    P, p, 0, spacebar - Pause
                                    C - average CPU load, D - load distribution over cores, M - memory usage, H - hide

例えば、OpenVINO™ ツールキットの事前トレーニング済みモデルを使用して GPU で推論を実行するには、次のコマンドを実行します。

./interactive_face_detection_demo -i <path_to_video>/<input_video>.mp4 -m <path_to_model>/face-detection-adas-0001.xml --mag <path_to_model>/age-gender-recognition-retail-0013.xml --mhp <path_to_model>/head-pose-estimation-adas-0001.xml --mem <path_to_model>/emotions-recognition-retail-0003.xml --mlm <path_to_model>/facial-landmarks-35-adas-0002.xml --mam <path_to_model>/anti-spoof-mn3.xml -d GPU

注: 単一の画像を入力として指定すると、デモはすぐに処理してレンダリングし終了します。推論結果を画面上で継続的に視覚化するには、loop オプションを適用します。これにより、単一の画像がループで処理されます。

-o オプションを使用すると、処理結果を Motion JPEG AVI ファイル、または別の JPEG または PNG ファイルに保存できます。

  • 処理結果を AVI ファイルに保存するには、avi 拡張子を付けた出力ファイル名を指定します (例: -o output.avi)。

  • 処理結果を画像として保存するには、出力画像ファイルのテンプレート名を拡張子 jpg または png で指定します (例: -o output_%03d.jpg)。実際のファイル名は、実行時に正規表現 %03d をフレーム番号に置き換えることによってテンプレートから構築され、output_000.jpgoutput_001.jpg などになります。カメラなど連続入力ストリームでディスク領域のオーバーランを避けるため、--lim オプションを使用して出力ファイルに保存されるデータの量を制限できます。デフォルト値は 1000 です。これを変更するには、--lim N オプションを適用します。ここで、N は保存するフレームの数です。

注: Windows* システムには、デフォルトでは Motion JPEG コーデックがインストールされていない場合があります。この場合、OpenVINO ™ インストール・パッケージに付属する、<INSTALL_DIR>/opencv/ffmpeg-download.ps1 にある PowerShell スクリプトを使用して OpenCV FFMPEG バックエンドをダウンロードできます。OpenVINO ™ がシステムで保護されたフォルダーにインストールされている場合 (一般的なケース)、スクリプトは管理者権限で実行する必要があります。あるいは、結果を画像として保存することもできます。

デモの出力

このデモでは、OpenCV を使用して、検出された結果のフレームを表示します (境界ボックスとラベルが提供されている場合は、それらとしてレンダリングされます)。
デモレポート:

  • FPS: ビデオフレーム処理の平均レート (1 秒あたりのフレーム数)。

  • レイテンシー: 1 フレームの処理 (フレームの読み取りから結果の表示まで) に必要な平均時間。

これらのメトリックを使用して、アプリケーション・レベルのパフォーマンスを測定できます。