Ultralytics YOLO26によるシーンテキストOCR
シーンテキストOCRとは何ですか?#
光学文字認識(OCR)は、画像内のテキストを検出して読み取ります。OCRソリューションは、Ultralytics YOLO26テキスト検出器とテキスト認識バックエンドを組み合わせます。軸に沿った検出ボックス、回転ボックス(OBB)、セグメンテーションポリゴンに対応し、認識したテキストを読み取り順に返します。
検出と認識は別々のコンポーネントであるため、シーンテキスト検出器をPaddleOCRまたは独自の認識モデルと組み合わせることができます。
シーンテキストOCRを使用する理由#
- 柔軟なテキスト形状: 検出モデル、OBBモデル、またはセグメンテーションモデルを使用して、水平、回転、または不規則なテキストを処理できます。
- 交換可能な認識機能: 追加の統合コードなしでPaddleOCRを実行するか、別のモデル用の呼び出し可能オブジェクトを渡せます。
- 構造化された出力: 1つの結果オブジェクトから、認識テキスト、認識および検出の信頼度、元の形状、注釈付き画像にアクセスできます。
YOLO26でシーンテキストOCRを実行する#
PaddleOCRはオプションであり、OCRをrecognizer="paddleocr"で作成すると読み込まれます。このとき、PaddleOCR 3.xとCPU版PaddlePaddleが未インストールであればインストールされます。GPUで認識するには、先に適合するpaddlepaddle-gpuビルドをインストールしてください。基本のUltralytics依存関係にはOCRパッケージは追加されません。
画像とテキスト検出器をOCRソリューションに渡します。結果には注釈付き画像と認識テキストが含まれます。
yolo solutions ocr model="scene-text-obb.pt" source="path/to/video.mp4" recognizer="paddleocr"YOLO26-Textチェックポイント#
公開されているYOLO26-Textファミリーには、n、s、m、l、およびxのOBBチェックポイントがあります。ULTRALYTICS_API_KEYに独自のUltralytics Platform APIキーを設定し、Platform URIでチェックポイントを読み込みます。
export ULTRALYTICS_API_KEY="your-api-key"ocr = solutions.OCR(model="ul://ultralytics-yolo/yolo26-text/yolo26n-text", recognizer="paddleocr")
result = ocr(im0)より大きなモデルを使用するには、yolo26n-textをyolo26s-text、yolo26m-text、yolo26l-text、またはyolo26x-textに置き換えます。
OCRの引数#
OCRの引数を以下の表に示します。
| 引数 | 種類 | デフォルト | 説明 |
|---|---|---|---|
model | str | None | Ultralytics YOLOモデルファイルへのパスです。 |
recognizer | strまたはCallable | 'paddleocr' | BGRクロップを受け取り、(text, confidence)を返すテキスト認識バックエンドまたは呼び出し可能オブジェクトです。 |
line_width | int | 2 | Solutionが描画するボックス、キーポイント、カウント表示の線幅です。 |
verbose | bool | True | 各フレームの入力shape、クラス数、処理速度を記録するSolutionのログを有効にします。トラッキング呼び出し自体は常にログを出力しません。 |
さらに、以下の可視化設定もサポートされています。
| 引数 | 種類 | デフォルト | 説明 |
|---|---|---|---|
show | bool | False | Trueの場合、注釈付き画像または動画をウィンドウに表示します。開発やテスト中にすぐ視覚的なフィードバックを得るのに便利です。 |
show_conf | bool | True | 各検出のラベルとともに信頼度スコアを表示します。各検出に対するモデルの確信度を確認できます。 |
show_labels | bool | True | 可視化出力で各検出のラベルを表示します。検出されたオブジェクトをすぐに把握できます。 |
シーンテキストOCRの仕組み#
- テキストを検出: YOLO26は、軸に沿ったボックス、回転ボックス、またはセグメンテーションポリゴンを生成します。
- 認識用クロップを作成: ボックスは画像の範囲内にクリップされます。OBBは、左右方向に最も長く広がる辺に沿ってアフィン補正されるため、ほぼ正方形のボックスは直立したままになり、傾いたテキスト行は読み取り方向に水平になります。セグメンテーションポリゴンでは、最小面積の回転矩形を補正し、元のポリゴンを保持します。幅の1.5倍以上の高さがあるクロップは、PaddleOCRと同様に反時計回りに90°回転します。
- テキストを認識: PaddleOCRは、すべてのクロップを16件ずつのバッチで処理します。カスタム認識器には、一度に1つのクロップが渡されます。
- 結果を並べ替えて描画: テキストを水平な行にまとめ、上から下、左から右の順に並べます。可視化では、中国語などのASCII以外のテキストにUnicodeフォントを使用します。
座標は常に元の画像を基準とし、検出器への入力画像や認識用クロップは基準としません。
カスタム認識器を使用する#
呼び出し可能オブジェクトを渡すと、検出、形状、並べ替えの処理経路を変更せずに別の認識モデルを統合できます。呼び出し可能オブジェクトは、空でないBGRのnumpy.ndarrayクロップごとに1回実行されます。バッチ結果のリストではなく、呼び出しごとに(text, confidence)タプルを1つ返します。
| タプル項目 | 受け入れ可能な型 | 説明 |
|---|---|---|
text | str | このクロップのデコード済みテキストです。テキストが認識されない場合は""を返します。 |
confidence | float、int、またはnumpy.floating | 数値の認識信頼度です。ソリューションによってfloatに変換されます。 |
def recognize(crop):
# BGRクロップに対して認識モデルを実行し、ここで出力をデコードします。
return "example", 0.95
ocr = solutions.OCR(model="custom-text.pt", recognizer=recognize)
result = ocr(im0)サポートされていないバックエンド名を指定すると、ValueErrorが発生します。テキストが検出されない場合、result.textsは空になり、認識器は呼び出されません。
OCRの結果#
各呼び出しはSolutionResultsオブジェクトを返します。注釈付き画像にはresult.plot_imを、決定的な読み取り順のレコードにはresult.textsを使用します。
| キー | 種類 | 説明 |
|---|---|---|
text | str | 認識されたテキストです。 |
confidence | float | 認識信頼度です。検出信頼度とは別に保持されます。 |
detection_confidence | float | YOLO検出器の信頼度です。 |
detection_index | int | 読み取り順に並べ替える前の元の検出インデックスです。 |
polygon | list[list[float]] | 元の画像上のポリゴンです。ボックスおよびOBB検出では4つの角、マスクでは輪郭を示します。 |
依存関係とライセンス#
| コンポーネント | 必須 | ロール | ライセンス |
|---|---|---|---|
| Ultralytics | はい | YOLOによる検出、クロップ形状の処理、結果の調整 | AGPL-3.0 |
| PaddlePaddle | recognizer="paddleocr"の場合のみ | 認識ランタイム | Apache-2.0 |
| PaddleOCR 3.x | recognizer="paddleocr"の場合のみ | テキスト行認識モデルと推論アダプター | Apache-2.0 |
| カスタムの呼び出し可能オブジェクト | いいえ | ユーザーが管理する認識機能の統合 | バックエンドによって定義されます |
PaddleOCRは初回使用時に認識用の重みをダウンロードする場合があります。これらのアーティファクトをパッケージ化またはデプロイする前に、選択したモデルのモデルカードと再配布条件を確認してください。カスタムチェックポイントのライセンスは別途適用されます。
よくある質問#
はい。呼び出し可能オブジェクトを
recognizerとして渡し、各BGRクロップに対して(text, confidence)を返してください。入力と出力の仕様については、カスタム認識器を使用するをご覧ください。いいえ。OCRは各入力画像を個別に処理し、トラックIDや認識結果のキャッシュは使用しません。フレーム単位のOCRが必要な場合は、動画の各フレームを個別の入力として処理してください。
YOLO検出器は通常のエクスポートモードでエクスポートできますが、PaddleOCRやカスタム認識器はONNX、TensorRTなどの検出器アーティファクトには組み込まれません。エクスポートした検出器と認識ランタイムを別々のコンポーネントとしてデプロイするか、このPython構成レイヤーを維持してください。
コメント
質問したり、結果を共有したり、ほかの人をサポートしたりできます。