!_src.empty()
означает, что у вас пусто frame
.
Когда cv2
не может получить frame
с камеры / файла / потока, тогда не отображается ошибка, но устанавливается None
в 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
.
КСТАТИ: Иногда cv2
имеет проблему с поиском файла haarcascades. И есть специальная переменная с путем к папке с .xml
- cv2.data.haarcascades
- и вам может понадобиться
faceCascade = cv2.CascadeClassifier( os.path.join(cv2.data.haarcascades, "haarcascade_frontalface_default.xml") )