Python OCR识别案例如何识别图片文字

wen python案例 28

Python OCR识别案例如何识别图片文字——完整实战指南

目录导读

  1. OCR技术简介与适用场景
  2. 主流Python OCR库对比与选型
  3. 环境搭建与依赖安装
  4. 实战案例1:使用Tesseract识别中英文混排图片
  5. 实战案例2:基于PaddleOCR的高精度表格文字提取
  6. 常见问题与性能优化
  7. 问答环节:开发者最关心的5个问题

OCR技术简介与适用场景

OCR(Optical Character Recognition,光学字符识别) 是将图片、扫描件中的文字信息转化为可编辑文本的技术,在实际应用中,企业常需处理合同扫描件、发票照片、名片、书籍截图、手写笔记等场景。

Python OCR识别案例如何识别图片文字

  • 典型场景
    • 财务自动化:从发票图片中提取金额、税号
    • 文档数字化:将纸质书籍转为电子文档
    • 车牌识别:智能交通系统中的字符提取
    • 翻译工具:实时识别外文图片并翻译

Python凭借其丰富的开源库和简洁语法,成为实现OCR最流行的编程语言之一,本文将通过两个完整案例,揭示如何高效实现“图片文字识别”。


主流Python OCR库对比与选型

目前最常用的三个库:

库名称 优点 缺点 适用场景
Tesseract 免费开源,支持100+语言 对复杂排版效果一般 文档、印刷体文字
PaddleOCR 中文准确率极高,支持垂直文字 依赖PaddlePaddle框架 中文发票、手写体
EasyOCR 支持80+语言,部署简单 速度较慢 多语言混合场景

选型建议

  • 纯英文印刷体 → Tesseract
  • 中文、复杂版式(如表格、倾斜文字)→ PaddleOCR
  • 轻量级多语言 → EasyOCR

环境搭建与依赖安装

以PaddleOCR为例,完整安装命令如下(推荐使用Python 3.8–3.10):

# 步骤1:创建虚拟环境(可选但推荐)
python -m venv ocr_env
source ocr_env/bin/activate  # Linux/Mac
ocr_env\Scripts\activate     # Windows
# 步骤2:安装核心库
pip install paddlepaddle==2.6.1  # CPU版(若需GPU请安装paddlepaddle-gpu)
pip install paddleocr
pip install opencv-python pillow  # 图像预处理辅助

验证安装

from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang='ch')  # 初始化
print("PaddleOCR 安装成功")

实战案例1:使用Tesseract识别中英文混排图片

场景:有一张包含中文标题+英文关键词的产品说明书截图。

1 安装Tesseract引擎

  • Windows:下载exe安装包(选择中文包支持)
  • Linuxsudo apt install tesseract-ocr tesseract-ocr-chi-sim
  • Macbrew install tesseract tesseract-lang

2 代码实现

import pytesseract
from PIL import Image
# 打开图片
img = Image.open('product_manual.png')
# 使用中文+英文语言包
text = pytesseract.image_to_string(img, lang='chi_sim+eng')
# 输出识别结果
print("识别结果:\n", text)

效果示例
输入图片:【新品发布】Smart Sensor v3.0
输出:【新品发布】Smart Sensor v3.0

注意事项

  • 图片分辨率建议≥300dpi
  • 识别前可进行灰度化、二值化等预处理

实战案例2:基于PaddleOCR的高精度表格文字提取

场景:一张含表格的增值税发票图片,需要提取“金额”“税率”等字段。

1 完整代码(含预处理)

from paddleocr import PaddleOCR
import cv2
import numpy as np
ocr = PaddleOCR(use_angle_cls=True, lang='ch', use_gpu=False)
# 读取图片
img = cv2.imread('invoice.jpg')
# 灰度化 + 二值化(提升对比度)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# OCR识别
result = ocr.ocr(binary, cls=True)
# 提取文字与坐标
extracted_data = []
for line in result[0]:
    text = line[1][0]      # 识别文本
    confidence = line[1][1] # 置信度
    extracted_data.append((text, confidence))
# 筛选高置信度结果
filtered = [item for item in extracted_data if item[1] > 0.8]
print("高精度识别结果:")
for text, conf in filtered:
    print(f"{text} (置信度: {conf:.2f})")

输出示例

购买方名称:某某科技有限公司 (置信度: 0.99)  
金额:5000.00 (置信度: 0.98)  
税率:13% (置信度: 0.97)  

2 进阶:自动纠正倾斜

若图片有旋转,添加以下代码:

coords = [line[0] for line in result[0]]
angle = cv2.minAreaRect(np.array(coords))[2]  # 获取倾斜角度
# 自动旋转修正(代码略)

常见问题与性能优化

❌ 问题1:识别结果包含乱码

  • 原因:语言包未安装或图片质量差
  • 解决
    • 重装语言包(如Tesseract的chi_sim
    • 提高图片分辨率,去除噪点

❌ 问题2:识别速度慢

  • 原因:全图处理、未使用GPU
  • 优化
    • 裁剪感兴趣区域(ROI)
    • 使用use_gpu=True(需安装CUDA)
    • 缩小图片尺寸(保持宽高比≥300px)

❌ 问题3:中英文混排识别率低

  • 解决
    • 优先使用PaddleOCR(自带中英文分离模型)
    • Tesseract中明确指定语言组chi_sim+eng

问答环节:开发者最关心的5个问题

Q1:PaddleOCR和Tesseract哪个更适合中文?

A:PaddleOCR在中文、手写体、表格识别方面准确率更高(可达90%以上),且支持垂直文字,Tesseract适合基础英文或简单中文印刷体,但对复杂排版效果较差。

Q2:如何提高OCR识别准确率?

A

  1. 图像预处理:灰度化、二值化、去噪(中值滤波)
  2. 分辨率至少300dpi
  3. 使用use_angle_cls=True(PaddleOCR自动矫正方向)
  4. 针对特定字体训练自定义模型(进阶需求)

Q3:OCR能识别手写文字吗?

A:可以,但准确率取决于手写工整程度,PaddleOCR提供手写识别模型(rec_model_dir参数指定),建议对手写内容进行对比度增强。

Q4:如何处理包含多语言的图片?

A

  • Tesseract:在lang参数中加号连接,如chi_sim+eng+ja
  • PaddleOCR:设置lang='ch'会自动检测混合语言

Q5:OCR识别后如何进行结构化提取?

A:结合正则表达式或命名实体识别(NER),例如提取邮箱:

import re
text = "联系邮箱:admin@example.com"
email = re.search(r'\S+@\S+', text).group()

通过本文的两个案例,您已掌握使用Python进行OCR识别的核心方法:

  1. Tesseract:适合快速部署、多语言混合场景
  2. PaddleOCR:专攻中文高精度识别,尤其擅长表格、倾斜文字

最佳实践:先用PaddleOCR尝试,若精度不满足再结合图像预处理优化,所有代码均可直接复制运行,建议从发票、合同等清晰文档开始练习,逐步挑战低质量图片。


延伸阅读

注:本文案例基于Python 3.9、PaddleOCR 2.8.0版本,实际运行时请保持库版本兼容。

抱歉,评论功能暂时关闭!