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

使用pytesseract读取水表数字返回空字符串,求解决思路

解决Tesseract读取水表数字返回空字符串的问题

你的核心问题是阈值处理方向错误:水表数字是黑底白字,原代码用THRESH_BINARY会将白色数字转为黑色、黑色背景转为白色,和Tesseract默认识别白底黑字的逻辑冲突,导致无法识别。以下是针对性的改进方案:

改进步骤

  • 先将彩色图转为灰度图,减少颜色干扰
  • 使用THRESH_BINARY_INV反转阈值,得到白底黑字的图像
  • 增加降噪处理,提升识别稳定性
  • 指定Tesseract仅识别数字,缩小识别范围

修改后的代码

import cv2
import numpy as np
import pytesseract

image = "./asset/test5.jpg"
# 读取图片并转为灰度图
img = cv2.imread(image)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 高斯模糊降噪(可选但能提升识别率)
blurred_img = cv2.GaussianBlur(gray_img, (3, 3), 0)

# 反转阈值处理,生成白底黑字的图像
ret, processed_img = cv2.threshold(blurred_img, 125, 255, cv2.THRESH_BINARY_INV)

# 配置Tesseract仅识别数字,指定识别模式
custom_config = r'--psm 7 --oem 3 -c tessedit_char_whitelist=0123456789'
text = pytesseract.image_to_string(processed_img, config=custom_config)

# 输出结果(去除多余空白)
print(text.strip())

参数说明

  • THRESH_BINARY_INV:反转二值化,将黑底白字转为白底黑字,匹配Tesseract默认识别逻辑
  • GaussianBlur:消除图片细微噪点,避免干扰字符识别
  • custom_config:
    • --psm 7:告诉Tesseract当前是单行文本(如果水表数字是分散的单个字符,可改为--psm 10)
    • tessedit_char_whitelist=0123456789:限定仅识别数字,过滤无关干扰
  • 若识别效果仍不佳,可调整阈值参数(比如把125改为100或150),或尝试形态学膨胀操作让数字边缘更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:20:43