使用pytesseract识别图片数字输出异常 寻求更优图像文本识别方案
数字识别问题解决方案
核心问题原因
你用pytesseract识别出错的核心原因是未提前做图像预处理,原始图片带背景噪点、数字为特定彩色,不符合tesseract默认的识别输入要求,且没有限定识别字符范围导致输出乱码。
方案1:pytesseract + 图像预处理(改动最小)
先通过OpenCV对图像做预处理,提取蓝色数字区域二值化后再识别,代码示例如下:
import cv2 import numpy as np import pytesseract # 读取原始图像 img = cv2.imread("mask2.png") # 转HSV色彩空间提取蓝色区域 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 蓝色阈值范围,可根据实际效果微调 lower_blue = np.array([100, 40, 40]) upper_blue = np.array([140, 255, 255]) mask = cv2.inRange(hsv, lower_blue, upper_blue) # 形态学操作去除噪点 kernel = np.ones((2, 2), np.uint8) mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) # 限定仅识别数字,psm 7表示按单行文本识别 number = pytesseract.image_to_string(mask, config='--psm 7 -c tessedit_char_whitelist=0123456789') print(number.strip())
方案2:用PaddleOCR替代tesseract(准确率更高)
如果预处理后tesseract识别效果仍不稳定,推荐换用PaddleOCR,对低分辨率特定字符的识别准确率远高于tesseract,无需复杂预处理即可直接识别,代码示例如下:
from paddleocr import PaddleOCR # 初始化OCR,关闭方向检测、限定识别数字 ocr = PaddleOCR(use_angle_cls=False, lang='en', show_log=False) result = ocr.ocr("mask2.png", cls=False) # 提取识别结果 number = result[0][0][1][0].strip() print(number)
安装依赖只需执行:pip install paddlepaddle paddleocr 即可。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

