脚本专家 发表于 2026-7-16 12:00:00

Python实现图片文字OCR识别的两种方案详细对比与实战教程

在日常办公自动化中,图片文字提取(OCR)是高频需求,例如扫描件转文字、截图识别、发票信息提取等。Python 生态中有两个主流 OCR 库:PaddleOCR 和 Tesseract。本文从安装、配置到实战代码,完整对比两者的优缺点,并给出一个发票信息提取的实例。

### 方案概览

| 对比维度       | PaddleOCR                  | Tesseract                |
|----------------|----------------------------|--------------------------|
| 中文识别能力   | 优秀(95%+)               | 一般(80%–90%)          |
| 安装难度       | 中等(需安装 PaddlePaddle)| 简单(pip + 系统引擎)   |
| 识别速度       | 快                         | 较快                     |
| 版面分析       | 支持                     | 不支持                   |

如果主要处理中文场景,推荐优先使用 PaddleOCR;英文场景二者均可,但 Tesseract 配置更轻量。

### PaddleOCR 使用详解

PaddleOCR 是百度基于 PaddlePaddle 框架开发的 OCR 工具,内置了文本检测、方向分类和识别模型。安装时需同时安装底层框架和 OCR 包:


pip install paddlepaddle paddleocr


加载模型并指定参数:


from paddleocr import PaddleOCR

ocr = PaddleOCR(use_angle_cls=True, lang='ch')


参数说明:
- use_angle_cls:是否开启文本方向分类(针对旋转图片,可提升识别准确率)。
- lang:语言,'ch' 表示中文简体(自动包含英文与数字)。

识别图片并输出结果:


result = ocr.ocr('invoice.jpg')
for line in result:
    text = line
    confidence = line
    print(f'{text} (置信度: {confidence:.2%})')


返回的 result 是一个列表,每个元素代表一行识别结果,包含文本框坐标、识别文本和置信度。通过 line 获取文本和置信度。

### Tesseract 使用详解

Tesseract 是 Google 维护的开源 OCR 引擎,Python 通过 pytesseract 调用。需要先安装 Tesseract 系统引擎(Windows 下载安装包,Linux 用 apt 等)。安装完成后通过 pip 安装 Python 绑定:


pip install pytesseract


同时需要安装语言包(例如中文简体 chi_sim)。代码示例如下:


import pytesseract
from PIL import Image

text = pytesseract.image_to_string(
    Image.open('text.png'),
    lang='chi_sim+eng'
)
print(text)


参数说明:
- lang:指定语言,多个语言用加号连接。
- 注意 pytesseract 默认会从系统路径查找 tesseract 可执行文件,若无法找到需手动配置 tesseract_cmd 路径。

### 实战:发票信息提取

下面以 PaddleOCR 为例,演示如何从发票图片中提取关键字段(发票号码和价税合计)。


from paddleocr import PaddleOCR
import re

ocr = PaddleOCR(use_angle_cls=True, lang='ch')
result = ocr.ocr('invoice.jpg')

# 合并所有识别文本
texts = for line in result]
full_text = ''.join(texts)

# 正则提取
invoice_no = re.search(r'发票号码[::](\d+)', full_text)
total = re.search(r'价税合计[::]?¥?([\d,]+\.\d{2})', full_text)

print(f'发票号码: {invoice_no.group(1) if invoice_no else "未识别"}')
print(f'价税合计: {total.group(0) if total else "未识别"}')


代码逻辑:
- 利用 PaddleOCR 获取全部文字行。
- 拼接整段文本便于正则匹配。
- 使用 re.search 查找“发票号码:”后的数字串,以及“价税合计:”后的金额。
- 注意中文冒号和英文冒号都需考虑,金额可能带千分位逗号。

该方法直接用于自动化发票归档或财务数据录入,准确率取决于发票图片质量和 OCR 模型本身。

### 总结

- 中文场景优先选择 PaddleOCR:识别准确率高、支持版面分析、易用性好。
- 英文或轻量场景可选择 Tesseract:安装简单,适合纯文本识别。
- 实际项目可根据需求混合使用:先用 Tesseract 做快速尝试,若精度不足再切换 PaddleOCR。

开发者应根据任务的语言类型、对版面分析的需求以及部署环境(是否有 GPU)来决定选用哪个库。两个库均提供了成熟的 Python API,可快速集成到自动化脚本中。

热心网友5 发表于 2026-7-16 12:05:00

Re: Python实现图片文字OCR识别的两种方案详细对比与实战教程

感谢楼主分享这么详细的对比教程,正好最近在做一个发票识别的小工具,看完直接就能上手实测了。PaddleOCR 的中文识别率和正则提取的示例代码非常实用,尤其是考虑到中英文冒号差异和千分位逗号这一点,很周到。想请教一下:如果发票图片质量比较差(比如手机拍的有阴影),楼主是否有推荐的预处理步骤(比如二值化、去噪)能进一步提升识别率?再次感谢!

热心网友5 发表于 2026-7-16 12:05:00

Re: Python实现图片文字OCR识别的两种方案详细对比与实战教程

感谢楼主分享这么详细的对比和实战教程!之前一直用Tesseract做英文识别,中文确实不太理想,PaddleOCR的中文准确率看起来高很多,准备试试发票提取那个例子。想请教下,如果图片背景复杂或者有印章干扰,PaddleOCR的预处理有什么推荐方法吗?

热心网友5 发表于 2026-7-16 12:05:00

Re: Python实现图片文字OCR识别的两种方案详细对比与实战教程

感谢楼主的详细分享,对比清晰,代码也很实用。最近刚好在尝试用OCR做发票信息提取,PaddleOCR的中文识别率确实比Tesseract好不少,不过遇到一些背景复杂或字体较小的发票,偶尔会有漏识别的情况。想请教一下楼主,除了楼主提到的use_angle_cls参数,还有没有其他预处理技巧(比如二值化、降噪)能进一步提升PaddleOCR在复杂图片上的表现?
页: [1]
查看完整版本: Python实现图片文字OCR识别的两种方案详细对比与实战教程