Python实战:批量图片文字识别并导出至Excel

作者:起个名字好难2024.08.30 13:14浏览量:302

简介:本文将介绍如何使用Python结合OCR(光学字符识别)技术和Pandas库,实现批量识别图片中的文字,并将结果整理存储到Excel文件中。无需复杂设置,几行代码即可搞定。

引言

在日常工作和学习中,我们经常会遇到需要从图片中提取文字的场景,比如扫描件、截图等。手动输入不仅效率低下,还容易出错。幸运的是,Python提供了强大的库来帮助我们自动化这一过程。本文将指导你如何使用Python的pytesseract(一个Tesseract-OCR的Python封装)和Pillow(Python Imaging Library的一个分支)来识别图片中的文字,并使用pandasopenpyxl将结果保存到Excel文件中。

环境准备

首先,确保你的Python环境已经安装以下库:

  • Pillow:用于图像处理
  • pytesseract:用于OCR识别
  • pandas:用于数据处理
  • openpyxl:用于写入Excel文件

如果没有安装,可以通过pip安装:

  1. pip install Pillow pytesseract pandas openpyxl

注意:pytesseract需要Tesseract-OCR引擎的支持,你需要从Tesseract GitHub页面下载并安装它。安装完成后,需要设置环境变量TESSDATA_PREFIX指向Tesseract的数据文件目录,或者将Tesseract的执行文件路径添加到系统的PATH变量中。

编写代码

1. 导入必要的库

  1. import pytesseract
  2. from PIL import Image
  3. import pandas as pd
  4. import os

2. 配置Tesseract路径(如果需要)

  1. pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 示例路径,根据实际情况修改

3. 编写函数识别图片中的文字

  1. def ocr_image(image_path):
  2. img = Image.open(image_path)
  3. text = pytesseract.image_to_string(img, lang='chi_sim') # 使用中文简体模型
  4. return text

4. 批量处理图片并保存结果到DataFrame

  1. def process_images(folder_path, output_file):
  2. results = []
  3. for filename in os.listdir(folder_path):
  4. if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff', '.gif')):
  5. image_path = os.path.join(folder_path, filename)
  6. text = ocr_image(image_path)
  7. results.append({'filename': filename, 'text': text})
  8. df = pd.DataFrame(results)
  9. df.to_excel(output_file, index=False, engine='openpyxl')
  10. print(f'Results saved to {output_file}')

5. 调用函数

  1. folder_path = 'path_to_your_images' # 图片文件夹路径
  2. output_file = 'output.xlsx' # 输出Excel文件名
  3. process_images(folder_path, output_file)

注意事项

  • 确保图片路径和文件名正确无误。
  • 根据需要调整tesseract_cmd的路径。
  • 根据图片中的文字语言,选择合适的Tesseract语言包(在上述代码中为lang='chi_sim',表示中文简体)。
  • 如果图片中的文字方向不是水平的,可能需要使用额外的参数来调整OCR识别。

结论

通过上述步骤,你可以轻松实现图片文字的批量识别,并将结果整理存储到Excel文件中。这不仅提高了工作效率,还减少了人为错误。Python的强大功能和丰富的库使得这类自动化任务变得简单可行。希望这篇文章对你有所帮助!