yomitoku
专精日语文档图像分析的 AI OCR 工具包,支持竖排文字识别、版面布局分析和表格结构解析
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
专精日语文档图像分析的 AI OCR 工具包,支持竖排文字识别、版面布局分析和表格结构解析
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你手上有一份1950年代的日语报纸扫描件,或者一份竖排繁体的明治时期文献,里面密密麻麻的文字和表格靠人工录入需要几天甚至几周。这类文档的识别难度远高于现代印刷品——不仅因为图像质量参差不齐,更因为日文特有的竖排文字、复杂的表意/表音字符体系、以及与现代罗马字完全不同的排版规则。YomiToku 正是为解决这一难题而生的开源工具。

图1:YomiToku 布局分析效果图——蓝框为段落/文字组区域,红箭头为阅读顺序估算结果
由日本开发者 Kotaro Kinoshita 创建并开源(项目地址:kotaro-kinoshita/yomitoku),YomiToku 是一款专精日语文档图像分析的 Python 包,集成了 OCR 文字识别、版面布局分析、表格结构解析和阅读顺序估算四大核心能力,目前在 GitHub 获得约 1500 颗星。
通用 OCR 工具在处理日文时会遇到几个拦路虎:
字符集规模巨大:日语包含超过 7000 个常用汉字(kanji),加上平假名、片假名、罗马字、符号,字符集远比英语复杂。通用模型的日文字符识别精度往往不如专门训练的版本。
排版方向多样:日语文档同时存在横排和竖排两种文本方向,且一张纸内可能混合出现。竖排文字的阅读顺序(从右到左)与横排相反,算法需要正确判断每个文字区域的方向。
表意/表音字符歧义:同一个词可以用汉字、平假名或片假名书写(如「きかん」可以写成「期間」「器官」「季刊」),这对基于上下文理解的 AI 模型要求更高。
YomiToku 的解决方案是为每一种分析任务训练独立的深度学习模型,全部针对日语文档数据集优化,从而在这些难点上取得了显著优于通用方案的效果。
YomiToku 的处理流程由五个串联模块组成,每个模块对应一个专门的 AI 模型或算法:
① 页面旋转检测(RotateDetector):可选模块,用于自动检测并修正扫描件的歪斜和倒置。这个步骤虽然不是核心,但在处理历史档案扫描件时非常有用。
② 文字检测(TextDetector):基于 DBNet+ 算法,在图像中定位文字区域,输出每个文字块的四角坐标。DBNet 是近年来 OCR 领域的主流检测方案,以对弯曲/倾斜文字的鲁棒性著称。
③ 文字识别(TextRecognizer):基于 PARSeq(Permutation autoregressive sequence models)算法,将检测到的文字区域图像转换为可读文本。PARSeq 是视觉 Transformer 架构的代表,专为场景文字识别设计。模型支持 7000+ 日文字符,同时兼容英文。
④ 布局分析(LayoutAnalyzer):由两个子模块构成:
⑤ 阅读顺序估算(ReadingOrder):基于 DFS(图深度优先搜索)算法,根据版面布局和文本方向推断合理的阅读顺序。对于混合横排/竖排的复杂版面,这个模块的作用至关重要——它决定了导出结果中文字的组织逻辑是否与原始文档一致。
整个处理流水线由 DocumentAnalyzer 类统一编排,内部使用 ThreadPoolExecutor 实现各模块的并发执行,显著提升处理效率。
YomiToku 的代码架构体现了几个值得关注的工程设计:
配置驱动模型加载:每个分析模块(文字检测、文字识别、布局解析等)都对应一个 YAML 配置文件,定义模型架构参数(RTDETRv2 的层数/通道数/注意力头数等)、HuggingFace Hub 仓库地址、以及后处理阈值。所有模型首次调用时自动从 HuggingFace Hub 下载,无需手动管理权重文件。配置可以被子类覆盖,支持同一架构接入不同权重。
PyTorch + ONNX 双推理引擎:所有模型同时支持 PyTorch 原生推理和 ONNX 运行时推理。通过 infer_onnx=True 参数切换。ONNX 模式首次运行时会自动将 PyTorch 模型转换为 ONNX 并缓存到本地磁盘,兼顾灵活性与性能。
Pydantic 输出验证:每个分析模块的输出都是 Pydantic 模型实例,内置 .to_json()、.to_html()、.to_csv()、.to_markdown() 方法。这种设计确保了输出格式的一致性,也为后续扩展提供了便利。
Observer 装饰器:通过 observer 装饰器在 BaseModule.__call__ 上注入计时和错误日志,实现零侵入的性能监控。
模块化设计:OCR、布局分析等模块均可独立使用,不一定要走完整的 DocumentAnalyzer 流水线。例如可以直接调用 OCR 类做纯文字识别,不需要版面分析能力。
分析完成后,YomiToku 支持多种导出格式:
YomiToku 的安装极为简单:
pip install yomitoku
要求 Python 3.10-3.13,以及 CUDA 11.3+(GPU 推理,VRAM >= 8GB)。也可选择纯 CPU 推理模式(v0.10.1+ 新增了 CPU 优化模型)。
系统依赖(Ubuntu):
sudo apt install libopencv-dev poppler-utils
使用 Python 代码调用的最简示例:
from yomitoku import DocumentAnalyzer
analyzer = DocumentAnalyzer()
result = analyzer("input.jpg")
result.to_markdown("output.md")
result.to_json("output.json")
result.to_html("output.html")
同时也提供 CLI 命令行工具(yomitoku)和 MCP 服务器(yomitoku_mcp),便于集成到自动化工作流或 AI Agent 系统中。
YomiToku 目前处于活跃开发状态,最近几个月的更新包括:CPU 优化推理模型(2025年11月)、手写字符识别(2025年4月)。MIT 许可证为 CC BY-NC-SA 4.0,即非商业使用免费,商业使用需联系作者。
需要注意的是:YomiToku 的模型权重托管在 HuggingFace Hub(模型名以 KotaroKinoshita/ 开头),在国内网络环境下首次下载可能较慢。此外,尽管支持英文,但 YomiToku 的核心优势集中在日文文档场景,对英文文档的分析效果不一定优于专门的英文 OCR 工具如 Tesseract 或 EasyOCR。
日语是全球第三大经济体日本的核心语言,日文文献的数字化需求长期存在却长期被忽视——大多数开源 OCR 方案以英语为主,对日文的处理效果差强人意。YomiToku 的出现填补了这个空白。
从更宏观的视角看,文档 AI 正在从通用走向垂直。通用 OCR 解决「有没有」的问题,而 YomiToku 这类专业工具解决「好不好」的问题。随着日本社会的数字化转型加速,以及日文古籍、报纸、学术文献的数字化工程推进,这类工具的价值会持续凸显。