使用pytesseract提取图片数字失败,无文本返回求助
解决pytesseract提取图片数字返回空的问题
问题原因分析
你提供的图片是黑底白字样式,而Tesseract OCR默认对白底黑字的识别效果更好;同时当前的PSM参数(--psm 11)适配稀疏文本场景,对这类集中的数字块适配性不佳,另外配置中的引号转义也存在潜在问题。
解决方案步骤
1. 图片预处理:反转颜色增强对比度
将黑底白字转为白底黑字,可大幅提升识别准确率,通过PIL的ImageOps模块即可实现。
2. 调整PSM参数
针对单块数字,推荐使用--psm 6(假设输入为单一文本块)或--psm 8(识别单个词),比--psm 11更适配当前场景。
3. 修正白名单配置
直接用单引号包裹白名单字符,避免转义双引号带来的格式问题。
修改后的完整代码
from PIL import Image, ImageOps import pytesseract # 打开图片并预处理:反转颜色(黑底变白底,白字变黑字) im = Image.open('time.png') inverted_im = ImageOps.invert(im.convert('RGB')) # 调整后的配置:使用psm 6,白名单用单引号 custom_oem_psm_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=\'0123456789\'' text = pytesseract.image_to_string(inverted_im, config=custom_oem_psm_config) # 去除多余空白并打印结果 print(text.strip())
额外验证点
- 确保Tesseract已安装正确的语言包(默认包含英文数字,无需额外安装)
- 确认
time.png路径正确,可尝试使用绝对路径避免路径问题
内容的提问来源于stack exchange,提问作者JAMSHAID
相关产品推荐
相关产品推荐

