Use return boolean to detect effective capture

Actually an image is always returned but empty
This commit is contained in:
Andrea Lanfranchi 2024-02-21 15:56:47 +01:00
parent 810dfac4fe
commit 051a8d3172
No known key found for this signature in database
GPG Key ID: 2D623A60BB279915

View File

@ -68,9 +68,8 @@ def analysis(
cap = cv2.VideoCapture(source) # webcam cap = cv2.VideoCapture(source) # webcam
while True: while True:
_, img = cap.read() has_frame, img = cap.read()
if not has_frame:
if img is None:
break break
# cv2.namedWindow('img', cv2.WINDOW_FREERATIO) # cv2.namedWindow('img', cv2.WINDOW_FREERATIO)
@ -111,36 +110,34 @@ def analysis(
detected_faces = [] detected_faces = []
face_index = 0 face_index = 0
for x, y, w, h in faces: for x, y, w, h in faces:
if w > 130: # discard small detected faces if w <= 130: # discard small detected faces
continue
face_detected = True
if face_index == 0:
face_included_frames += 1 # increase frame for a single face
face_detected = True cv2.rectangle(
if face_index == 0: img, (x, y), (x + w, y + h), (67, 67, 67), 1
face_included_frames = ( ) # draw rectangle to main image
face_included_frames + 1
) # increase frame for a single face
cv2.rectangle( cv2.putText(
img, (x, y), (x + w, y + h), (67, 67, 67), 1 img,
) # draw rectangle to main image str(frame_threshold - face_included_frames),
(int(x + w / 4), int(y + h / 1.5)),
cv2.FONT_HERSHEY_SIMPLEX,
4,
(255, 255, 255),
2,
)
cv2.putText( detected_face = img[int(y) : int(y + h), int(x) : int(x + w)] # crop detected face
img,
str(frame_threshold - face_included_frames),
(int(x + w / 4), int(y + h / 1.5)),
cv2.FONT_HERSHEY_SIMPLEX,
4,
(255, 255, 255),
2,
)
detected_face = img[int(y) : int(y + h), int(x) : int(x + w)] # crop detected face # -------------------------------------
# ------------------------------------- detected_faces.append((x, y, w, h))
face_index = face_index + 1
detected_faces.append((x, y, w, h)) # -------------------------------------
face_index = face_index + 1
# -------------------------------------
if face_detected == True and face_included_frames == frame_threshold and freeze == False: if face_detected == True and face_included_frames == frame_threshold and freeze == False:
freeze = True freeze = True