0
votes

Here is my code :

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascase_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

cap = cv2.VideoCapture(0)

while True:
    ret, img = cap.read()
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray,1.3,5)
    for (x,y,w,h) in faces:
        cv2.rectangle(img, (x,y), (x+w, y+h), (255,0,0), 2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]

        eye = eye_cascade.detectMultiScale(roi_gray)
        for (ex,ey,ew,eh) in eye:
            cv2.rectangle(roi_color, (ex,ey), (ex+ew, ey+eh), (0,255,0), 2 )
    cv2.imshow('img',img)
    k= cv2.waitKey(30) & 0xff 
    if k == 27:``
        break

cap.release()
cap.destroyAllWindows()

These are the errors I'm getting:

error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

error Traceback (most recent call last) in 3 while True: 4 ret, img = cap.read() ----> 5 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 6 faces = face_cascade.detectMultiScale(gray,1.3,5) 7 for (x,y,w,h) in faces:

error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

1

1 Answers

0
votes

There could be numerous reasons as to why it doesn't work (eg. some OS will require that you grant permission to your term to access the webcam), however there's a couple of issues with your code:

  • start of the while loop: you don't check the value of the parameter ret. It's good practice to check its value with a small check like if not ret: break to exit the loop. That won't help with your webcam not working, but that will prevent the error that you are seeing (retis False, so img is likely empty and had no data)
  • End of your code. destroyAllWindows is a method in the cv2 namespace, not a property of your capture. You should call cv2.destroyAllWindows() instead of cap.destroyAllWindows()