最近花了两天时间,用开源OCR工具把一部星命学竖版古籍《星命说证正续合编》上下两册、共350多页pdf扫描图片,全部转成了可检索的纯文本,转文本准确率高达90%以上,效果出乎意料。写出来给同样有古籍数字化需求的朋友参考。
先简单介绍下过程,我选用古籍式样如图所示:

我第一次跑出来大概是这样的

但此时千万别灰心,直接把这个文本甩给AI,让它总结原因,调整后重新生成。

第二次跑出来的文本就有模有样了,准确率基本在90%以上,以上的过程是可以批量完成的,下面具体介绍下我的使用心得。
一、开源软件选择——PaddleOCR
市面上OCR方案不少。微信/QQ自带的OCR对印刷体效果不错,但只能单张,没法批量。大部分OCR API对于现代行文效果好但竖版古籍的转换则差强人意,还要花钱,350页下来光调用费就不少。Google的Tesseract对中文识别率偏低,竖版古籍繁体字更是吃力。
最终选了百度的PaddleOCR——完全开源、本地运行、免费、支持繁体中文,而且识别率在中文印刷体上属于第一梯队。
二、安装踩过的坑
几个坑提前说一下,可以节省你不少时间:
1. paddlepaddle版本很关键
最新版3.3.1有bug(PIR/oneDNN相关),3.0.0也有类型错误。测试下来3.2.2是最稳定的版本。
pip install paddlepaddle==3.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple
国内下载注意用清华镜像,不然下载慢到怀疑人生。
2. 模型下载被墙
PaddleOCR默认从HuggingFace下载模型,但在国内被墙。需要设置环境变量让它走ModelScope:
import osos.environ['PADDLE_PDX_DISABLE_MODEL_SOURCE_CHECK'] = 'True'
模型会自动下载到C:\Users\你的用户名\.paddlex\official_models\,首次运行需要等几分钟。
3. 命令行语法
新版PaddleOCR的命令行语法变了,不是paddleocr --image_path 文件,而是:
paddleocr ocr -i 图片文件三、古籍OCR的真正难点:竖排混排
现代OCR默认假设文字是横排(从左到右、从上到下),但古籍大量使用竖排(从右到左、从上到下)。更麻烦的是——同一页上经常横排竖排混在一起。
我这本《星命说证》就是典型:正文是竖排,但页眉标题、页码、出版信息又是横排。如果简单按坐标从上到下排序,竖排文字会被打散成碎片。
解决方案是根据检测框的宽高比自动判断排版方向:
检测框高度 >> 宽度 → 竖排文字 检测框宽度 >> 高度 → 横排文字
然后分别处理:
横排:按y坐标聚类分行,行内从左到右排列。
竖排:按x坐标从右到左排列(古籍阅读顺序),列内从上到下。用y坐标的间距(>100像素的跳跃)来划分不同的段落区块。
代码不到100行就搞定了这个逻辑,实测准确率非常高。
四、参数调优
默认参数的检测阈值偏高,会漏掉很多淡墨、小字的文本块。经过大量测试,最终参数是:
ocr = PaddleOCR(lang='ch',ocr_version='PP-OCRv5',det_db_thresh=0.1,# 检测阈值,默认0.3太高det_db_box_thresh=0.1,# 框阈值text_det_limit_side_len=960# 检测边长上限)
关于模型版本:PP-OCRv5_server效果最好。v6虽然更新,但对标点符号的支持反而不如v5——古籍中的句读符号v5能识别出来,v6会漏掉。
个别漏检严重的区域,甚至把det_db_thresh降到0.005才勉强检出,但这时噪声也会增多,需要人工筛选。
五、还有一个坑:双页跨页
古籍扫描经常是双页跨页,一图里有两页内容。处理方法很简单:检测图片宽度,如果x范围超过1000像素,就按中线拆成左右两页分别处理。
六、批量处理的策略
350多张PNG,不可能一张张手动跑。写了个批量脚本,核心逻辑:
遍历文件夹下所有 page_*.png按页码排序 每张图OCR → 自动判横竖 → 排版整理 → 存为txt - 断点续跑
:先检查txt是否已存在,存在就跳过
这样即使中途断了,重跑也不会重复处理已完成的页面。
对于超长任务(处理到后面每页80-90个文本块,单页要跑很久),还用了定时任务每10分钟自动续跑,真正做到了"丢在那里不管,回来全做完"。
七、效果如何
整体识别率大约在85%-95%之间。繁体字、异体字识别相当不错,印刷清晰的正文基本零错误。主要问题集中在:
- 极淡的字迹
:老书墨迹不均,浅色区域容易漏检 - 极小字号
:注文小字有时会被忽略 - 竖排列标题
:页面边缘的竖排小标题偶尔无法检出 - 异体字形
:个别冷僻异体字会识别成近似字
每个txt文件里标注了置信度低于30%的文本行(*LOW标记),方便人工校对时重点关注。
八、总结
两天时间、几乎零花费、350页古籍,从扫描图片变成可全文搜索的txt文本。这个效率在几年前不敢想。
如果你是古籍爱好者,想把自己收藏的PDF/扫描本数字化,PaddleOCR是目前最靠谱的免费方案。
工具:PaddleOCR 3.x + Python + hermes+DeepSeek AI辅助古籍:《星命说证正续合编》霍敏卿著耗时:约10小时(含调试)费用:PaddleOCR免费,AI辅助Token约几块钱
夜雨聆风