Python进阶:44天掌握Tesseract-OCR图片文字识别
100天精通Python(进阶篇)——第44天:基于Tesseract-OCR实现OCR图片文字识别实战
引言
在Python进阶学习的第44天,我们将深入探索OCR(光学字符识别)技术,特别是基于Tesseract-OCR库的实现。OCR技术能够将图片中的文字转换为可编辑的文本格式,广泛应用于文档数字化、自动化数据处理、车牌识别等多个领域。本文将通过详细的步骤和代码示例,指导读者如何使用Tesseract-OCR在Python环境中实现高效的图片文字识别。
Tesseract-OCR简介
Tesseract是一个由Google维护的开源OCR引擎,支持多种语言和字体,具有高度的灵活性和可扩展性。它最初由HP实验室开发,后被Google接管并持续优化。Tesseract能够识别图片中的文字,并将其转换为文本文件,支持包括中文在内的多种语言。
环境配置
在开始之前,我们需要确保Python环境已安装,并配置好Tesseract-OCR及其Python封装库pytesseract
。
安装Tesseract-OCR
- Windows用户:可以从UB Mannheim下载并安装Tesseract-OCR的Windows版本。
- Mac用户:使用Homebrew安装:
brew install tesseract
。 - Linux用户:根据发行版使用包管理器安装,如Ubuntu:
sudo apt-get install tesseract-ocr
。
安装pytesseract
使用pip安装pytesseract
库:
pip install pytesseract
基础识别
安装完成后,我们可以开始使用Tesseract-OCR进行基础图片文字识别。
示例代码
import pytesseract
from PIL import Image
# 设置Tesseract路径(如果不在系统PATH中)
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # Windows示例
# 加载图片
image = Image.open('example.png')
# 使用Tesseract进行OCR识别
text = pytesseract.image_to_string(image, lang='chi_sim') # 指定中文简体
print(text)
代码解释
- 导入库:
pytesseract
用于调用Tesseract-OCR,PIL.Image
用于加载图片。 - 设置Tesseract路径(可选):如果Tesseract不在系统PATH中,需要指定其可执行文件的路径。
- 加载图片:使用
Image.open()
方法加载图片文件。 - OCR识别:
pytesseract.image_to_string()
方法执行OCR识别,lang
参数指定语言(如'chi_sim'
表示中文简体)。 - 输出结果:打印识别出的文本。
预处理优化
为了提高OCR识别的准确率,通常需要对图片进行预处理,如二值化、去噪、调整对比度等。
使用OpenCV进行预处理
import cv2
import numpy as np
import pytesseract
from PIL import Image
def preprocess_image(image_path):
# 读取图片
img = cv2.imread(image_path)
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
# 可选:去噪
# denoised = cv2.fastNlMeansDenoising(thresh, None, 10, 7, 21)
# 保存预处理后的图片(可选)
# cv2.imwrite('preprocessed.png', thresh)
return thresh
# 预处理图片
preprocessed_img = preprocess_image('example.png')
# 转换为PIL Image格式
pil_img = Image.fromarray(preprocessed_img)
# OCR识别
text = pytesseract.image_to_string(pil_img, lang='chi_sim')
print(text)
代码解释
- 读取图片:使用
cv2.imread()
方法读取图片。 - 转换为灰度图:
cv2.cvtColor()
方法将图片转换为灰度图,减少颜色干扰。 - 二值化处理:
cv2.threshold()
方法进行二值化,提高文字与背景的对比度。 - 去噪(可选):使用
cv2.fastNlMeansDenoising()
方法去除图片噪声。 - 保存预处理后的图片(可选):将预处理后的图片保存到文件。
- 转换为PIL Image格式:使用
Image.fromarray()
方法将OpenCV格式的图片转换为PIL格式。 - OCR识别:与之前相同,使用
pytesseract.image_to_string()
方法进行识别。
实战案例:识别发票文字
假设我们需要从一张发票图片中提取关键信息,如发票号码、日期、金额等。
代码实现
import cv2
import numpy as np
import pytesseract
from PIL import Image
import re
def extract_invoice_info(image_path):
# 预处理图片
img = cv2.imread(image_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
# 转换为PIL Image格式
pil_img = Image.fromarray(thresh)
# OCR识别
text = pytesseract.image_to_string(pil_img, lang='chi_sim')
# 提取关键信息
invoice_no_match = re.search(r'发票号码[::]?\s*(\d+)', text)
date_match = re.search(r'日期[::]?\s*(\d{4}-\d{2}-\d{2})', text)
amount_match = re.search(r'金额[::]?\s*([\d.]+)', text)
invoice_no = invoice_no_match.group(1) if invoice_no_match else '未找到'
date = date_match.group(1) if date_match else '未找到'
amount = amount_match.group(1) if amount_match else '未找到'
return {
'发票号码': invoice_no,
'日期': date,
'金额': amount
}
# 示例使用
info = extract_invoice_info('invoice.png')
for key, value in info.items():
print(f'{key}: {value}')
代码解释
- 预处理图片:与之前相同,进行灰度转换和二值化处理。
- OCR识别:使用
pytesseract.image_to_string()
方法识别图片中的文字。 - 提取关键信息:使用正则表达式从识别出的文本中提取发票号码、日期和金额。
- 返回结果:将提取到的信息以字典形式返回。
总结
在第44天的Python进阶学习中,我们深入探索了基于Tesseract-OCR的图片文字识别技术。通过详细的步骤和代码示例,我们学习了如何配置环境、进行基础识别、优化预处理步骤,并通过实战案例展示了如何从发票图片中提取关键信息。希望本文能够帮助读者高效掌握OCR技术,并在实际项目中应用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权请联系我们,一经查实立即删除!