テキスト・スポッティング Python* デモ#

例

このデモでは、テキスト・スポッティング・モデルを実行する方法を示します。テキスト・スポッティング・モデルを使用すると、テキストの検出と認識を同時に行うことができます。

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

どのように動作するか#

デモ・アプリケーションでは、3 つに分割されたテキスト・スポッティング・モデルを想定しています。すべてのモデルパーツは中間表現 (IR) 形式である必要があります。

最初のモデルは、次の制限がある Mask-RCNN に類似したテキスト検出器です:

  • 2 つの入力: 入力画像の im_data と画像に関するメタ情報 (実際の高さ、幅、スケール) の im_info

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

    • boxes - 入力画像の絶対境界ボックス座標を持つ

    • scores - 信頼スコア付きのすべての境界ボックス

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

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

    • text_features - テキスト認識ヘッドに供給されるテキストの特徴

2 番目のモデルは、text_features を入力として受け取り、エンコードされたテキストを生成するテキスト認識エンコーダーです。

3 番目のモデルは、テキスト認識エンコーダーからエンコードされたテキスト、前のシンボル、および非表示の状態を取得するテキスト認識デコーダーです。最初のステップでは、特殊シーケンス開始 (SOS) シンボルとゼロの隠れ状態がテキスト認識デコーダーに供給されます。デコーダーは、シーケンス終了 (EOS) シンボルが生成されるまで、シンボルの分布現在の隠れ状態を各ステップで生成します。

コマンドライン引数 -i で指定する有効な入力の例は、ビデオファイルへのパスまたは Web カメラの数値 ID です。

デモのワークフローを次に示します:

  1. デモ・アプリケーションは、入力からフレームを読み取り、ネットワークの入力画像ブロブ (im_data) に収まるようにサイズを変更します。

  2. im_info 入力ブロブは、前処理された画像の解像度とスケールをネットワークに渡し、Mask-RCNN に類似したテキスト検出器の推論を実行します。

  3. テキスト認識エンコーダーは、テキスト検出器から入力を受け取り、出力を生成します。

  4. テキスト認識デコーダーは、テキスト認識エンコーダーからの出力を入力として受け取り、出力を生成します。

  5. デモでは、テキスト・スポッティングの結果を視覚化します。特定のコマンドライン・オプションは視覚化に影響します:

    • --show_boxes および --show_scores 引数を指定すると、境界ボックスと信頼スコアも表示されます。

    • デフォルトでは、ビデオ全体を通じてテキスト・インスタンスを同じ色で表示するためトラッキングが使用されます。マスクの結合上の交差が 0.5 のしきい値より大きい場合、2 つのフレーム内のインスタンスが同じトラックの一部である静的なシーンを想定します。トラックを無効にするには、--no_track 引数を指定します。

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

実行の準備#

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

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

omz_downloader --list models.lst

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

omz_converter --list models.lst

サポートされるモデル#

  • text-spotting-0005-detector

  • text-spotting-0005-recognizer-decoder

  • text-spotting-0005-recognizer-encoder

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

実行する#

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

usage: text_spotting_demo.py [-h] -m_m "<path>" -m_te "<path>" -m_td "<path>" 
                             -i INPUT [--loop] [-o OUTPUT] 
                             [-limit OUTPUT_LIMIT] [-d "<device>"] 
                             [--delay "<num>"] [-pt "<num>"] [-a ALPHABET] 
                             [--trd_input_prev_symbol TRD_INPUT_PREV_SYMBOL] 
                             [--trd_input_prev_hidden TRD_INPUT_PREV_HIDDEN] 
                             [--trd_input_encoder_outputs TRD_INPUT_ENCODER_OUTPUTS] 
                             [--trd_output_symbols_distr TRD_OUTPUT_SYMBOLS_DISTR] 
                             [--trd_output_cur_hidden TRD_OUTPUT_CUR_HIDDEN] 
                             [-trt "<num>"] [--keep_aspect_ratio] [--no_track] [--show_scores] 
                             [--show_boxes] [-r] [--no_show] 
                             [-u UTILIZATION_MONITORS] 

Options: 
  -h, --help            Show this help message and exit.
  -m_m "<path>", --mask_rcnn_model "<path>" 
                        Required. Path to an .xml file with a trained Mask- RCNN model with additional text features output.
  -m_te "<path>", --text_enc_model "<path>" 
                        Required. Path to an .xml file with a trained text recognition model (encoder part).
  -m_td "<path>", --text_dec_model "<path>" 
                        Required. Path to an .xml file with a trained text recognition model (decoder part).
  -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.
  -d "<device>", --device "<device>" 
                        Optional. Specify the target device to infer on, i.e. CPU, GPU.
                        The demo will look for a suitable plugin for device specified 
                        (by default, it is CPU).Please refer to OpenVINO documentation 
                        for the list of devices supported by the model.
  --delay "<num>"       Optional. Interval in milliseconds of waiting for a 
                        key to be pressed.
  -pt "<num>", --prob_threshold "<num>" 
                        Optional. Probability threshold for detections filtering.
  -a ALPHABET, --alphabet ALPHABET 
                        Optional. Alphabet that is used for decoding.
  --trd_input_prev_symbol TRD_INPUT_PREV_SYMBOL 
                        Optional. Name of previous symbol input node to text 
                        recognition head decoder part.
  --trd_input_prev_hidden TRD_INPUT_PREV_HIDDEN 
                        Optional. Name of previous hidden input node to text 
                        recognition head decoder part.
  --trd_input_encoder_outputs TRD_INPUT_ENCODER_OUTPUTS 
                        Optional. Name of encoder outputs input node to text 
                        recognition head decoder part.
  --trd_output_symbols_distr TRD_OUTPUT_SYMBOLS_DISTR 
                        Optional. Name of symbols distribution output node 
                        from text recognition head decoder part.
  --trd_output_cur_hidden TRD_OUTPUT_CUR_HIDDEN 
                        Optional. Name of current hidden output node from text 
                        recognition head decoder part.
  -trt "<num>", --tr_threshold "<num>" 
                        Optional. Text recognition confidence threshold.
  --keep_aspect_ratio   Optional. Force image resize to keep aspect ratio.
  --no_track            Optional. Disable tracking.
  --show_scores         Optional. Show detection scores.
  --show_boxes          Optional. Show bounding boxes.
  -r, --raw_output_message 
                        Optional. Output inference results raw values.
  --no_show 
                        Optional. Don't show output 
  -u UTILIZATION_MONITORS, --utilization_monitors UTILIZATION_MONITORS 
                        Optional. List of monitors to show initially.

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

デモを実行するには、IR 形式のモデルへのパスと画像を含む入力へのパスを指定してください:

python3 text_spotting_demo.py \ 
    -m_m <path_to_model>/text-spotting-0005-detector.xml \ 
    -m_te <path_to_model>/text-spotting-0005-recognizer-encoder.xml \ 
    -m_td <path_to_model>/text-spotting-0005-recognizer-decoder.xml \ 
    -i 0

: 単一の画像を入力として指定すると、デモはすぐに処理してレンダリングし終了します。推論結果を画面上で継続的に視覚化するには、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 秒あたりのフレーム数)。

  • レイテンシー: 1 フレームの処理 (フレームの読み取りから結果の表示まで) に必要な平均時間。これらのメトリックの両方を使用して、アプリケーション・レベルのパフォーマンスを測定できます。

関連情報#