Skip to content

OcrTextTrackerで文字列・矩形・構造が同時に変化する複合シナリオを保証する #652

Description

@Freeesia

概要

PR #648OcrTextTracker は、文字列、位置、サイズ、MultiLine、分割・統合をそれぞれ追跡・安定化する。

個別の変化については既存テストで確認されているが、文字列変更と矩形または構造の変更が同じタイミングで発生する複合ケースは、明示的な保証が不足している。

通常の画面遷移やレイアウト変更でも発生する複合変化について、同じ論理トラックを維持し、重複表示や古い断片を残さないことを確認する。

方針

  • PR OCR表示安定化をバッファ方式から追跡方式(OcrTextTracker)へ置き換え #648 の既存の追跡・安定化方針を維持する
  • 文字列変更と矩形変更が同時に発生しても、既存トラックとの対応を維持する
  • 文字列変更と分割・統合が同時に発生しても、古いトラックと新しいトラックを重複させない
  • 複合変化が継続した場合は、既存の確定条件に従って最終状態へ収束する
  • 複合変化が一時的な場合は、既存の安定表示を維持する
  • 現在の実装で条件を満たさない場合は、既存の追跡機能を損なわない範囲で修正する

確認するシナリオ

文字列・X座標・幅の同時変更

中央揃えまたは右揃えのテキストで、内容変更に伴って位置と幅が同時に変化する。

文字列: Menu → Settings Menu
X:      300  → 250
Width:  100  → 200
  • 同じ論理トラックを維持する
  • 古い位置と新しい位置に重複表示を作らない
  • 変更が継続した場合は新しい文字列と矩形へ収束する

文字列・高さ・MultiLineの同時変更

内容変更に伴って改行が発生し、高さと MultiLine が同時に変化する。

文字列:   Menu → Open Settings And Configure
Height:   30   → 60
MultiLine: false → true
  • 同じ論理トラックを維持する
  • 変更確認中に別トラックを作らない
  • 変更が継続した場合は新しい文字列とレイアウトへ収束する

文字列変更と分割の同時発生

前フレームでは1領域だったテキストが、内容変更と同時に複数領域として認識される。

  • 既存の論理トラックとの関係を維持する
  • 古い全体領域と新しい断片を重複表示しない
  • 一時的な分割では既存表示を維持する
  • 分割が継続した場合は既存の構造確定方針に従って収束する

文字列変更と統合の同時発生

前フレームでは複数領域だったテキストが、内容変更と同時に1領域として認識される。

  • 既存トラック群との関係を維持する
  • 古い断片と新しい統合領域を重複表示しない
  • 一時的な統合では既存表示を維持する
  • 統合が継続した場合は既存の構造確定方針に従って収束する

維持する動作

  • 投票による文字列安定化
  • 位置、サイズ、フォントサイズ、角度、MultiLineの安定化
  • 1対1対応の全体最適化
  • 分割・統合の継続確認
  • 一時未認識時の表示保持
  • トラックの移動予測
  • 同一文字列が複数箇所に存在する場合の対応付け
  • 通常のOCR処理時間に対して支配的にならない性能

対象外

  • 文字送り専用の判定
  • 変更途中の文字列を表示すること
  • Busy表示または翻訳可否の制御
  • 文字列の投票条件や構造確定条件の全面的な変更
  • ユーザー設定の追加

受け入れ条件

  • 文字列、X座標、幅が同時に変化しても同じ論理トラックを維持する
  • 文字列、高さ、MultiLineが同時に変化しても同じ論理トラックを維持する
  • 文字列変更と分割が同時に発生しても不要な重複トラックを作らない
  • 文字列変更と統合が同時に発生しても不要な重複トラックを作らない
  • 一時的な複合変化では既存の安定表示を維持する
  • 継続する複合変化は最終状態へ収束する
  • 元の構造へ戻った場合に古い断片や統合領域が残らない
  • 既存の追跡テストがすべて成功する
  • 追加シナリオが自動テストで確認される

完了条件

文字列と矩形または構造が同時に変化する場合でも、OcrTextTracker が同じ論理領域を継続して追跡し、重複表示や古いトラックを残さず最終状態へ収束すること。

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