因此,基本上,我正在Google Colab中编写一个程序,该程序将使用python和opencv2通过网络摄像头检测面部。 “如果有帮助,我有Ubuntu 19.10”
import cv2
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
video_capture = cv2.VideoCapture(0)
while True:
ret, frame = video_capture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
这时,出现断言错误
Traceback (most recent call last)
<ipython-input-94-ca2ba51b9064> in <module>()
7 ret, frame = video_capture.read()
8
----> 9 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
error: OpenCV(4.1.2) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
我在运行此代码时没有使用网络摄像头
答案 0 :(得分:4)
!_src.empty()
表示您有空的frame
。
当cv2
无法从摄像机/文件/流中获取frame
时,它不会显示错误,但会在None
和{{1}中设置frame
} False
中的}-您必须检查以下值之一
ret
或
if frame is not None:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# ... other code ...
else:
print("empty frame")
exit(1)
或
if ret: # if ret is True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# ... other code ...
else:
print("empty frame")
exit(1)
或
if not ret:
print("empty frame")
exit(1)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# ... other code ...
顺便说一句:您不能使用较短的if frame is None:
print("empty frame")
exit(1)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# ... other code ...
,因为当它从相机获取图像时,if frame:
得到frame
会尝试分别检查每个单元格中的值,并显示警告使用numpy.array()
或.all()
-但.any()
为.all()
时.any()
或frame
可能会出错。
顺便说一句:有时None
在查找haarcascades文件时遇到问题。还有一个特殊的变量,它的文件夹路径为cv2
-.xml
-您可能需要
cv2.data.haarcascades
答案 1 :(得分:0)
哦,天哪!我刚刚意识到我正在Google Colab虚拟环境中工作,这就是为什么它无法连接到本地摄像机的原因。