我正在尝试制作一个机器学习程序,该程序将细胞图像分类为受感染或未感染。我在一个单独的python文件上创建了模型,并正在创建一个脚本,该脚本将在图像上对其进行分类。这是完整的代码:
def convert(img):
img1 = cv2.imread(img)
img = Image.fromarray(img1, 'RGB')
image = img.resize((50, 50))
return (np.array(image))
def cell_name(label):
if label == 0:
return ("Paracitized")
if label == 1:
return ("Uninfected")
def predict(file):
print ("Predicting...please wait")
ar = convert(file)
ar = ar/255
label = 1
a = []
ar.append(ar)
a = np.array(a)
score = loaded_model.predict(a, verbose=1)
print (score)
label_index=np.argmax(score)
print(label_index)
acc=np.max(score)
Cell=cell_name(label_index)
return (Cell,"The predicted Cell is a "+Cell+" with accuracy = "+str(acc))
print(predict("test/paracitized.png"))
这是完整的错误消息:
File "malaria_img.py", line 15, in convert
img = Image.fromarray(img1, 'RGB')
File "/Library/Python/2.7/site-packages/PIL/Image.py", line 2526, in fromarray
arr = obj.__array_interface__
AttributeError: 'NoneType' object has no attribute '__array_interface__'
有人知道为什么会这样吗?
答案 0 :(得分:2)
arr = obj.__array_interface__
AttributeError: 'NoneType' object has no attribute '__array_interface__'
AttributeError
意味着有一个Error
与一个Attribute
请求有关。通常,当您写x.y
时,y
是x的attribute
。
'NoneType' object
表示类型为NoneType
的对象。恰好有一个这样的对象,称为None
(您应该熟悉它)。实际上,它名为has no attribute
的{{1}}。
问题是我们要从__array_interface__
中请求此属性,但是obj
的值为obj
。它应该是某种类似数组的对象。这不是我们自己的代码;相反,None
是我们传递给obj
调用的img1
的PIL内部名称。
我们自己的代码中的fromarray
来自上一行img1
。 documentation告诉我们(某种程度上-因为它试图同时记录C ++和Python版本;您在这里必须填写一些空白)CV2在img1 = cv2.imread(img)
时返回None
。 / p>
仔细检查您的文件名(如果文件名来自处理字符串,请检查意外的空格,然后仔细检查文件名的扩展名);仔细检查文件 path (如果提供了相对路径,请仔细检查工作目录是什么-您可能会感到惊讶!);并仔细检查文件本身(Python进程是否有权打开它?图像是否已损坏?)。