交差点カメラ C++ デモ

example

このデモは、人物の検出、認識、再識別のための推論パイプラインを提供します。このデモでは、人物検出ネットワークを使用し、その後、検出結果に人物属性認識および人物再識別小売ネットワークが適用されます。デモでは、次の事前トレーニングされたモデルのセットを使用できます。

  • person-vehicle-bike-detection-crossroad-0078、人 (および必要に応じて他の物体) を見つける検出ネットワークです

  • person-attributes-recognition-crossroad-0230、最初のネットワークの結果に基づいて実行され、性別、帽子の有無、長袖の服の有無などの人物の属性を報告します

  • person-reidentification-retail-0277、最初のネットワークからの結果に基づいて実行され、検出された各人物の特徴ベクトルを出力します。このベクトルは、すでに検出された人物であるかを判断するために使用されます。

事前トレーニングされたモデルの詳細については、モデルのドキュメントを参照してください。

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

  • OpenCV* 経由の入力としての画像/ビデオ/カメラ

  • 単純なネットワーク・パイプラインの例: 人物属性ネットワークと人物再識別ネットワークが人物検出結果に基づいて実行されます

  • 検出された各人物の人物属性と人物再識別 (REID) 情報を可視化します

どのように動作するか

起動時に、アプリケーションはコマンドライン・パラメーターを読み取り、指定されたネットワークを読み込みます。人物検出ネットワークは必須ですが、他の 2 つはオプションです。

OpenCV VideoCapture からフレームを取得すると、アプリケーションは人物検出ネットワークの推論を実行し、次に人物属性認識ネットワークと人物再識別小売ネットワーク (コマンドラインで指定されている場合) の推論を実行し、結果を表示します。

人物再識別小売ネットワークが指定されている場合、検出された人物ごとに結果のベクトルが生成されます。このベクトルは、コサイン類似度アルゴリズムを使用して、以前に検出されたすべての人物ベクトルと 1 つずつ比較されます。比較結果が指定された (またはデフォルトの) しきい値より大きい場合、人物はすでに検出されていると判断され、既知の REID 値が割り当てられます。それ以外の場合、ベクトルはグローバルリストに追加され、新しい REID 値が割り当てられます。

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

実行の準備

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

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

omz_downloader --list models.lst

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

omz_converter --list models.lst

サポートされるモデル

  • person-attributes-recognition-crossroad-0230

  • person-attributes-recognition-crossroad-0234

  • person-attributes-recognition-crossroad-0238

  • person-reidentification-retail-0277

  • person-reidentification-retail-0286

  • person-reidentification-retail-0287

  • person-reidentification-retail-0288

  • person-vehicle-bike-detection-crossroad-0078

  • person-vehicle-bike-detection-crossroad-1016

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

実行

-h オプションを指定してアプリケーションを実行すると、使用方法が表示されます。

crossroad_camera_demo [OPTION]
Options:

-h                           Print a usage message.
-i                           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 "<path>"                  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 "<num>"               Optional. Number of frames to store in output. If 0 is set, all frames are stored.
-m "<path>"                  Required. Path to the Person/Vehicle/Bike Detection Crossroad model (.xml) file.
-m_pa "<path>"               Optional. Path to the Person Attributes Recognition Crossroad model (.xml) file.
-m_reid "<path>"             Optional. Path to the Person Reidentification Retail model (.xml) file.
-d "<device>"                Optional. Specify the target device for Person/Vehicle/Bike Detection. The list of available devices is shown below. Default value is CPU. Use "-d HETERO:<comma-separated_devices_list>" format to specify HETERO plugin. The application looks for a suitable plugin for the specified device.
-d_pa "<device>"             Optional. Specify the target device for Person Attributes Recognition. The list of available devices is shown below. Default value is CPU. Use "-d HETERO:<comma-separated_devices_list>" format to specify HETERO plugin. The application looks for a suitable plugin for the specified device.
-d_reid "<device>"           Optional. Specify the target device for Person Reidentification Retail. The list of available devices is shown below. Default value is CPU. Use "-d HETERO:<comma-separated_devices_list>" format to specify HETERO plugin. The application looks for a suitable plugin for the specified device.
-r                           Optional. Output Inference results as raw values.
-t                           Optional. Probability threshold for person/vehicle/bike crossroad detections.
-t_reid                      Optional. Cosine similarity threshold between two vectors for person reidentification.
-no_show                     Optional. Don't show output.
-auto_resize                 Optional. Enables resizable input with support of ROI crop & auto resize.
-u                           Optional. List of monitors to show initially.
-person_label                Optional. The integer index of the objects' category corresponding to persons (as it is returned from the detection network, may vary from one network to another). The default value is 1.

空のオプションリストを指定してアプリケーションを実行すると、上記の使用法メッセージとエラーメッセージが表示されます。

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

./crossroad_camera_demo -i <path_to_video>/inputVideo.mp4 -m <path_to_model>/person-vehicle-bike-detection-crossroad-0078.xml -m_pa <path_to_model>/person-attributes-recognition-crossroad-0230.xml -m_reid <path_to_model>/person-reidentification-retail-0079.xml -d GPU

注: 検出ネットワークは、結果として検出された物体のセットを返します。検出された各物体は、境界ボックスと物体のカテゴリー (人/車両/自転車) のインデックスで構成されます。このデモでは、カテゴリー “人物” を持つ境界ボックスに対してのみ、人物属性認識ネットワークと人物再識別ネットワークを実行します。検出ネットワークが異なれば、カテゴリー “人物” に対応するカテゴリー・インデックスも異なる可能性がありますが、このインデックスはコマンドライン・パラメーター -person_label で指定できます。次の点に注意してください。

  • モデル person-vehicle-bike-detection-crossroad-0078 は、人物に対してカテゴリー・インデックス 1 を返します。これはデフォルト値です。

  • モデル person-vehicle-bike-detection-crossroad-1016 は、人物に対してカテゴリー・インデックス 2 を返すため、デモが正しく動作するには、コマンドライン・パラメーター -person_label 2 を追加する必要があります。

注: 単一の画像を入力として指定すると、デモはすぐに処理してレンダリングし終了します。推論結果を画面上で継続的に視覚化するには、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 フレームの処理 (フレームの読み取りから結果の表示まで) に必要な平均時間。

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