logo

100天Python进阶:Tesseract-OCR实战图片文字识别

作者:c4t2025.09.23 10:51浏览量:0

简介:本文聚焦Python进阶学习第44天,深入探讨基于Tesseract-OCR的OCR图片文字识别技术。从Tesseract-OCR的安装配置、基础识别到高级优化,结合实战案例,助力读者掌握高效图片文字识别技能。

100天精通Python(进阶篇)——第44天:基于Tesseract-OCR实现OCR图片文字识别实战

引言

在当今数字化时代,信息以图像形式广泛存在,从扫描文档到社交媒体图片,如何高效、准确地提取图像中的文字信息成为了一项重要技能。OCR(Optical Character Recognition,光学字符识别)技术正是解决这一问题的关键。作为Python进阶学习的一部分,第44天我们将聚焦于使用Tesseract-OCR这一开源工具,实现图片文字识别的实战操作。Tesseract-OCR由Google维护,支持多种语言,且可通过Python轻松集成,是开发者进行OCR开发的理想选择。

Tesseract-OCR简介

技术背景

Tesseract-OCR最初由HP实验室开发,后转为开源项目,并被Google接管继续发展。它采用先进的图像处理和模式识别算法,能够识别多种字体和语言,包括中文、英文等。Tesseract-OCR的核心优势在于其高度的可定制性和扩展性,支持通过训练模型来提高特定场景下的识别准确率。

安装与配置

在开始实战之前,首先需要安装Tesseract-OCR及其Python封装库pytesseract。以Ubuntu系统为例,安装步骤如下:

  1. 安装Tesseract-OCR

    1. sudo apt update
    2. sudo apt install tesseract-ocr
    3. # 如需支持中文,还需安装中文语言包
    4. sudo apt install tesseract-ocr-chi-sim
  2. 安装Python封装库

    1. pip install pytesseract

    同时,确保Python环境中已安装Pillow库用于图像处理:

    1. pip install Pillow

基础识别实战

简单图片识别

首先,我们从一个简单的英文图片识别开始。假设我们有一张包含英文文本的图片example.png,使用pytesseract进行识别的代码如下:

  1. from PIL import Image
  2. import pytesseract
  3. # 指定Tesseract-OCR的安装路径(如果不在系统PATH中)
  4. # pytesseract.pytesseract.tesseract_cmd = r'/usr/bin/tesseract'
  5. # 打开图片文件
  6. image = Image.open('example.png')
  7. # 使用Tesseract进行OCR识别
  8. text = pytesseract.image_to_string(image)
  9. print(text)

运行上述代码后,控制台将输出图片中的英文文本。

中文图片识别

对于中文图片,只需在image_to_string方法中指定语言参数为'chi_sim'(简体中文)或'chi_tra'(繁体中文):

  1. text = pytesseract.image_to_string(image, lang='chi_sim')
  2. print(text)

高级识别技巧

图像预处理

为了提高识别准确率,通常需要对图像进行预处理,包括二值化、去噪、旋转校正等。以下是一个简单的图像预处理示例:

  1. from PIL import Image, ImageEnhance, ImageFilter
  2. def preprocess_image(image_path):
  3. # 打开图片
  4. image = Image.open(image_path)
  5. # 转换为灰度图
  6. image = image.convert('L')
  7. # 二值化处理
  8. threshold = 150
  9. table = []
  10. for i in range(256):
  11. if i < threshold:
  12. table.append(0)
  13. else:
  14. table.append(1)
  15. image = image.point(table, '1')
  16. # 去噪(可选)
  17. image = image.filter(ImageFilter.MedianFilter())
  18. # 增强对比度(可选)
  19. enhancer = ImageEnhance.Contrast(image)
  20. image = enhancer.enhance(2)
  21. return image
  22. # 预处理图片
  23. processed_image = preprocess_image('example_chinese.png')
  24. # 识别处理后的图片
  25. text = pytesseract.image_to_string(processed_image, lang='chi_sim')
  26. print(text)

批量识别与结果保存

在实际应用中,往往需要处理多张图片。以下是一个批量识别图片并保存结果的示例:

  1. import os
  2. def batch_ocr(image_folder, output_file, lang='eng'):
  3. with open(output_file, 'w', encoding='utf-8') as f:
  4. for filename in os.listdir(image_folder):
  5. if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
  6. image_path = os.path.join(image_folder, filename)
  7. try:
  8. image = Image.open(image_path)
  9. text = pytesseract.image_to_string(image, lang=lang)
  10. f.write(f"Image: {filename}\n")
  11. f.write(text)
  12. f.write("\n" + "-"*50 + "\n")
  13. except Exception as e:
  14. print(f"Error processing {filename}: {e}")
  15. # 批量识别图片文件夹中的图片,结果保存到txt文件
  16. batch_ocr('images', 'ocr_results.txt', lang='chi_sim')

实战案例:发票信息提取

假设我们需要从一张发票图片中提取关键信息,如发票号码、日期、金额等。这通常需要结合OCR识别和后续的自然语言处理或规则匹配。以下是一个简化的发票信息提取示例:

  1. import re
  2. def extract_invoice_info(text):
  3. # 假设发票号码格式为:发票号码:XXXXXX
  4. invoice_no_match = re.search(r'发票号码[::]\s*(\d+)', text)
  5. invoice_no = invoice_no_match.group(1) if invoice_no_match else '未找到'
  6. # 假设日期格式为:日期:YYYY-MM-DD
  7. date_match = re.search(r'日期[::]\s*(\d{4}-\d{2}-\d{2})', text)
  8. date = date_match.group(1) if date_match else '未找到'
  9. # 假设金额格式为:金额:XXXX.XX元
  10. amount_match = re.search(r'金额[::]\s*(\d+\.\d{2})元', text)
  11. amount = amount_match.group(1) if amount_match else '未找到'
  12. return {
  13. '发票号码': invoice_no,
  14. '日期': date,
  15. '金额': amount
  16. }
  17. # 假设我们已经通过OCR得到了发票文本
  18. invoice_text = """
  19. 发票号码:123456
  20. 日期:2023-05-20
  21. 金额:1000.00元
  22. ...其他信息...
  23. """
  24. info = extract_invoice_info(invoice_text)
  25. print(info)

总结与展望

通过第44天的学习,我们掌握了基于Tesseract-OCR实现图片文字识别的基本方法和高级技巧。从简单的英文识别到复杂的中文识别,再到图像预处理和批量识别,我们逐步深入了解了OCR技术的实际应用。未来,随着深度学习技术的发展,OCR的准确率和效率将进一步提升,为更多场景下的文字识别提供有力支持。作为Python开发者,掌握OCR技术将极大地拓宽我们的应用领域,从文档数字化到智能客服,无处不在的文字识别需求正等待着我们去探索和实现。

相关文章推荐

发表评论