问题描述

运行疲劳检测代码,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. 第二篇文章中评论区有人说是她图里坐标有误,但是我用了正确的坐标反而测不准,所以我还是用的是图中自带的坐标

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐