Pytesseract无法识别20x10低分辨率图像中的数字该如何解决?
低分辨率数字识别优化方案
Tesseract默认配置对20x10这类极小分辨率的文本适配性极差,没有做预处理和参数调整的情况下无法正确识别数字,可按以下步骤优化:
- 图像放大:先将原始小分辨率图像放大3~5倍,使用PIL的LANCZOS插值算法保证放大后数字边缘清晰
- 限制识别范围:给Tesseract传入参数,只允许识别0-9的数字,避免非数字字符的干扰
- 调整页面分割模式:使用
--psm 8参数,告诉Tesseract将输入图像识别为单个单词,适配短数字的识别场景
修改后可直接运行的代码如下:
import pytesseract as pt from PIL import Image pt.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" # 读取原始图像 img = Image.open('foo.PNG') # 放大3倍,用LANCZOS插值保证清晰度,旧版本PIL报错可替换为Image.LANCZOS img = img.resize((img.width * 3, img.height * 3), Image.Resampling.LANCZOS) # 配置识别参数:psm8单单词识别,仅识别数字 custom_config = r'--psm 8 -c tessedit_char_whitelist=0123456789' text = pt.image_to_string(img, config=custom_config) print(text.strip())
如果调整后仍有识别误差,可额外增加二值化预处理步骤,把图像转为黑白高对比度样式,插入到resize步骤之后即可:
# 二值化预处理,阈值127可根据实际图像明暗调整 img = img.convert('L') threshold = 127 img = img.point(lambda p: 255 if p > threshold else 0)
内容的提问来源于stack exchange,提问作者Daniel Afriyie
相关产品推荐
相关产品推荐

