🐸 青蛙编程网
首页 / AI / 文字识别 OCR / 4. PaddleOCR:中文标杆

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 动手改

  1. 用同一张中文截图分别跑两库,对比置信度与错字率
  2. 找一张含表格的截图,试 4.4 的 DataFrame 输出
  3. 把两库各自的耗时打出来(time.perf_counter())

4.9 小结

  • PaddleOCR = 中文的精度天花板 + 表格还原
  • 安装是两步:paddlepaddle → paddleocr,顺序不能反
  • predict 输出用 rec_texts / rec_scores / rec_polys
  • 选型:学习 EasyOCR,中文生产 PaddleOCR

下一章:图片预处理:低质量图也能识别 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。