PaddleOCR识别中文手写与印刷混排的作业:左侧原图带红笔批改,右侧按行输出识别文字

单位档案室里有一批九十年代的会议纪要,纸已经发黄,早些年扫成了PDF。领导要我在里面找某个项目的批复,我说好,然后打开PDF,发现全是图片,一个字都选不中。

这就是OCR要解决的问题。工具不少,但中文是个坎。英文只有二十六个字母加符号,认错了上下文能猜;中文常用字六千多个,形近字一堆,己已巳、戊戌戍、未末差一笔就是一个字,再加上竖排、印章、表格线、手写,通用OCR经常整段崩掉。

PaddleOCR是百度飞桨团队做的开源OCR工具库,Apache协议,GitHub上九万一千多星。它的定位不是「一个识别网站」,是一套能自己部署的引擎。

最新一版是PP-OCRv6。官方说法是中等规模模型在检测上比上一代提升4.6%、识别提升5.1%,参数量只有三千四百五十万,却超过了几个参数量大得多的视觉大模型。这个数字我一开始不太信,直到在自己那批扫描件上试了一遍——竖排的老式公文,识别率明显高过我之前用的商业接口。

它认的不只是印刷体。中文手写、中英混排、表格、公式、竖排、身份证、票据、车牌,都有对应的模型。表格识别的PP-StructureV3能把一张有合并单元格的财务报表还原成结构化表格,不只是把字认出来,是把行列关系也认出来。一页扫描报表手动录入要半小时,它几秒钟给出Excel。

PaddleOCR识别密集中文财务报表:表格内文字逐格提取,保留行列结构

部署方式有几种:装个pip包跑命令行,起一个HTTP服务给别的程序调,或者用Docker镜像。模型有几兆的轻量版,CPU就能跑;也有精度更高的服务版,需要显卡。这意味着它能装在没网的机器上——档案室那种环境,数据不能出内网,这一点很关键。

我用它做了两件事。一件是把那批会议纪要全过了一遍,转成可搜索文本,现在找批复直接Ctrl+F;另一件是给家里老人扫描的体检报告做结构化,把各项指标和参考范围提出来,做成一张随时间变化的表。

该说的不足。安装依赖PaddlePaddle框架,环境配起来对新手不友好,Windows上尤其容易卡在编译;精度和速度要自己权衡,轻量模型快但错字多,服务版准但吃显存;复杂版面仍会错行;最重要的是它是个工具库,不是产品,没有一键安装的客户端,不懂命令行的用户上手有门槛。

但换个角度看,这也正是它的意义。文字识别过去被锁在几家公司的接口里,按次收费,数据还要传出去。有人把它做成开源模型,压到几兆,让一台普通电脑就能跑,档案室的老纸才有可能变成能检索的数据。