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-pythonpytesseract是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'。
六、实战案例:读取身份证号码
假设有一张身份证图片,需要提取号码。步骤:
- 裁剪区域:定位号码所在区域(通常位于正面右下角)。
- 预处理:灰度、二值化、膨胀连接数字。
- 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技术,将图片中的信息转化为可编辑文本,为自动化处理和数据提取打开大门。