Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Oct 12, 2025

特定矩形優先OCR機能の実装 - スケール/回転/クロップタイミング修正

✅ 実装完了した機能

修正内容(@freesiaのフィードバックに基づく) ✨

問題: スケール、回転、クロップのタイミングが不適切

  • スケールした画像から矩形を切り出していた
  • 座標変換が二重に適用されていた(スケール済み座標にToTextRectでさらに除算)

修正後: 適切な処理順序

  1. 元の画像サイズで絶対座標を計算
  2. 元の画像から矩形を切り出し(クロップが先)
  3. 切り出した画像をスケーリング
  4. スケーリングされた切り出し画像をOCR
  5. 座標をスケール変換して元の画像座標系に変換
  6. 切り出し位置分オフセット

修正されたOCRモジュール

  • ✅ WindowsMediaOcr
  • ✅ TesseractOcr
  • ✅ OneOcr

🎯 正しい処理フロー

元のビットマップ(未スケール)
  ↓
優先矩形が設定されている?
  ├─ YES → 各優先矩形について
  │         ├─ 元の画像サイズで絶対座標計算
  │         ├─ 元の画像から矩形を切り出し(クロップ)
  │         ├─ 切り出した画像をスケーリング
  │         ├─ OCR実行 → スケール済みクロップ空間の座標
  │         ├─ ToTextRect適用 → クロップ空間の座標に変換
  │         └─ オフセット適用 → 元の画像座標に変換
  │
  └─ NO → 通常の全画面OCR
         ├─ 画像をスケーリング
         ├─ OCR実行
         └─ ToTextRect適用 → 元の画像座標に変換
  ↓
翻訳処理
  ↓
オーバーレイ表示

📝 技術的な修正内容

WindowsMediaOcr & TesseractOcr

// 修正前(誤り):
// 1. 画像全体をスケール
// 2. スケール済み画像から切り出し
// 3. OCR → スケール済み座標
// 4. オフセット → まだスケール済み
// 5. ToTextRect(r, scale) → 二重除算で誤り

// 修正後(正しい):
// 1. 元の画像から切り出し
// 2. 切り出した画像をスケール
// 3. OCR → スケール済みクロップ座標
// 4. ToTextRect(r, scale) → クロップ座標に変換
// 5. オフセット → 元の画像座標

OneOcr

// OneOcrはToTextRectでスケール除算しないため、
// 明示的にスケール除算とオフセットを適用
new TextRect(
    text.SourceText,
    text.X / this.scale + absRect.X,  // スケール除算 + オフセット
    text.Y / this.scale + absRect.Y,
    text.Width / this.scale,
    text.Height / this.scale,
    text.FontSize / this.scale,
    ...
)

✨ 改善点

  1. 正確な座標変換: スケールとクロップの順序を修正
  2. 回転の考慮: WindowsMediaOcrは回転角度を適切に処理
  3. 一貫性: すべてのOCRモジュールで同じ処理フローを実現

🚀 使用方法(変更なし)

{
  "Targets": {
    "MyGame": {
      "PluginParams": {
        "BasicOcrParam": {
          "PriorityRects": [
            {
              "X": 0.15,
              "Y": 0.8,
              "Width": 0.7,
              "Height": 0.15,
              "Keyword": "字幕"
            }
          ]
        }
      }
    }
  }
}
Original prompt

This section details on the original issue you should resolve

<issue_title>特定の矩形を優先的にテキスト認識する機能の検討</issue_title>
<issue_description>* OCRの設定で特定範囲の矩形を登録しておいて、その矩形も追加でOCRする

  • 全体のOCRと特定矩形のOCRの結果が被った場合は、特定矩形を優先する
  • 矩形を複数登録できるようにしておいて、矩形の順序で優先度を制御する
    • 矩形リストの上下移動をUIでサポートする必要あり
  • 矩形にキーワードをつけておいて、キーワードから翻訳時のコンテキストを紐づける
  • 矩形登録時には対象ウィンドウの前面に矩形選択ウィンドウを表示して、ドラッグで矩形選択できるようにしたい</issue_description>

Comments on the Issue (you are @copilot in this section)

Fixes #286


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 5 commits October 12, 2025 17:53
Co-authored-by: Freeesia <9002657+Freeesia@users.noreply.github.com>
Co-authored-by: Freeesia <9002657+Freeesia@users.noreply.github.com>
Co-authored-by: Freeesia <9002657+Freeesia@users.noreply.github.com>
Co-authored-by: Freeesia <9002657+Freeesia@users.noreply.github.com>
Co-authored-by: Freeesia <9002657+Freeesia@users.noreply.github.com>
Copilot AI changed the title [WIP] Add functionality for prioritizing specific rectangles in OCR 特定の矩形を優先的にテキスト認識する機能の実装 (Implement Priority Rectangle OCR Feature) Oct 12, 2025
Copilot AI requested a review from Freeesia October 12, 2025 18:06
@Freeesia
Copy link
Owner

@copilot
フィルター処理ではなく、各OCRモジュール内に実装して。
矩形が指定されているときは、全体での認識は行わずに指定された矩形のみ認識して。

- Remove PriorityRectFilter approach
- Add PriorityRectUtility helper class
- Update WindowsMediaOcr, TesseractOcr, and OneOcr to handle priority rects internally
- When priority rects are specified, skip full-screen OCR and only recognize specified rectangles
- Each OCR module now has RecognizePriorityRectsAsync, RecognizeFullScreenAsync, and RecognizeRegionAsync methods

Co-authored-by: Freeesia <9002657+Freeesia@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Oct 12, 2025

@copilot
フィルター処理ではなく、各OCRモジュール内に実装して。
矩形が指定されているときは、全体での認識は行わずに指定された矩形のみ認識�...

フィルター処理からOCRモジュール内実装に変更しました。

変更内容:

  • PriorityRectFilterを削除
  • WindowsMediaOcr、TesseractOcr、OneOcrの各モジュール内で優先矩形を処理
  • 優先矩形が指定されている場合は全体認識をスキップし、指定された矩形のみを認識

コミット: c7e...

Co-authored-by: Freeesia <9002657+Freeesia@users.noreply.github.com>
@Freeesia
Copy link
Owner

@copilot
スケールを戻すタイミングがおかしいので、修正して。
スケール、回転、クロップのタイミングを適切に処理して。

- Crop from original bitmap first, then scale the cropped region
- This ensures coordinates are properly transformed from scaled crop space to original bitmap space
- Fixed for WindowsMediaOcr, TesseractOcr, and OneOcr
- Removed double-scaling issue where ToTextRect was applied incorrectly

Co-authored-by: Freeesia <9002657+Freeesia@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Oct 26, 2025

@copilot
スケールを戻すタイミングがおかしいので、修正して。
スケール、回転、クロップのタイミングを適切に処理して。

スケール、回転、クロップのタイミングを修正しました。

修正内容:

  • 元の画像から矩形を切り出し → スケーリング → OCR の順序に変更
  • スケール済み座標を適切に元の画像座標系に変換
  • WindowsMediaOcr、TesseractOcr、OneOcr全てで修正

コミット: (最新コミット)

…ture

# Conflicts:
#	WindowTranslator.Abstractions/Properties/Resources.resx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

特定の矩形を優先的にテキスト認識する機能の検討

2 participants