如何用Python提取多图片文本并导出指定格式CSV?
解决图片文本提取与CSV导出问题
我来帮你一步步搞定这两个问题~首先你原来的代码只是读取了图片,还缺少**文本提取(OCR)**的核心步骤,我们需要借助Tesseract这个OCR工具来完成。
准备工作
先安装必要的依赖包:
- 安装Python库:
pip install opencv-python pytesseract pandas - 安装Tesseract OCR引擎:
- Windows:从Tesseract官方仓库下载安装包,记得勾选添加到系统路径(或者后续在代码里手动指定路径)
- Mac:
brew install tesseract - Linux:
sudo apt-get install tesseract-ocr
问题1:查看每张图片提取出的文本
我们可以在循环里加入OCR提取逻辑,然后直接打印每张图片的提取结果。完整代码如下:
import os import glob import cv2 import pytesseract import pandas as pd # Windows用户如果没把Tesseract加入系统路径,需要手动指定路径 # pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' img_dir = "MyFolder" # 你的图片文件夹路径 data_path = os.path.join(img_dir,'*g') # 匹配jpg/png等图片格式 files = glob.glob(data_path) # 存储图片编号和对应文本的列表 image_text_list = [] for img_num, file_path in enumerate(files, start=1): # 读取图片 img = cv2.imread(file_path) # 转为灰度图(提升OCR识别准确率) gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 提取图片文本 extracted_text = pytesseract.image_to_string(gray_img) # 清理文本:去除多余空格、换行 cleaned_text = extracted_text.strip().replace('\n', ' ') # 打印每张图片的提取结果(解决问题1) print(f"Image_no. {img_num}: {cleaned_text}") # 将数据存入列表,为导出CSV做准备 image_text_list.append({ "Image_no.": img_num, "Text": cleaned_text })
运行这段代码后,控制台就会逐个打印每张图片的编号和提取出的文本啦。
问题2:导出图片名称及提取文本到CSV文件
我们可以用pandas来快速生成符合要求的CSV文件,在上面的代码基础上,添加以下代码即可:
# 将列表转为DataFrame df = pd.DataFrame(image_text_list) # 导出CSV,index=False表示不保存索引列,utf-8-sig避免中文乱码 df.to_csv("image_text_results.csv", index=False, encoding='utf-8-sig') print("CSV文件已成功导出到当前目录!")
导出的CSV文件会有两列:Image_no.(从1开始的图片编号)和Text(对应的提取文本)。如果你想用图片文件名代替编号,只需要把img_num换成os.path.basename(file_path)即可,修改后的代码片段如下:
# 替换循环里的存储逻辑 image_text_list.append({ "Image_no.": os.path.basename(file_path), # 用图片文件名作为编号 "Text": cleaned_text })
内容的提问来源于stack exchange,提问作者lk165001




