使用PIL加载图片时im_test为None报错,无法调用fastai的learn.predict
问题原因分析
- 变量未定义赋值:你代码里的
im_test从始至终没有被赋值,直接调用im_test.verify()时,它就是None,自然触发AttributeError。实际打开的图片对象是m_test,但后续操作错误地用了未初始化的im_test。 - PIL的
verify()特性:就算修正变量名,verify()方法本身返回None,而且调用它会把图片文件的指针移到末尾,后续直接用原对象读取数据会出问题,必须重新打开图片。
解决方法
调整代码,修正变量名并正确处理verify()后的图片对象:
import io import os from PIL import Image test_image = os.path.join("/content", "drive", "MyDrive", "Colab Notebooks", "prediction.png") # 正确赋值图片对象 im_test = Image.open(test_image) # 验证图片完整性,verify无返回值,无需赋值 im_test.verify() # 验证后重新打开,因为verify已将文件指针移到末尾 im_test = Image.open(test_image) # 加载图片数据 im_test.load() # 现在可正常传入learn.predict # result = learn.predict(im_test)
补充说明
Image.verify()仅用于检查图片是否损坏,没有返回值,不能用im_test = im_test.verify()这种写法,否则会让im_test变成None。- 调用
verify()后,原图片对象无法再读取数据,必须重新调用Image.open()获取可用的图片实例。
内容的提问来源于stack exchange,提问作者IPSita
相关产品推荐
相关产品推荐

