logo

Python进阶:44天掌握Tesseract-OCR图片文字识别

作者:狼烟四起2025.09.18 10:49浏览量:0

简介:本文聚焦Python进阶学习第44天,详细介绍如何使用Tesseract-OCR库实现OCR图片文字识别,涵盖环境配置、基础识别、预处理优化及实战案例,助力开发者高效掌握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

  1. Windows用户:可以从UB Mannheim下载并安装Tesseract-OCR的Windows版本。
  2. Mac用户:使用Homebrew安装:brew install tesseract
  3. Linux用户:根据发行版使用包管理器安装,如Ubuntu:sudo apt-get install tesseract-ocr

安装pytesseract

使用pip安装pytesseract库:

  1. pip install pytesseract

基础识别

安装完成后,我们可以开始使用Tesseract-OCR进行基础图片文字识别。

示例代码

  1. import pytesseract
  2. from PIL import Image
  3. # 设置Tesseract路径(如果不在系统PATH中)
  4. # pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # Windows示例
  5. # 加载图片
  6. image = Image.open('example.png')
  7. # 使用Tesseract进行OCR识别
  8. text = pytesseract.image_to_string(image, lang='chi_sim') # 指定中文简体
  9. print(text)

代码解释

  1. 导入库pytesseract用于调用Tesseract-OCR,PIL.Image用于加载图片。
  2. 设置Tesseract路径(可选):如果Tesseract不在系统PATH中,需要指定其可执行文件的路径。
  3. 加载图片:使用Image.open()方法加载图片文件。
  4. OCR识别pytesseract.image_to_string()方法执行OCR识别,lang参数指定语言(如'chi_sim'表示中文简体)。
  5. 输出结果:打印识别出的文本。

预处理优化

为了提高OCR识别的准确率,通常需要对图片进行预处理,如二值化、去噪、调整对比度等。

使用OpenCV进行预处理

  1. import cv2
  2. import numpy as np
  3. import pytesseract
  4. from PIL import Image
  5. def preprocess_image(image_path):
  6. # 读取图片
  7. img = cv2.imread(image_path)
  8. # 转换为灰度图
  9. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  10. # 二值化处理
  11. thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
  12. # 可选:去噪
  13. # denoised = cv2.fastNlMeansDenoising(thresh, None, 10, 7, 21)
  14. # 保存预处理后的图片(可选)
  15. # cv2.imwrite('preprocessed.png', thresh)
  16. return thresh
  17. # 预处理图片
  18. preprocessed_img = preprocess_image('example.png')
  19. # 转换为PIL Image格式
  20. pil_img = Image.fromarray(preprocessed_img)
  21. # OCR识别
  22. text = pytesseract.image_to_string(pil_img, lang='chi_sim')
  23. print(text)

代码解释

  1. 读取图片:使用cv2.imread()方法读取图片。
  2. 转换为灰度图cv2.cvtColor()方法将图片转换为灰度图,减少颜色干扰。
  3. 二值化处理cv2.threshold()方法进行二值化,提高文字与背景的对比度。
  4. 去噪(可选):使用cv2.fastNlMeansDenoising()方法去除图片噪声。
  5. 保存预处理后的图片(可选):将预处理后的图片保存到文件。
  6. 转换为PIL Image格式:使用Image.fromarray()方法将OpenCV格式的图片转换为PIL格式。
  7. OCR识别:与之前相同,使用pytesseract.image_to_string()方法进行识别。

实战案例:识别发票文字

假设我们需要从一张发票图片中提取关键信息,如发票号码、日期、金额等。

代码实现

  1. import cv2
  2. import numpy as np
  3. import pytesseract
  4. from PIL import Image
  5. import re
  6. def extract_invoice_info(image_path):
  7. # 预处理图片
  8. img = cv2.imread(image_path)
  9. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  10. thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
  11. # 转换为PIL Image格式
  12. pil_img = Image.fromarray(thresh)
  13. # OCR识别
  14. text = pytesseract.image_to_string(pil_img, lang='chi_sim')
  15. # 提取关键信息
  16. invoice_no_match = re.search(r'发票号码[::]?\s*(\d+)', text)
  17. date_match = re.search(r'日期[::]?\s*(\d{4}-\d{2}-\d{2})', text)
  18. amount_match = re.search(r'金额[::]?\s*([\d.]+)', text)
  19. invoice_no = invoice_no_match.group(1) if invoice_no_match else '未找到'
  20. date = date_match.group(1) if date_match else '未找到'
  21. amount = amount_match.group(1) if amount_match else '未找到'
  22. return {
  23. '发票号码': invoice_no,
  24. '日期': date,
  25. '金额': amount
  26. }
  27. # 示例使用
  28. info = extract_invoice_info('invoice.png')
  29. for key, value in info.items():
  30. print(f'{key}: {value}')

代码解释

  1. 预处理图片:与之前相同,进行灰度转换和二值化处理。
  2. OCR识别:使用pytesseract.image_to_string()方法识别图片中的文字。
  3. 提取关键信息:使用正则表达式从识别出的文本中提取发票号码、日期和金额。
  4. 返回结果:将提取到的信息以字典形式返回。

总结

在第44天的Python进阶学习中,我们深入探索了基于Tesseract-OCR的图片文字识别技术。通过详细的步骤和代码示例,我们学习了如何配置环境、进行基础识别、优化预处理步骤,并通过实战案例展示了如何从发票图片中提取关键信息。希望本文能够帮助读者高效掌握OCR技术,并在实际项目中应用。

相关文章推荐

发表评论