使用EasyOCR批量处理目录图片仅输出单张结果,如何解决?
问题分析与代码修正
你的代码存在两个核心问题导致仅输出单张图片结果:
print语句位于for循环外部,仅会在遍历结束后输出最后一张图片的识别结果- 使用
'w'(写入)模式打开文件,每次都会清空原有内容,即使print在循环内也会覆盖之前的结果
另外还有两处细节需要修正:
- 缺失
easyocr库的导入语句,运行时会报错 os.listdir会返回目录内所有文件(包括非图片),需过滤出图片格式避免读取错误
修改后的代码
import cv2 import os import easyocr # 补充必要的库导入 # 初始化EasyOCR识别器 reader = easyocr.Reader(['en']) # 用with语句管理文件,自动处理打开/关闭,避免资源泄漏 with open('output.txt', 'w', encoding='utf-8') as output_file: # 定义需要处理的图片格式 valid_image_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.tiff') # 遍历目标目录内的文件 for image_name in os.listdir("ocr-source"): # 仅处理图片格式的文件 if image_name.lower().endswith(valid_image_extensions): # 拼接完整图片路径,兼容不同操作系统 image_path = os.path.join("ocr-source", image_name) image = cv2.imread(image_path) # 确保图片读取成功再进行识别 if image is not None: result = reader.readtext(image, allowlist='0123456789', detail=0) # 将当前图片的识别结果写入文件,每行对应一张图片 output_file.write(f"{image_name} {result}\n") else: # 记录读取失败的图片 output_file.write(f"{image_name} 图片读取失败\n")
关键修改点说明
- 将文件写入逻辑放入
for循环内部,确保每张图片的结果都能被记录 - 使用
with语句管理文件,既安全又无需手动关闭文件 - 增加图片格式过滤,避免处理非图片文件导致的错误
- 加入图片读取有效性判断,防止损坏图片中断程序运行
- 使用
os.path.join拼接路径,提升代码跨平台兼容性
内容的提问来源于stack exchange,提问作者Fullerton
相关产品推荐
相关产品推荐

