Python读取图片文字:从入门到实战

一、引言

在数字化时代,从图片中提取文字(OCR,光学字符识别)是一项常见需求。Python凭借其丰富的库生态,使得实现OCR变得简单高效。本文将带你掌握使用Python读取图片文字的核心技术。

二、环境准备

1. 安装Tesseract OCR引擎

Tesseract是开源的OCR引擎,支持多种语言。下载安装:

  • Windows: 从GitHub releases下载安装包
  • macOS: brew install tesseract
  • Linux: sudo apt-get install tesseract-ocr

安装后需配置环境变量或指定路径。

2. 安装Python库

pip install pytesseract pillow opencv-python

pytesseract是Tesseract的Python封装;Pillow用于图像处理;OpenCV提供更高级的预处理功能。

三、基础用法

最简单的OCR代码:

from PIL import Image
import pytesseract

text = pytesseract.image_to_string(Image.open('example.png'))
print(text)

如果Tesseract未在系统路径,需指定安装路径:

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

四、图像预处理提升准确率

原始图片可能包含噪声、倾斜、低对比度等问题。使用OpenCV进行预处理是关键步骤。

1. 灰度化

import cv2
img = cv2.imread('example.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

2. 二值化

_, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)

或使用自适应阈值处理光照不均匀:

thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

3. 去噪

denoised = cv2.medianBlur(thresh, 3)

4. 倾斜校正

通过霍夫变换或旋转文本行实现。

五、语言设置与中文识别

识别中文需要下载中文语言包(如chi_sim)。代码中指定语言:

text = pytesseract.image_to_string(img, lang='chi_sim')

多语言组合:lang='chi_sim+eng'。

六、实战案例:读取身份证号码

假设有一张身份证图片,需要提取号码。步骤:

  1. 裁剪区域:定位号码所在区域(通常位于正面右下角)。
  2. 预处理:灰度、二值化、膨胀连接数字。
  3. OCR识别:设置--psm 7(将图像视为单行文本)。
import pytesseract
import cv2

img = cv2.imread('id_card.jpg')
cropped = img[100:200, 200:400]  # 示例坐标
gray = cv2.cvtColor(cropped, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
config = '--psm 7 -c tessedit_char_whitelist=0123456789X'
text = pytesseract.image_to_string(thresh, config=config)
print('身份证号:', text.strip())

七、常见问题与解决方案

  • 识别乱码:确保Tesseract语言包完整,图像预处理到位。
  • 字符粘连:尝试形态学操作(开运算、闭运算)。
  • 彩色背景干扰:转为灰度后应用边缘检测或颜色过滤。
  • 字体特殊:训练自定义字体或使用深度学习OCR(如PaddleOCR)。

八、进阶方向

对于更复杂场景,推荐使用深度学习OCR库:

  • PaddleOCR:百度开源,支持80+语言,准确率高。
  • EasyOCR:基于PyTorch,易于使用。
  • TrOCR:微软基于Transformer的端到端模型。

这些工具通常内置预处理,但灵活性不如手动调整。

九、总结

使用Python读取图片文字的核心是Tesseract + 图像预处理。通过合理调整预处理流程和参数,可以应对大部分场景。对于极高精度需求,可考虑深度学习方案。掌握OCR技术,将图片中的信息转化为可编辑文本,为自动化处理和数据提取打开大门。