Skip to content

OCRトラッカーで文字送りを投票待ちせず追従する #650

Description

@Freeesia

概要

PR #648 で導入する OcrTextTracker は、同じ変更候補が一定回数観測されるまで以前の文字列を維持する。

この方式はOCR結果の揺れを抑制できる一方、次のように文字列が段階的に構築される文字送りでは、同じ候補が続かないため最初の短い文字列が維持される。

H → He → Hel → Hell → Hello

現在の投票による文字列安定化は維持したまま、文字送りと判断できる変化だけを投票待ちせず追従できるようにする。

方針

通常の文字列変更

現在の投票方式を維持する。

次のような静止状態間の切替、一時的なOCR誤認識、交互または周期的な認識揺れは、従来どおり即時には出力しない。

Menu → Game → Game
Menu → MenU → Menu
A → B → A → B
A → B → C → A → B → C

少数の候補が反復する認識揺れに対する抑制精度を低下させない。

文字送り

直前の候補を引き継ぎながら文字列が段階的に構築されている場合は、文字送りとして扱う。

H → He → Hel → Hell

文字送り判定は、最短では2つ目の異なる文字列候補から行う。

1つ目: H
2つ目: He  ← Hからの段階的な構築を確認

既存の安定文字列から文字送りが始まる場合、最初の候補だけでは瞬時切替、単発誤認識、文字送りを区別できないため、最初の候補は保留する。

OCR:  Menu → H    → He → Hel
出力: Menu → Menu → He → Hel

文字送りと判断した後は、進行した最新候補を投票確定前でも採用する。

文字送り中の揺れ

文字送り判定後も、すべての最新値へ無条件に追従しない。

次のような後退や、同程度の候補間の反復は認識揺れとして抑制する。

H → He → H → He
Hel → HeI → Hel → HeI

文字送り中は、段階的な構築が前進した候補を優先し、過去候補への後退や反復によって表示を揺らさない。

文字送り完了後

同じ文字列が継続した場合は通常の安定状態へ戻し、その後の単発または周期的な認識揺れを従来どおり抑制する。

重要な制約

認識結果をいったん最新値へ追従させ、後から周期的な揺れと判定して抑制する方式にはしない。

追従開始後に抑制しても、それまでの候補が翻訳処理や表示へ流れて揺れが発生するため、文字送りと判断できるまでは従来の安定値を維持する。

維持する機能

PR #648 で導入した次の機能は維持する。

  • 投票による文字列安定化
  • 交互・周期的な認識揺れの抑制
  • 静止状態間の切替確認
  • OCR領域の追跡
  • 複数領域間の対応付け
  • 位置およびサイズの安定化
  • OCR領域の分割・統合
  • 一時未認識時の保持
  • トラックの継続性管理

対象外

  • 文字列全般を最新値優先へ変更すること
  • 任意の連続変化へ追従すること
  • ユーザー向けの表示モード追加
  • 文字送り設定の追加
  • 文字送り完了まで翻訳を遅延すること
  • 翻訳要求のデバウンス
  • OCRエンジン固有の信頼度利用
  • 言語別の判定設定

確認するシナリオ

新規トラックの文字送り

H → He → Hel → Hell

最初の文字列へ固定されず、2つ目の異なる候補以降の段階的な構築へ追従すること。

安定状態から始まる文字送り

Menu → Menu → H → He → Hel

最初の H は保留し、H → He から文字送りと判断して He 以降へ追従すること。

静止状態間の瞬時切替

Menu → Game → Game

文字送りと誤判定せず、現在の投票方式により継続確認後に Game へ切り替わること。

2パターンの認識揺れ

A → B → A → B → A → B

出力が交互に切り替わらないこと。

数パターンの認識ループ

A → B → C → A → B → C

文字送りと誤判定せず、周期的な揺れが出力へ露出しないこと。

文字送り中の後退

H → He → Hel → He → Hel → Hell

短い候補への後退によって出力が戻らず、その後の前進へ追従すること。

文字送り中の候補揺れ

Hel → HeI → Hel → HeI

同程度の候補間で出力が反復しないこと。

文字送り完了後の再安定化

H → He → Hel → Hello → Hello → Hello → Hell0 → Hello

Hello が安定状態となり、その後の単発誤認識 Hell0 が抑制されること。

文字送りに伴う矩形の連続変化

文字列の進行に合わせて、矩形の幅・高さ・位置もフレームごとに変化する場合を確認する。

文字列: H  → He → Hel → Hell
幅:     20 → 40 → 60  → 80

左揃えだけでなく、中央揃えまたは右揃えによって幅の拡大と同時に X 座標が移動する場合も対象とする。

  • 同じ論理トラックを維持すること
  • 矩形が最初の短い文字列の位置・サイズへ固定されないこと
  • 進行中の文字列と矩形の変化によって古いトラックと新しいトラックが重複しないこと

文字送り中の改行・構造変化

文字送りの途中で改行が発生し、文字列の進行と同時に次のいずれかが発生する場合を確認する。

  • 単一矩形の高さや MultiLine が変化する
  • 1つのOCR領域が複数領域へ分割される
  • 複数のOCR領域が1領域へ統合される

通常の分割・統合だけでなく、各フレームで文字列自体も進行している組み合わせを対象とする。

  • 文字送りの論理トラックと進行状態を維持すること
  • 改行前後の古い表示と新しい表示が重複しないこと
  • 構造変化によって文字送りの追従が最初からやり直しにならないこと

受け入れ条件

  • 現在の投票による文字列安定化を基本動作として維持する
  • 文字列全般を最新値優先には変更しない
  • 文字送りは最短で2つ目の異なる候補から判定できる
  • 安定状態から文字送りが始まる場合、最初の候補は出力せず保留する
  • 文字送りと判断した後は、段階的に前進した最新候補へ追従する
  • 文字送り中の後退や候補反復によって表示が揺れない
  • 2パターンおよび数パターンの周期的な認識揺れを文字送りと誤判定しない
  • 静止状態間の瞬時切替は現在の継続確認方式を維持する
  • 文字送り完了後は通常の安定状態へ戻る
  • 文字送り中に文字列と矩形が毎フレーム変化しても、同じ論理トラックを維持し、矩形が初期状態へ固定されない
  • 中央揃えまたは右揃えで位置と幅が同時に変化しても、不要なトラックの分裂・重複が発生しない
  • 文字送り中の改行、MultiLine 変更、分割・統合でも論理トラックと文字列の進行を維持する
  • 文字送り対応によって既存の領域追跡、分割・統合、欠落保持を損なわない
  • ユーザー向けのモードや設定を追加しない
  • 既存の追跡テストと追加シナリオがすべて成功する

完了条件

現在の認識揺れ抑制を維持しながら、文字送りだけが最初の短い文字列へ固定されず、段階的な構築とそれに伴う矩形・構造の変化へ追従できること。

実装方法、内部状態、判定閾値およびクラス構成は、この方針と受け入れ条件を満たす範囲で実作業時に決定する。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions