关于Spyder报错‘NoneType‘ object has no attribute ‘shape‘解决
问题描述运行疲劳检测代码,Spyder关于AttributeError: 'NoneType' object has no attribute 'shape'问题,上网找了很多很多解法,结果都没成功解决。绞尽脑汁都没想出来后面看到有个博主说其实是那个语句说是,没读到图像导致返回值是空,导致无法运行。然后我就想到是那必定是图像没被读进去,应该是摄像头出了问题。因为我是在虚拟机中用的usb摄像头,程序
问题描述
运行疲劳检测代码,Spyder关于AttributeError: 'NoneType' object has no attribute 'shape'
问题,上网找了很多很多解法,结果都没成功解决。绞尽脑汁都没想出来
后面看到有个博主说其实是那个语句说是,没读到图像导致返回值是空,导致无法运行。然后我就想到是那必定是图像没被读进去,应该是摄像头出了问题。
因为我是在虚拟机中用的usb摄像头,程序有时可以运行有时不可以。然后我就去弄摄像头了
报错原因:调用的对象没有‘shape’属性,也就是没有读取到图片
,参考文章:AttributeError: ‘NoneType‘ object has no attribute ‘shape
所以另外写了个代码测试自己的摄像头是否能正确运行,大家也可以用这个代码看下,是不是摄像头没读进去的问题,如果你能正确开启摄像头,那么这个问题应该也能解决。
代码如下:
import cv2
#打开本地摄像头
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
ret, frame = cap.read()
if frame is None:
print("Cannot read")
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
然后我参考的疲劳检测代码是这个博主的文章:Dlib模型之驾驶员疲劳检测一和Dlib模型之驾驶员疲劳检测二
里面的注意事项:
1.关于她代码中的这行语句
predictor = dlib.shape_predictor('D:/myworkspace/JupyterNotebook/fatigue_detecting/model/shape_predictor_68_face_landmarks.dat')
存储路径是要写你自己下载的那个.dat文件的存储路径,不能直接用她的,路径最好不要含有中文。
2. 运行出现我说得那个问题:AttributeError: 'NoneType' object has no attribute 'shape'
,请看自己摄像头能不能运行。或者路径含有中文(不过路径有中文这个我不确定能不能解决)
3. 另外我在运行还有个bug,明明一个程序可以运行,但是另个就不行了。解决方法:让虚拟机也连接到电脑自带的摄像头,这样自己用的usb摄像头也就可以使用了。
4. 第二篇文章中评论区有人说是她图里坐标有误,但是我用了正确的坐标反而测不准,所以我还是用的是图中自带的坐标
更多推荐
所有评论(0)