提升 GameSentenceMiner OCR 识别准确率:自定义捕获区域与两遍识别系统配置实战
提升 GameSentenceMiner OCR 识别准确率:自定义捕获区域与两遍识别系统配置实战
想让 GameSentenceMiner 在游戏里更准地挖出句子?核心就两件事:为游戏对话框划定自定义 OCR 捕获区域,并把**两遍识别系统(Two-pass OCR)**调对。这篇文章面向新手,用尽量少的时间帮你把识别准确率、速度和去重噪声一次性调到位。
为什么识别率总差一口气?
游戏字幕的 OCR 失败大多来自三个原因:
- 扫描范围太宽——整窗口扫描会把 UI 图标、背景噪点当成文字;
- 文字还在“打字机”式出现——第一遍识别抢跑了半成品文本;
- 引擎选择不当——稳定监视和最终识别用了同一个慢引擎,或者干脆没开两遍流程。
GameSentenceMiner 的 OCR 管线正是为这三个问题设计的:按区域裁剪 → 稳定性引擎先盯住文本 → 主引擎二次精扫。
第一步:确认捕获源正确
画区域之前,先确认 GSM 抓到的画面本身是对的。Text Capture Wizard 会检查你的游戏源(Scene / Executable / Capture Type):
- 预览发黑?尝试 “Switch to Game Capture” 切换捕获类型;
- 每个 OBS Scene 拥有独立的区域文件与振假名灵敏度,不同游戏互不干扰;
- 界面里 “Areas Recommended” 提示表示尚未画区域,整窗扫描——这正是识别率损失的常见起点。
第二步:绘制自定义 OCR 捕获区域
在 OCR 标签页点击 Select OCR Areas,会弹出区域选择器(Area Selector):
工具栏按钮对应快捷键,鼠标/键盘都能完整操作:
| 区域类型 | 用途 | 说明 |
|---|---|---|
| Normal(绿色区域) | 自动 OCR | 持续扫描的游戏对话区 |
| Exclusion | 排除区 | 覆盖不想识别的区域 |
| Secondary(紫色区域) | 菜单 OCR | 供菜单快捷键触发的区域 |
| Black Hole | 黑洞区 | 屏蔽特定干扰 |
几个提升准确率的实用技巧:
- 只框对话框内部,避开角色立绘与按钮,识别噪声会明显下降;
- 选择器支持 Live 模式热重载:拖动区域后 300ms 防抖即生效(见 owocr_area_selector_qt.py 中的
LIVE_SAVE_DEBOUNCE_MS),不用关闭选择器就能观察 OCR 反应; - 支持导入/导出区域 JSON,换游戏分辨率后可快速复用布局;
- 多区域场景可开启实验性 Compact OCR Areas,把多个区域打包去掉透明空隙,再自动映射回原坐标。
常用快捷键(均可在 Hotkeys 面板修改):
| 动作 | 默认快捷键 | 作用 |
|---|---|---|
| Manual(绿区) | Ctrl+Shift+M |
手动跑一次主引擎精扫 |
| Menu(紫区) | Ctrl+Shift+G |
扫描菜单区域 |
| Area Select | Ctrl+Shift+O |
临时框选一次识别 |
| Add Area | Alt+Shift+N |
新增一个区域并立即应用 |
| Whole Window | Ctrl+Shift+W |
全窗口一次性扫描 |
| Pause | Ctrl+Shift+P |
全局暂停扫描(过剧情动画时用) |
第三步:理解两遍识别系统(Two-pass OCR)
两遍识别是默认开启的,这是识别率的关键开关(twoPassOCR 默认 True,见 electron_config.py 中的 get_ocr_two_pass_ocr)。工作流如下:
- **OCR1(稳定性引擎)**按扫描频率持续运行——用快引擎(如 OneOCR)盯住文本是否在变化;
- 当下一帧扫描发现文本稳定不再变化(或文字消失、出现新句子)时,触发第二遍;
- **OCR2(主引擎)**对裁剪后的图像做一次高精度识别,结果才是最终输出(终端里绿色高亮的 “OCR Run 2” 日志)。
触发与去重由一组比较阈值控制,全部位于 gsm_ocr.py:
- Duplicate Match Threshold(%):越高越严格;不同句子被误判为重复时调高;
- Text Change Threshold(%):越低越容易提前触发 OCR2;逐字动画文本可降低;
- Text Comparison Tuning(专家项):Evolving Prefix、Truncation、Subset Coverage 等旋钮专门处理“短句是长句开头”“文字被截断”这类边界情况。
两个关键辅助开关
- Optimize Second Scan:第二遍扫描前把图像裁剪到文本包围盒,显著提速。若某些游戏的特殊文本被裁掉,可关闭它;
- Text Appears Instantly:⚠️ 仅当游戏文本一次性整句出现时才开启。打字机式/逐字动画文本开启它会导致输出非常混乱——这是新手最常见的“越调越差”来源。
进阶调优清单
按“先大后小”的顺序尝试:
- Scan Image Quality(缩放比例):漏掉小字号假名/汉字时调高(50% 快 → 100% 最准但最耗 CPU);
- Furigana Filter:过滤比正文小的字符;真实对话被吃掉时调低或归零,可用 Preview 窗口对着当前游戏选灵敏度;
- Scan Rate:快文本选 Fast/Normal,慢速渐显文本选 Slow;
- OBS Capture Preprocess:灰度 + 自动对比 + 锐化,能改善噪点场景里的字幕识别;
- Ignore “OCR Run 1” Logs:两遍识别下控制台第一遍日志是噪声,勾选后界面只留绿色的 Run 2 结果;
- 仍有个别词总识别错?用 OCR Replacement 规则页做识别后替换修正。
相关源码与文档
- 两遍控制器实现:GameSentenceMiner/ocr/gsm_ocr.py(
TwoPassOCRController、触发与去重逻辑) - 区域选择器 UI:GameSentenceMiner/ocr/owocr_area_selector_qt.py
- 兼容入口(旧导入路径):GameSentenceMiner/ocr/two_pass_ocr.py
- OCR 设置面板组件:electron-src/renderer/src/components/tabs/OCRTab.tsx
- 配置读取:GameSentenceMiner/util/config/electron_config.py
小结
🎯 记住这套组合拳:框对话框 → 绿区 Normal + 紫区 Secondary → 保持两遍识别开启 → 逐字动画文本绝不开 Instantly。按这个顺序调整,绝大多数视觉小说和 RPG 的识别准确率都能稳定提升到可用水平。
登录后查看全文



