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

如何让EasyOCR识别空白区域时返回0或空字符串

解决EasyOCR空白区域返回空标识的实现方法

待识别示例图片

原生EasyOCR的readtext接口默认仅返回有有效识别内容的结果,不会主动返回空白区域的标识,要实现你的需求可以按以下方案处理:

核心思路

你的需求本质是要获取指定位置的识别状态,所以需要先明确所有待检测的目标区域,再逐一识别判断:

  • 如果你的图片布局固定(所有数字出现的位置不会变化),直接预定义所有待检测区域的坐标,逐个裁剪识别即可,这是最简单稳定的方案
  • 如果布局不固定,可以先做表格/单元格检测提取所有待检测区域,再逐一识别

实现代码(固定布局场景)

import cv2 as cv
import easyocr

reader = easyocr.Reader(['en'])

defaultImage = cv.imread('numeros.png')
defaultImage = defaultImage[100:570]
greyImage = cv.cvtColor(defaultImage, cv.COLOR_BGR2GRAY)

# 替换为你实际需要检测的所有区域坐标,格式为:(左上x坐标, 左上y坐标, 右下x坐标, 右下y坐标)
target_rois = [
    (20, 30, 80, 90),
    (100, 30, 160, 90),
    (180, 30, 240, 90),
    # 继续添加其余待检测区域
]

result = []
# 置信度阈值,识别结果置信度低于该值则判定为区域无数字
conf_threshold = 0.5

for (x1, y1, x2, y2) in target_rois:
    # 裁剪单个待检测区域
    roi = greyImage[y1:y2, x1:x2]
    # 开启detail=1参数,同时获取识别位置、文本、置信度,加allowlist限制仅识别数字降低误判
    ocr_output = reader.readtext(roi, detail=1, allowlist='0123456789')
    if not ocr_output or ocr_output[0][2] < conf_threshold:
        # 无识别结果或置信度不足,返回空字符串
        result.append("")
    else:
        result.append(ocr_output[0][1])

print(result)

补充说明

  • 代码中添加的allowlist='0123456789'参数可以限制EasyOCR仅识别数字,大幅降低误识别概率,符合你的使用场景
  • 置信度阈值可以根据你的实际识别效果调整,一般设为0.5~0.7即可
  • 如果你不会提取区域坐标,可以用系统自带的画图工具打开处理后的灰度图,鼠标悬浮到对应位置就能看到坐标值

内容的提问来源于stack exchange,提问作者Artur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:18:03