'opencv video window not opening though sucess true and camera opens wbut no video window

Can somebody help me with finding error on the below code?

I am working on tutorial Face Detect Attendance system python opencv but cv fails to load camera....

I tried to catch success true...it does I get no error and yet cam window not showing.

cap = cv2.VideoCapture(0)
while True:
     success, img = cap.read()
     imgS = cv2.resize(img,(0,0),None,0.25,0.25)
     imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
     facesCurFrame = face_recognition.face_locations(imgS)
     encodesCurFrame = face_recognition.face_encodings(imgS,facesCurFrame)
     
     for encodeFace,faceLoc in zip(encodesCurFrame,facesCurFrame):
         matches = face_recognition.compare_faces(encodeListKnown,encodeFace)
         faceDis = face_recognition.face_distance(encodeListKnown,encodeFace)
         #print(faceDis)
         matchIndex = np.argmin(faceDis)
         
         if matches[matchIndex]:
             name = classNames[matchIndex].upper()
             #print(name)
             y1,x2,y2,x1 = faceLoc
             y1, x2, y2, x1 = y1*4,x2*4,y2*4,x1*4
             cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)
             cv2.rectangle(img,(x1,y2-35),(x2,y2),(0,255,0),cv2.FILLED)
             cv2.putText(img,name,(x1+6,y2-6),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),2)
             markAttendance(name)
             cv2.imshow('Webcam',img)
             cv2.waitKey(1)


Solution 1:[1]

Keep below two lines out of the for loop.

cv2.imshow('Webcam',img)
cv2.waitKey(1)

Code will look like this

cap = cv2.VideoCapture(0)
while True:
     success, img = cap.read()
     imgS = cv2.resize(img,(0,0),None,0.25,0.25)
     imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
     facesCurFrame = face_recognition.face_locations(imgS)
     encodesCurFrame = face_recognition.face_encodings(imgS,facesCurFrame)
     
     for encodeFace,faceLoc in zip(encodesCurFrame,facesCurFrame):
         matches = face_recognition.compare_faces(encodeListKnown,encodeFace)
         faceDis = face_recognition.face_distance(encodeListKnown,encodeFace)
         #print(faceDis)
         matchIndex = np.argmin(faceDis)
         
         if matches[matchIndex]:
             name = classNames[matchIndex].upper()
             #print(name)
             y1,x2,y2,x1 = faceLoc
             y1, x2, y2, x1 = y1*4,x2*4,y2*4,x1*4
             cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)
             cv2.rectangle(img,(x1,y2-35),(x2,y2),(0,255,0),cv2.FILLED)
             cv2.putText(img,name,(x1+6,y2-6),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),2)
             markAttendance(name)
     cv2.imshow('Webcam',img)
     cv2.waitKey(1)

Reason: In your current code, opencv will not open the window unless there is a detection as it is inside the for loop.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Anurag.k