pytesseract.image_to_string数字识别出错多出前置字符如何修复
问题修复方案
导致识别多输出前置6的核心原因是阈值处理后图像边缘残留噪点、裁剪区域边界的无效像素被误识别,可按以下步骤调整修复:
1. 收缩图像裁剪范围,移除边界无效像素
当前裁剪逻辑保留的边界大概率携带了窗口阴影、边框等冗余像素,往内收缩裁剪范围即可避免这部分内容进入识别环节:
# 原裁剪代码 im = im.crop((x1+640,y1+125,x2-130,y2-670)) # 修改为(可根据实际显示效果微调收缩数值) im = im.crop((x1+650,y1+135,x2-140,y2-680))
2. 优化预处理流程,清除细小噪点
在现有阈值处理后新增形态学开运算,主动过滤掉画面中尺寸极小的噪点:
thresh = 255 - cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1] # 新增去噪逻辑,内核大小可根据实际效果调整 kernel = np.ones((3,3), np.uint8) thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
3. 调整Tesseract识别参数
替换PSM参数为更适配单行纯数字识别的模式,同时匹配你保存截图时设置的600dpi,提升识别准确率:
# 原识别代码 data = pytesseract.image_to_string(thresh, lang='eng',config='--psm 13 --oem 3 -c tessedit_char_whitelist=0123456789') # 修改后 data = pytesseract.image_to_string(thresh, lang='eng',config='--psm 7 --oem 3 --dpi 600 -c tessedit_char_whitelist=0123456789')
4. 增加业务规则校验
因为你的场景为固定4位数字识别,可在输出前增加长度校验,直接过滤掉误识别的前置字符:
data = wording(data).strip() # 新增校验逻辑,长度超过4位时取最后4位即可 if len(data) > 4: data = data[-4:]
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

