G-API 背景減算デモ

このデモでは、G-API を使用して背景減算を実行する方法を示します。

注: バッチサイズ 1 のみがサポートされます。

どのように動作するか

デモ・アプリケーションは、instance-segmentation-security-???? を想定しています。 または、中間表現 (IR) 形式のピクセルレベルのセグメント化 アプローチモデルに基づいたトライマップ・フリーの背景マットです。OpenModelZoo コレクションには背景マットモデルが存在しないことに注意してください。

  1. 例えば、Mask RCNN アプローチに基づくセグメント化モデル:

    • 1 つの入力: 入力画像用の image

    • 以下を含む少なくとも 3 つの出力:

      • boxes 入力画像の絶対境界ボックス座標とそのスコア

      • labels すべての境界ボックスのオブジェクト・クラス ID を含む

      • masks すべての境界ボックスのすべてのクラスに対する固定サイズのセグメント化ヒートマップを使用

  2. ピクセルレベルのセグメント化アプローチに基づいたトリップマップ・フリーの背景マットの場合:

    • 単一の 1x3xWxH 入力。

    • 単一の 1x1xWxH 出力 - 入力のアルファーチャンネルである浮動小数点テンソル。

デモの使用例は、前景 (人物) のみを表示し、背景を非表示または置き換える必要があるオンライン会議です。

デモ・アプリケーションは入力として、単一の画像ファイル、ビデオファイル、またはコマンドライン引数で指定された Web カメラの数値 ID へのパスを受け入れます -i

デモのワークフローは次のとおりです。

  1. デモ・アプリケーションは、画像/ビデオフレームを 1 枚ずつ読み取り、ネットワークの入力画像 BLOB (image) に収まるようにサイズを変更します。

  2. デモでは、結果として得られる背景の減算を視覚化します。特定のコマンドライン・オプションは視覚化に影響します。

    • --target_bgr を指定すると、背景が選択した画像またはビデオに置き換えられます。デフォルトでは、背景は緑色のフィールドに置き換えられます。

    • --blur_bgr を指定すると、設定値に応じて背景をぼかします。デフォルトではゼロであるため、適用されません。

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

実行の準備

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

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

omz_downloader --list models.lst

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

omz_converter --list models.lst

サポートされるモデル

  • instance-segmentation-person-????

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

OneVPL サポート

デモでは、OneVPL ビデオデコードを使用する機能が提供されます。
例:

./background_subtraction_demo_gapi/ -m <path_to_model> -i <path_to_video_file> -use_onevpl

追加の構成パラメーターを指定するには、-onevpl_params を使用します。

./background_subtraction_demo_gapi/ -m <path_to_model> -i <path_to_raw_file> -use_onevpl -onevpl_params="mfxImplDescription.mfxDecoderDescription.decoder.CodecID:MFX_CODEC_HEVC"

注: Linux* では、h264h265 などの raw 形式のみがサポートされます。RAW 形式を使用する場合、ユーザーは常に -onevpl_params を介して codec タイプを指定する必要があります。以下の例を参照してください。

oneVPL サポートを使用して OpenCV G-API を構築するには、次の手順に従ってください: oneVPL ツールキットのサポートを使用して G-API を構築する

トラブルシューティング

oneVPL は実行中に、ソースをより正確に構成できることをユーザーに警告する場合があります。

例:

 cv::gapi::wip::onevpl::VPLLegacyDecodeEngine::process_error [000001CED3851C70] error: cv::gapi::wip::onevpl::CachedPool::find_free - cannot get free surface from pool, size: 5

この問題は、-onevpl_pool_size パラメーターを使用してプールサイズを増やすことで解決される可能性があります。

実行

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

[ INFO ] OpenVINO Runtime version ......... <version>
[ INFO ] Build ........... <build>

background_subtraction_demo_gapi [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.
    -res "<WxH>"               Optional. Set camera resolution in format WxH.
    -at "<type>"               Required. Architecture type: maskrcnn.
    -m "<path>"                Required. Path to an .xml file with a trained model.
    -kernel_package "<string>" Optional. G-API kernel package type: opencv, fluid (by default opencv is used).
    -d "<device>"              Optional. Target device for network (the list of available devices is shown below). The demo will look for a suitable plugin for a specified device. Default value is "CPU".
    -nireq "<integer>"         Optional. Number of infer requests. If this option is omitted, number of infer requests is determined automatically.
    -nthreads "<integer>"      Optional. Number of threads.
    -nstreams                  Optional. Number of streams to use for inference on the CPU or/and GPU in throughput mode (for HETERO and MULTI device cases use format <device1>:<nstreams1>,<device2>:<nstreams2> or just <nstreams>)
    -no_show                   Optional. Don't show output.
    -blur_bgr                  Optional. Blur background.
    -target_bgr                Optional. Background onto which to composite the output (by default to green field).
    -u                         Optional. List of monitors to show initially.
    -use_onevpl                Optional. Use onevpl video decoding.
    -onevpl_params             Optional. Parameters for onevpl video decoding. OneVPL source can be fine-grained by providing configuration parameters. Format: <prop name>:<value>,<prop name>:<value> Several important configuration parameters: 'mfxImplDescription.mfxDecoderDescription.decoder.CodecID' values: https://spec.oneapi.io/onevpl/2.7.0/API_ref/VPL_enums.html?highlight=mfx_codec_hevc#codecformatfourcc and 'mfxImplDescription.AccelerationMode' values: https://spec.oneapi.io/onevpl/2.7.0/API_ref/VPL_disp_api_enum.html?highlight=d3d11#mfxaccelerationmode(see `MFXSetConfigFilterProperty` by https://spec.oneapi.io/versions/latest/elements/oneVPL/source/index.html)
    -onevpl_pool_size          OneVPL source applies this parameter as preallocated frames pool size. 0 leaves frames pool size default for your system. This parameter doesn't have a god default value. It must be adjusted for specific execution (video, model, system ...).

Available target devices:  <targets>

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

デモを実行するには、IR 形式のモデルへのパス、および入力ビデオ、画像、または画像が含まれるフォルダーへのパスを指定してください。

./background_subtraction_demo_gapi/ -m <path_to_model> -i <path_to_file>

注: 単一の画像を入力として指定すると、デモはすぐに処理してレンダリングし終了します。推論結果を画面上で継続的に視覚化するには、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 オプションを使用して出力ファイルに保存されるデータの量を制限できます。デフォルト値は 1000 です。これを変更するには、-limit N オプションを適用します。ここで、N は保存するフレームの数です。

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

デモの出力

アプリケーションは OpenCV を使用して、結果の画像を表示します。
デモレポート

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