在Colab中使用pytesseract.image_to_data生成文本框时遭遇KeyError: 'PNG'错误的技术问询
解决pytesseract image_to_data在Colab中出现KeyError: 'PNG'的问题
别担心,这个错误和图片是JPG还是PNG格式没关系——image_to_data本身支持多种图像格式,包括JPG。你遇到的KeyError: 'PNG'其实是PIL库版本兼容或者图像对象传递方式导致的问题,下面给你几个可行的解决方案:
方案1:更新依赖库并改用PIL直接读取图片
Colab默认的PIL版本可能偏旧,和pytesseract的临时文件处理逻辑不兼容。先升级依赖,再用PIL直接读取图片(pytesseract原生支持PIL的Image对象,兼容性更好):
首先在Colab里执行安装/升级命令:
!apt install tesseract-ocr # 确保Colab安装了tesseract引擎 !pip install pytesseract pillow --upgrade
然后修改代码:
import pytesseract from pytesseract import Output from PIL import Image # 用PIL直接读取JPG图片 img = Image.open("a.jpg") # 调用image_to_data d = pytesseract.image_to_data(img, output_type=Output.DICT) print(d.keys())
方案2:如果必须用OpenCV读取,先转换格式再传递
如果你需要用OpenCV做预处理,记得把OpenCV读取的BGR格式转成RGB,再转换成PIL Image对象传给pytesseract:
import cv2 import pytesseract from pytesseract import Output from PIL import Image # OpenCV读取图片(默认BGR格式) img = cv2.imread("a.jpg") # 转换为RGB格式(PIL使用的是RGB) img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 转成PIL Image对象 pil_img = Image.fromarray(img_rgb) # 调用image_to_data d = pytesseract.image_to_data(pil_img, output_type=Output.DICT) print(d.keys())
为什么之前转PNG还是报错?
你尝试转PNG后依然出错,大概率是因为没有升级PIL库,或者转换后的图片对象还是通过OpenCV传递的——旧版本PIL在处理pytesseract生成的临时PNG文件时会触发这个KeyError,升级后就能解决;另外直接用PIL读取可以绕过OpenCV和pytesseract之间的格式适配问题。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

