PyTesseract无法识别numpy数组与PIL图像的问题求助
PyTesseract图像对象识别失败的解决方法
针对OpenCV numpy数组的处理
OpenCV读入的图像默认是BGR格式,且部分色彩空间(如HSV)不被PyTesseract支持,直接传入会导致识别失败,可按以下方式修正:
- 灰度图优化:单通道灰度图需增强对比度,建议添加二值化处理:
_, img_thresh = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV) print("Test 4修正: " + pytesseract.image_to_string(img_thresh))
- 转PIL图像传递:PyTesseract对PIL图像的兼容性更好,将OpenCV数组转为PIL对象后再传入:
from PIL import Image pil_img_rgb = Image.fromarray(img_rgb) print("Test 2修正: " + pytesseract.image_to_string(pil_img_rgb))
- 废弃无效格式:BGR、HSV格式并非Tesseract支持的输入格式,无需尝试直接传入,必须转成RGB或灰度图后处理。
针对PIL图像对象的处理
直接读取的PIL图像可能因模式问题无法识别,可通过模式转换+配置参数优化:
# 转为灰度模式 img2_gray = img2.convert('L') # 指定识别配置:单文本块模式+字符白名单 custom_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' print("Test 6修正: " + pytesseract.image_to_string(img2_gray, config=custom_config))
其中--psm 6指定图像为单一均匀文本块,--oem 3使用默认OCR引擎,字符白名单可缩小识别范围,提升准确率。
版本兼容优化
当前使用的PyTesseract 0.3.10与Tesseract 5.2.0理论兼容,但升级PyTesseract到最新版本可避免潜在适配问题:
pip install --upgrade pytesseract
核心原因
直接传入图像路径时,Tesseract内部会自动完成格式校验与转换;但传入numpy数组或PIL对象时,需严格匹配Tesseract支持的格式(RGB/单通道灰度图,且对比度足够),否则会识别失败。
内容的提问来源于stack exchange,提问作者Radicool
相关产品推荐
相关产品推荐

