如何让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
相关产品推荐
相关产品推荐

