【问题标题】:Error: 'tuple' object has no attribute 'shape'错误:“元组”对象没有属性“形状”
【发布时间】:2019-06-26 02:36:35
【问题描述】:

我一直在写一个关于人脸识别的autoencoencoder的代码,我使用的部分代码如下:

face_cascade = cv2.CascadeClassifier('C:/Users/PC/PycharmProjects/haarcascade_frontalface_default.xml')
print(face_cascade)
img = cv2.imread('C:/Users/PC/PycharmProjects/exmpforbike6/training_images/JenniferGroup.jpg')
print(img)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print("voici",gray)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)

for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    roi_gray = gray[y:y + h, x:x + w]
    roi_color = img[y:y + h, x:x + w]

a = []
for i in range(0, faces.shape[0]):
    a.append(gray[faces[i][1]:faces[i][1] + faces[i][3], faces[i][0]:faces[i][0] + faces[i][2]])

这是我得到的错误:

AttributeError: 'tuple' object has no attribute 'shape'

错误在这一行:

for i in range(0, faces.shape[0]):
    a.append(gray[faces[i][1]:faces[i][1] + faces[i][3], faces[i][0]:faces[i][0] + faces[i][2]])

知道如何修复它吗??

【问题讨论】:

标签: python keras deep-learning face-recognition


【解决方案1】:

查看 2016 年的 this 链接。

“问题的原因是detectMultiScale在没有匹配时返回一个空元组(),但在有匹配时返回一个numpy.ndarray”,所以你得到的AttributeError是有道理的。

您应该添加一些验证代码来捕获这种情况,并在使用.shape[0] 之前检查detectMultiScale 是否已返回结果,或者您的变量的数据类型是什么。

【讨论】:

  • 以后,如果问题重复,请将其标记为关闭。顺便说一句,多么糟糕的 API 设计!
  • 对不起,下次会做,我还在摸索。我同意,整个 Numpy/PyPlot/OpenCV 堆栈可以很容易获得结果,但有时也会令人沮丧。
  • 别担心,下次仅供参考。
  • 如果这解决了您的问题,请随时接受答案,以便将来参考。祝你有美好的一天
猜你喜欢
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
相关资源
最近更新 更多