
LunaTranslator 在 HOOK 模式下临时使用 OCR一次识别、无缝回流的实战指南【免费下载链接】LunaTranslator视觉小说翻译器 / Visual Novel Translator项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslatorHOOK文本钩子模式是 LunaTranslator 从游戏中提取文本的主要方式但当游戏菜单、选择肢等界面文字无法被 Hook 捕获时许多玩家会陷入切到 OCR 模式识别、再切回 HOOK 模式的繁琐循环。本文讲解 LunaTranslator 内置的进行一次 OCR与再次进行 OCR两个工具按钮及对应快捷键说明它们如何在 HOOK 模式下完成单次 OCR 识别后无缝回流到 Hook 自动提取并结合源码剖析其底层调用链与配置方式帮助你彻底告别模式切换的烦恼。为什么 HOOK 模式需要临时 OCRHOOK 模式通过注入文本钩子从游戏内存中直接拦截文本输出速度快、翻译连贯是视觉小说翻译的主流方式。但它并非万能游戏菜单、系统选项、选择肢选项列表、文本框之外的 UI 提示等文字往往以贴图或非标准文本形式渲染无法被钩子捕获此时屏幕上会缺少可翻译的文本来源。面对这类缺口直观的思路是切换到 OCR光学字符识别模式框选区域识别后再切回 HOOK 模式。但频繁的模式切换既打断翻译节奏也需要重新配置。LunaTranslator 早已为此提供了内置方案进行一次 OCRPerform OCR Once按钮与快捷键在 HOOK 模式下即可完成识别一次、立即回流的闭环操作。进行一次 OCR单次识别后无缝回到 HOOK按钮与快捷键工具按钮进行一次 OCR按钮默认图标为裁剪/框选样式Font Awesome 的fa-crop位于主界面工具栏中。快捷键默认绑定为_26键名显示为进行一次 OCR可在快捷键设置界面查看或修改。该按钮默认处于激活状态。根据默认配置 config.jsonocr_once: { use: true, tip: 进行一次OCR, icon: fa.crop, align: 2 }完整工作流程点击按钮后LunaTranslator 会弹出与 OCR 模式完全一致的范围选择框你可以直接用鼠标框选出屏幕上需要识别的区域例如某个菜单选项或选择肢。选定范围后程序只执行一次OCR 识别随后自动退出 OCR 流程无缝回到 HOOK 模式的自动文本提取状态不会中断后续的 Hook 翻译。从源码看这一流程的调用链清晰完整translatorUI.pydef ocr_once_function(self): def ocroncefunction(rect, imgNone): self.ocr_once_follow_rect rect self.ocr_do_function(rect, img) rangeselct_function(ocroncefunction, hideshowTrue)关键步骤逐一对应框选范围rangeselct_function见 rangeselect.py创建原生范围选择窗口hideshowTrue表示在选择期间会临时隐藏翻译窗口与 OCR 范围框move(-9999, -9999)并调用pause_recognition()暂停文本识别避免干扰选区。记录选区回调将选区rect保存到ocr_once_follow_rect供再次进行 OCR复用。执行单次识别ocr_do_functiontranslatorUI.py先通过imageCut(0, rect)截取对应屏幕区域图像再调用ocr_run(img)执行一次 OCR结果经textgetmethod(result, is_auto_runFalse)送入翻译流程——注意is_auto_runFalse意味着这次识别只做一次、不会进入 Hook 的循环自动识别。也就是说进行一次 OCR的本质是借 OCR 引擎完成一次静态识别然后把结果交给现有翻译管线而文本源仍然保持 HOOK 模式不动。这也正是它能识别完自动回流的原因识别过程是临时、一次性、旁路式的不改变当前文本源状态。常见误区图标雷同导致的误用值得特别提醒的是进行一次 OCR按钮与 OCR 模式下选取识别范围按钮selectocrrange同样使用fa.crop图标默认图标完全相同。这一设计导致不少本打算使用 OCR 的玩家误以为它就是 OCR 模式按钮在 HOOK 模式下点击该按钮、框选范围后并不会像 OCR 模式那样持续自动翻译只会识别一次。真正的 OCR 模式按钮如selectocrrange、hideocrrange带有belong: [ocr]归属标记只有在切换到 OCR 模式后才会在工具栏显示由buttondisplaychecker依据sourcestatus2中的文本源状态动态判断见 translatorUI.py。因此请先确认当前是否处于 HOOK 模式若在 HOOK 模式下看到fa-crop图标按钮它执行的是单次 OCR若希望持续 OCR 翻译请先切换文本源到 OCR 模式届时才会出现完整的 OCR 模式工具栏。再次进行 OCR固定位置选择肢的重复识别对于固定位置的选择肢或菜单每次出现位置不变反复框选区域显然低效。LunaTranslator 为此提供了再次进行 OCR能力工具按钮再次进行 OCR按钮默认图标为旋转/刷新样式fa.spinner。快捷键默认绑定为_26_1键名显示为再次进行 OCR。该按钮会直接复用上一次进行一次 OCR时保存的选区ocr_once_follow_rect无需再次框选即可再执行一次 OCR# hotkey.py 中 _26_1 的绑定 lambda: gobject.base.translation_ui.ocr_do_function( gobject.base.translation_ui.ocr_once_follow_rect )从默认配置可以看到该按钮默认关闭config.jsonocr_once_follow: { use: false, tip: 再次进行OCR, icon: fa.spinner, align: 2 }如需使用可在工具栏配置中将其开启或直接使用对应快捷键。典型使用场景是游戏每进入一次选择肢都出现在同一位置第一次用进行一次 OCR框选后后续每次只需按一次再次进行 OCR快捷键即可用上次的选区快速识别当前选项。快捷键与配置管理两个功能对应的快捷键条目为_26进行一次 OCR与_26_1再次进行 OCR在快捷键分组中归属于OCR组见 hotkey.py[OCR, [_13, _14, _14_1, _26, _26_1, 46, 47, 48, 49]],内置快捷键名称与默认按键值可在 config.json 中查看若要修改默认按键请在程序快捷键设置界面中重新录制。按钮的显隐与图标、提示文字则由toolbutton.buttons配置控制上文两个配置片段即来源于此。如果希望自定义更复杂的触发逻辑LunaTranslator 还支持自定义快捷键模板myhotkeys/{name}.py模板见 template/hotkey.py可在其中调用translation_ui.ocr_once_signal.emit或ocr_do_function实现同样的单次识别能力。选区外观与精度参数框选范围时的一些视觉与精度参数同样来自 OCR 相关配置rangeselect.pyocrselectalpha选区遮罩透明度默认0.3ocrrangecolor选区边框颜色默认#000000ocrrangewidth选区边框宽度默认1。这些参数可在设置界面调整以获得更清晰的框选视觉反馈。总结能力按钮快捷键说明进行一次 OCRfa.crop默认开启_26框选区域后执行一次 OCR自动回流 HOOK 模式再次进行 OCRfa.spinner默认关闭_26_1复用上次选区再执行一次 OCR适合固定位置选择肢使用要点HOOK 模式下遇到菜单、选择肢等无法 Hook 的文字时直接用进行一次 OCR框选即可识别一次后自动回到 Hook 自动提取无需切换模式。牢记fa.crop图标在 HOOK 模式与 OCR 模式下含义不同HOOK 模式下它是单次识别OCR 模式下的持续识别按钮只在切换文本源后才会出现。固定位置的选择肢配合再次进行 OCR快捷键可做到框选一次、反复识别。相关源码与文档索引中文版使用指南、英文版使用指南、主界面实现、快捷键绑定、默认配置、范围选择实现。【免费下载链接】LunaTranslator视觉小说翻译器 / Visual Novel Translator项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考