You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 21:42:48