Skip to content

新しいトラッキング方式のパラメータを調整可能にする #669

Description

@Freeesia

方針

OcrTextTracker の多数の内部パラメータは直接公開せず、ユーザーには挙動を表す 3設定だけを公開する。
設定は TargetSettings に持たせ、アプリごとに調整可能にする。

1. 位置・サイズの安定性

位置・サイズなどの OCR 矩形の揺れをどの程度抑制するか。

対象:

  • X, Y
  • Width, Height
  • FontSize
  • Angle
  • MultiLine

UI:

  • 最小: 1(追従重視)
  • 最大: 5(安定重視)
  • 既定: 3(現在相当)
  • step: 1

内部マッピング案:

レベル Geometry 確定回数 Micro Geometry 確定回数
1 1 1
2 1 2
3 2 4
4 3 6
5 4 8

レベル3で現在の StructureConfirmationFrames = 2 / MicroGeometryConfirmationFrames = 4 相当を維持する。

特定のアプリで位置と FontSize が細かく周期的に振動するケースがあり、既存のトラッキングである程度は抑制できているが完全には抑えられていない。このケースではこの設定だけを4または5へ上げられるようにする。

大きな移動を即時反映する既存処理は維持し、安定性を上げても明らかな移動まで一律に待たせない。

2. 認識結果の安定性

OCR 文字列や split / merge / restore の一時的な変動をどの程度抑制するか。

UI:

  • 最小: 1(追従重視)
  • 最大: 5(安定重視)
  • 既定: 3(現在相当)
  • step: 1

内部マッピング案:

レベル Structure 確定回数 MinimumTextVotes TextVoteThreshold TextVoteHistorySize
1 1 1 1.0 3
2 1 2 1.25 4
3 2 2 1.5 5
4 3 3 2.0 6
5 4 4 2.5 8

TextVoteDecay = 0.75 は固定する。
レベル3で現在の挙動を維持する。

表示位置だけを安定させたい場合に、文字列や構造変更の追従速度まで遅くならないよう、位置・サイズの安定性とは分離する。

3. 一時消失の保持

OCR が一時的に対象を認識できなかった場合に、表示中の既存トラックを何回の欠落まで保持するか。

UI:

  • 最小: 0
  • 最大: 7
  • 既定: 3(現在相当)
  • step: 1

値は MaxMissedFrames に直接対応させる。

  • 0: 最初の欠落で除去
  • 3: 現在相当
  • 7: 7回の連続欠落まで保持

OCR 実行間隔は一定とは限らないため、秒数ではなく欠落回数として扱う。

dormantRetention はこの設定には連動させず、現在の5秒を固定する。dormant track は表示保持ではなく split / merge 後の identity 復元に使われるため、ユーザーの「一時消失の保持」とは責務を分ける。

ユーザー設定に連動させないもの

以下のようなトラック同一性・候補選択の正しさに関わる値は固定する。

  • MinimumAssignmentScore
  • StrongOneToOneScore
  • TrackingDistanceGate
  • 文字列類似度の判定閾値
  • overlap / size / font / angle の判定閾値
  • assignment score の重み
  • Geometry をノイズと判定する閾値
  • motion prediction の係数
  • dormantRetention

これらを緩めると追従性ではなく誤対応率や identity 判定が変わるため、ユーザーの好みを表す設定とは分離する。

内部構造の整理

現在の StructureConfirmationFrames は通常の Geometry 更新と merge / restore の確定の両方に使われているため、設定追加時に責務を分離する。

少なくとも内部では以下を独立させる。

  • Geometry 変更の確定回数
  • Micro Geometry 変更の確定回数
  • 構造変更の確定回数

これらは直接公開せず、上記レベルから明示的なプロファイルとして導出する。

補間式ではなくレベルごとの明示的なマッピングを使用し、特定レベルだけ個別にチューニングできるようにする。

MaxMissedFrames と assignment recency の分離

現在 MaxMissedFrames は track の保持だけでなく assignment score の recency 計算にも利用されている。

一時消失の保持を変更しただけで assignment score まで変化しないよう、recency の基準値を別の固定パラメータへ分離する。
既定値では現在の MaxMissedFrames + 1 = 4 と同等になるようにする。

既定値・互換性

  • 位置・サイズの安定性: 3
  • 認識結果の安定性: 3
  • 一時消失の保持: 3

既定設定では現在の OcrTextTracker と同等の挙動を維持する。
既存設定ファイルに項目がない場合も上記既定値を使用する。

実装時に確認すること

  • 位置・FontSize が周期的に振動する既知ケースで、位置・サイズの安定性 4 / 5 の効果を確認する
  • レベル3で既存の accuracy test の挙動が変わらないことを確認する
  • 位置・サイズの安定性だけを変更しても文字列の確定速度が変わらないことを確認する
  • 認識結果の安定性だけを変更しても Geometry の確定速度が変わらないことを確認する
  • 一時消失の保持を変更しても assignment recency の計算基準が変わらないことを確認する

調整余地

以下の値は実際の振動ケースと既存テストを基準に実装時に最終調整する。

  • 位置・サイズ安定性レベル4 / 5の 3/6, 4/8
  • 認識結果安定性レベル4 / 5の投票条件
  • 一時消失の保持の最大値 7

UI値を百分率へ正規化する必要はなく、設定ごとに意味のある min / max を使用する。

受け入れ条件

  • ユーザーに公開するトラッキング設定は3項目に限定する
  • 位置・サイズの揺れだけを独立して調整できる
  • OCR文字列・split / merge / restore の安定性を独立して調整できる
  • 一時的な OCR 欠落時の保持回数を独立して調整できる
  • トラック同一性判定に関わる閾値はユーザー設定から分離する
  • MaxMissedFrames と assignment recency の責務を分離する
  • 既定値では現在と同等の挙動を維持する
  • アプリごとに設定できる

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