## 背景 #742 で、文字列の確定を経過時間で判定するようにした。候補が変わり続ける場合は、`TextChangeTimeout`(既定1.2秒)を過ぎた時点の観測を確定する。 ## 問題 - `OcrTextTracker.TextTrack.UpdateText` は、タイムアウト時に出現頻度を考慮せず、その時点の観測(`current`)を確定する。 - 確定済みの文字列に対して種類の異なる一時的な誤認識が続くと、タイムアウト時の誤認識が確定する。例: `Stable` に対して `Stab1e`・`StabIe`・`Stab|e`・`Stab!e` が500ms間隔で続くと、2秒の時点で `Stab!e` が確定する。 - 候補がばらつく場合も、多数派ではなくタイムアウト時の観測が確定する。例: 安定度4で `PanelA`・`PanelB`・`PanelA`・`PanelC` と続くと `PanelC` が確定する。 ## 失敗しているテスト - `OcrTextTrackerAccuracyTests.DistinctTransientTextErrorsDoNotReplaceConfirmedTextBeforeTheHistoryLimit` - `OcrTextTrackerSettingsTests.ScatteredTextVotesNeedEnoughRecentWeight(level: 4, pendingFrames: 5)` - `OcrTextTrackerSettingsTests.ScatteredTextVotesNeedEnoughRecentWeight(level: 5, pendingFrames: 6)` ## 対応方針案 - タイムアウト時は、直近の観測で出現頻度・重みが最も高い候補を確定する。確定済みの文字列が候補の中で優勢なら維持する。 - 同じ観測の再処理を候補の重みに数えない(#757)。 ## 完了条件 - 一時的な誤認識が続いても、多数派でない候補が確定しない。 - 文字列が実際に変わり続ける場合は、従来どおり最新の文字列へ追従する。 ## 関連 - #742 - #757 - #744(追跡精度全般)
Activity