You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:01:29