Python 3.6环境调用Tesseract的image_to_osd函数报错,Python 3.8环境正常的解决方法咨询
先看你给出的报错信息,核心问题其实是Too few characters. Skipping this page——Tesseract在做方向检测时,找不到足够的字符来完成分析。至于为什么Python3.8能正常运行,大概率是两个环境里的pytesseract版本或者PIL/Pillow版本不兼容导致的,毕竟Python3.6早就停止官方支持了,很多新库版本对它的适配性会打折扣。
下面是针对Python3.6环境的具体修复步骤:
1. 安装和Python3.6兼容的pytesseract旧版本
你用的Tesseract是v5.0.0.20190623,后续更新的pytesseract版本可能已经放弃了对Python3.6的支持。试试安装2020年的0.3.7版本,这个版本对Python3.6友好,同时能适配Tesseract v5.x:
pip install pytesseract==0.3.7
2. 同步PIL/Pillow到兼容版本
Python3.6对应的Pillow最高只能支持到9.5.0版本,太高或太低的版本都可能导致图片处理时参数传递异常,让Tesseract识别不到足够字符。执行下面的命令安装兼容版本:
pip install pillow==9.5.0
3. 手动指定图片分辨率
报错里的Invalid resolution 0 dpi警告也会干扰识别,你可以在调用image_to_osd前给图片手动设置DPI,或者直接通过config参数指定:
from PIL import Image # 方式一:打开图片后设置DPI rotated = Image.open("你的图片路径.jpg") rotated.info['dpi'] = (300, 300) # 设为300DPI,常见印刷分辨率 # 方式二:调用时通过config参数指定 osd_output = pytesseract.image_to_osd(rotated, config='--dpi 300') angle_rotated_image = re.search('(?<=Rotate: )\d+', osd_output).group(0)
手动指定DPI能避免Tesseract自动估算分辨率的误差,也能提升字符识别的准确性。
4. 给图片做预处理(如果字符太少/模糊)
如果图片本身字符少或者清晰度不够,Python3.6环境下的库处理效果可能不如3.8,你可以先做简单的预处理增强:
from PIL import Image, ImageEnhance # 增强对比度,让字符更清晰 enhancer = ImageEnhance.Contrast(rotated) rotated = enhancer.enhance(2.0) # 如果字符太小,放大图片(用LANCZOS算法保证清晰度) rotated = rotated.resize((rotated.width*2, rotated.height*2), Image.LANCZOS)
预处理后再调用image_to_osd,Tesseract就能检测到足够的字符完成方向识别了。
5. 确认Tesseract路径配置正确
虽然3.8环境能用,但3.6环境可能没正确配置Tesseract的路径。你可以在脚本开头手动指定:
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
确保这个路径和你3.8环境里的Tesseract路径完全一致,避免版本不一致的问题。
内容的提问来源于stack exchange,提问作者Aimedk

