4. PaddleOCR:中文识别的标杆
这是什么:PaddleOCR = 百度开源的 OCR 工具包,专门为中国场景和复杂版式文档做的。
为什么用:上一章的 EasyOCR 好用,可中文票据、竖排文字、复杂表格这些场景它容易露怯。PaddleOCR 常年稳居中文 OCR 第一梯队,整条管线自带检测、方向检测、识别和表格还原。
如何用:本章按顺序装好 PaddlePaddle 和 PaddleOCR,再用 predict 跑通一张中文图片。
基线:PaddleOCR 3.7.0 + PaddlePaddle 3.3.1。3.7 默认用 PP-OCRv6 模型;想回到 PP-OCRv5,加一句
ocr_version="PP-OCRv5"即可。
4.1 安装(两步,顺序不能反)
pip install paddlepaddle # ① 推理引擎,先装
pip install paddleocr # ② OCR 工具包
paddleocr 本身不带 PaddlePaddle——它只是个接口层,真正跑模型的是飞桨引擎。少装第一步,import 就会报错。
要用第 4.4 节的表格结构化,得加装附加能力组:
pip install "paddleocr[doc-parser]"(该组要求 Python 3.9+)。
4.2 最小识别循环(照抄能跑)
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_doc_orientation_classify=False,
use_doc_unwarping=False,
use_textline_orientation=False)
result = ocr.predict('test.png')
for page in result:
for text, score in zip(page['rec_texts'], page['rec_scores']):
print(f'{score:.0%} {text}')
你会看到与 EasyOCR 类似的输出,但中文准确率常高一截(生僻字、形近字更稳)。首次运行同样要下载模型(paddle 模型文件稍大)。
4.3 输出结构(3.x 的 predict)
predict 返回结果列表,每个元素都能当字典用,常用键:
| 键 | 内容 |
|---|---|
rec_texts |
识别出的文本(列表) |
rec_scores |
对应的置信度(列表) |
rec_polys |
识别框坐标,四点多边形 |
rec_boxes |
识别框的矩形坐标 [x_min, y_min, x_max, y_max] |
dt_polys |
检测框(未经置信度过滤) |
需要「文档化拼接」时,常见做法按 y 坐标分行、行内按 x 排序——用坐标就能把文字顺序重排回人读的样子(EasyOCR 同理)。
4.4 中文的杀手锏:表格 Excel 还原
from paddleocr import PPStructureV3 # 表格结构化管线(需装 doc-parser 附加组)
import pandas as pd
t2e = PPStructureV3()
outputs = t2e.predict('table.png') # 输出含 HTML
# 简化:转 DataFrame 一把梭
dfs = []
for page in outputs:
for region in page['table_res_list']:
dfs.append(pd.read_html(region['pred_html'])[0])
print(dfs[0])
一张截图表格 → DataFrame / Excel 文件,办公自动化不朽的神器。表格识别用 PP-StructureV3(3.x),先跑通最小示例,表格细品等工程化再上。
不想装
doc-parser?PPStructureV3 还支持save_to_markdown()/save_to_word()直接出文档,更适合「贴进笔记软件」的活。
4.5 EasyOCR vs PaddleOCR:选型总结
| 维度 | EasyOCR | PaddleOCR |
|---|---|---|
| 入门体验 | ✅ 极简 | 略多参数 |
| 中文精度 | 良 | 顶(v6 更强) |
| 表格 / 结构化 | 无 | 有 |
| 生态依赖 | PyTorch | PaddlePaddle 全家桶 |
| 建议 | 速出手、多语言 | 中文生产、办公流 |
结论:学习用 EasyOCR,中文生产用 PaddleOCR,一轻一重双刃在手。
4.6 好用的工程化接口
predict 不止能读单张图,还能直接吃文件夹,并且自带可视化与导出:
ocr = PaddleOCR(use_doc_orientation_classify=False,
use_doc_unwarping=False,
use_textline_orientation=False)
for res in ocr.predict('screenshots/'): # 整个文件夹一次跑完
res.print() # 打印结构化结果
res.save_to_img('./out') # 存带框可视化图
res.save_to_json('./out') # 存 JSON,便于下游处理
需要流式处理大批图时,用 predict_iter()——它返回的是生成器,边出结果边处理,内存占用恒定。
目录输入 + JSON 输出,是把 OCR 接进自动化流水线最省事的两步。
4.7 常见翻车现场
| 报错 / 现象 | 原因 | 修法 |
|---|---|---|
ModuleNotFoundError: paddle |
只装了 paddleocr 没装引擎 |
补 pip install paddlepaddle |
No module named 'paddlex' |
装到别的 Python 去了 | 确认 .venv 已激活 |
PPStructureV3 导入失败 |
少装 doc-parser 附加组 |
pip install "paddleocr[doc-parser]" |
| 识别全乱 / 一堆空字符串 | 模型还在下载或图片读不到 | 等下载完再跑,并确认路径正确 |
| 首次推理特别慢 | 首次要下载模型并编译 | 属正常,之后就快了 |
4.8 动手改
- 用同一张中文截图分别跑两库,对比置信度与错字率
- 找一张含表格的截图,试 4.4 的 DataFrame 输出
- 把两库各自的耗时打出来(
time.perf_counter())
4.9 小结
- PaddleOCR = 中文的精度天花板 + 表格还原
- 安装是两步:
paddlepaddle→paddleocr,顺序不能反 predict输出用rec_texts/rec_scores/rec_polys- 选型:学习 EasyOCR,中文生产 PaddleOCR
下一章:图片预处理:低质量图也能识别 🐸