(AttributeError:“ NoneType”对象没有属性“ __array_interface__”)是什么意思?

时间:2019-09-14 21:43:32

标签: python arrays numpy model nonetype

我正在尝试制作一个机器学习程序,该程序将细胞图像分类为受感染或未感染。我在一个单独的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__'

有人知道为什么会这样吗?

1 个答案:

答案 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来自上一行img1documentation告诉我们(某种程度上-因为它试图同时记录C ++和Python版本;您在这里必须填写一些空白)CV2在img1 = cv2.imread(img)时返回None。 / p>

仔细检查您的文件名(如果文件名来自处理字符串,请检查意外的空格,然后仔细检查文件名的扩展名);仔细检查文件 path (如果提供了相对路径,请仔细检查工作目录是什么-您可能会感到惊讶!);并仔细检查文件本身(Python进程是否有权打开它?图像是否已损坏?)。