本文经 J-Compass 编辑流程调研与事实核查;编辑团队在发布前审核信息来源及准确性。 了解我们的编辑方法 →
本译文仅供参考,以方便阅读。内容以英文版本为准。 阅读英文原文 →
Mokuro:面向日文漫画的 OCR 工具
Mokuro 是一款免费且开源的命令行工具,能够对日文漫画进行光学字符识别(OCR)。12 这使得 Yomitan 等弹窗词典可以直接读取漫画页面中的文字。对于能够借助悬浮词典阅读小说散文、却在图片形式的漫画前受阻的学习者而言,Mokuro 正是那个将扫描版漫画分镜转化为可查词页面的关键工具层。
概述
漫画页面在本质上是光栅图像,即彩色像素网格。对于浏览器来说,对话气泡只是一堆像素,底层没有任何文字可供悬浮词典扫描。Mokuro 弥合了这一鸿沟:它预先识别出每个页面上的日文字符,并在画面之上铺设一层不可见但可被选中的文本层。
Mokuro 的功能
作者将 Mokuro 简明地定义为一款“在浏览器中带有可选中文本阅读日文漫画”的工具,并且“专为希望借助 Yomitan 等弹窗词典阅读日文原版漫画的日语学习者而设计”。2 Mokuro 是开源项目,完全在终端中运行。你可以通过 pip3 安装它,并使用 mokuro 命令运行。12
Mokuro 本身并不直接执行字符识别。它协同调度了两个底层依赖项:负责定位页面文字位置的 comic-text-detector,以及负责读取检测到的文字的 manga-ocr。2
最终生成的实际结果是一个带定位的叠加层。Mokuro 会记录识别出的文本,以及每个对话框或分镜的边界框坐标(即文本区域的位置)。随后,页面就可以在渲染原始图像的同时,在对应位置对齐不可见但可选中的文本。2 所有的识别都在前期离线完成:“所有处理均在离线完成(阅读之前)”。2
对于安装和运行的工具而言,项目出处十分重要。Mokuro 和 manga-ocr 均出自同一作者 kha-white 之手。Mokuro 代码库采用 GPL-3.0 许可证,而 manga-ocr 则采用独立的 Apache-2.0 许可证。14
它在数字化阅读工具链中的定位
Mokuro 是数字化阅读工具链中专门针对漫画的一环。对于基于图像的漫画,它所扮演的角色正如浏览器端电子书阅读器针对 EPUB 小说一样:在原本没有文本的地方呈现可选中的文本,从而让词典层有内容可读。(这一类比旨在阐明其定位,而非功能完全等同。散文端工具和词典本身均在其他专文中讨论。)
它位于词典的上游,两者并非竞争关系。Mokuro 负责生成可选中文本,而悬浮词典负责读取文本。Mokuro 的既定目标正是“与 Yomitan 等弹窗词典搭配使用”。2
处理工作流的运作原理
处理单行本是一次性的准备步骤,在打开漫画阅读之前执行。整个流程从包含页面图像的文件夹出发,经过文字检测与 OCR,最终生成网页阅读器能够打开的 .mokuro 文件。
环境要求与安装
Mokuro 需要“Python 3.10 或更新版本”。2 在安装前,需要注意一点:“由于 PyTorch 依赖项的原因,最新的 Python 发行版可能尚未获得支持”。最新发布的 Python 可能会导致安装失败,因此稍微保守一点的 3.1x 版本是更稳妥的选择。2
安装本身只需一条命令:
pip3 install mokuro
GPU 是可选的。Mokuro 完全可以在 CPU 上运行。代码库说明指出,安装支持 CUDA 的 PyTorch 以启用 GPU 加速这一步“可以跳过”。12 仅使用 CPU 也能正常工作,只是耗时更长,且官方未给出具体的耗时参考数据。
此处列出的命令、参数选项及 Python 版本要求反映了上游代码库的现状。特定版本的行为以引入该行为的发布说明为准。处于活跃开发阶段的工具可能会更改其接口,因此如果存在差异,请以 README 的最新说明为准。2
处理单卷漫画
Mokuro 采用“每卷一个文件夹”的文件布局:你只需将 mokuro 命令指向包含单卷漫画各页图像的目录即可。处理单卷的命令为:
mokuro /path/to/manga/vol1
也可以通过列出多个路径,在一次调用中处理多卷:
mokuro /path/to/manga/vol1 /path/to/manga/vol2 /path/to/manga/vol3
如果各卷存放在同一个父目录下,可以将 Mokuro 直接指向父目录。README 给出的目录结构示例如下:
manga_title/
├─vol1/
├─vol2/
├─vol3/
└─vol4/
然后运行:
mokuro --parent_dir manga_title/
这是针对每卷执行的一次性离线步骤,在阅读前完成:“所有处理均在离线完成(阅读之前)”。2 你只需支付一次处理时间成本。之后便可以随时反复阅读,无需再进行额外的 OCR 处理。
Mokuro 的输出内容
官方持续维护的标准输出格式为 .mokuro 文件。该格式“在 0.2.0 版本中引入”,并且“仅包含 OCR 结果与元数据”。换句话说,它将识别出的文本及其位置信息与漫画图像本身分离开来。2
为了保持向后兼容,Mokuro 仍会生成旧版的 HTML 文件,但 README 将该方式标记为旧版特性,并指出其“将不再进行进一步开发”。2 新搭建的流程应遵循 .mokuro 搭配网页阅读器的路线。HTML 输出主要是为照顾既有旧环境,而非用于新配置。
以下是引自 README 选项列表的常用参数:2
| 参数选项 | 功能说明 |
|---|---|
--force_cpu | “即使 CUDA 可用,也强制使用 CPU。” |
--disable_ocr | “生成不含 OCR 结果的 mokuro/HTML 文件。” |
--disable_html | “禁用旧版 HTML 输出。” |
阅读体验
单卷处理完成后,便可在浏览器中进行阅读。正是这层可选中的叠加层,使得在画面上进行常规文本划选以及悬浮词典取词成为可能。
打开已处理的漫画
对于主流推荐路径,你只需在 reader.mokuro.app 的网页阅读器中,将 .mokuro 文件与漫画图像一同载入。25 README 对此表述得十分直接:“在网页阅读器中将 .mokuro 文件与漫画图像一同加载”。2
旧版 HTML 路径的打开方式有所不同。较早的 HTML 输出可以直接在浏览器中双击打开。根据 README 说明:“你可以将生成的 HTML 文件连同漫画图像传输到另一台设备(如手机)并在那里阅读”。2
无论哪种方式,识别出的文本都会以可选中文本叠加层的形式覆盖在每个分镜或气泡之上。这使得分镜导航与常规的浏览器文本选取均可在图像上正常工作。2
搭配 Yomitan 进行悬浮查词
这正是该方案价值的体现。随着可选中文本覆盖在页面上,悬浮词典就能像扫描普通网页文本一样对其进行解析。只需将鼠标悬停在生词上,读音、释义与音调就会立即弹出。2 “Yomitan (Yomichan):悬浮取词词典工作流”一文对该词典层进行了详尽介绍。
两者的依赖关系是单向的。Mokuro 仅提供可选中的文本,本身不附带任何释义,因此实际的查词功能完全来自于读取这些文本的 Yomitan 或类似词典。2
从查词到导入 Anki
在漫画叠加层上查到生词后,你可以通过词典的制卡流程直接将其摘录为 Anki 卡片,这与在普通文本中查词完全一致。一键制卡的技术细节请参见“Yomitan + Anki:一键制卡配置”。从阅读中构建牌组的完整方法体系,请参阅“例句摘录:从阅读材料中构建专属日语 Anki 牌组”。
Mokuro 为该工作流带来的最大提升是拓展了输入语料的范围。此前因为只是纯图像而无法摘录的漫画,在叠加层就位后,便成了源源不断的卡片制作来源。
注意事项
“允许访问文件网址”设置陷阱
旧版离线本地 HTML 路径在 Chromium 内核浏览器中有一个需要注意的地方。当从 file:// 地址打开 Mokuro HTML 文件时,Yomitan 扩展在获得扩展的“允许访问文件网址”权限之前,是无法扫描该页面的。6 Yomitan 官方文档在“扫描本地文件与 PDF”一节中明确提出了该要求:“为了在 Chrome 中对本地文件使用 Yomitan,必须首先在扩展页面中勾选 Yomitan 的 允许访问文件网址 复选框”。6
托管在 reader.mokuro.app 的网页阅读器则完全避开了这个问题。由于它通过 https:// 而非 file:// 提供服务,因此根本不会涉及文件网址权限的开关。256 具体的权限勾选步骤已记录在“Yomitan (Yomichan):悬浮取词词典工作流”中。如果你走的是本地 HTML 路径,请按那里的说明操作。
OCR 识别效果优异,但并非完美
manga-ocr 虽经过专门训练,但作者也坦陈了其明确的局限性。偶尔出现识别错误是正常现象,并不代表程序出错。关于文本长度:“OCR 支持多行文本,但文本越长,出现错误的概率就越大”。3 关于手写体:“它很可能无法处理手写文本”。3
在空白区域还会出现一种特性:“该模型总是试图识别图像上的某些文字,即使完全没有文字……它甚至可能会‘幻想’出一些看起来很逼真的句子”。作者指出,这在正常使用中通常不会造成实际困扰。3
面对这些情况,依靠叠加层本身的设计即可轻松应对,无需额外变通方案。因为识别出的文本是可选中的,遇到识别错误的生词时,读者可以直接重新划选或手动查词。上游代码库并未声称具体的准确率百分比,因此本文亦不做主观断言。
适合阅读的材料选择
Mokuro 能让生肉漫画变得可查词,但它不能替你挑选漫画,也不能对其难度进行分级。它是一款处理与阅读工具,而非推荐引擎。12 如需选择符合当前水平的漫画作品,请参阅“面向日语学习者的漫画分级指南”。
参见
- Yomitan (Yomichan):悬浮取词词典工作流
- Yomitan + Anki:一键制卡配置
- ttu-reader:浏览器端日语电子书阅读器
- ASBPlayer:面向动漫的字幕例句摘录
- 面向日语学习者的漫画分级指南
- 例句摘录:从阅读材料中构建专属日语 Anki 牌组