I've a script which runs on image and recognizes faces and return a list like :
[('Mike', (142, 464, 365, 241)),('Garry', (42, 364, 65, 141)),('unknown', (242, 564, 465, 341))]
The second tuple is the bounding box of the faces recognized. I've another script which uses webcam, recognizes faces in frames and shows them in the video feed. I want to automatically save "unknown" labelled faces in each frames, whenever it appears. My code :
from stat_face_recog import runonimage
video_capture = cv2.VideoCapture(0)
while True:
ret, frame = video_capture.read()
cv2.imwrite("new.png",frame)
final_pred = runonimage(img_path = "new.png")
read_img = cv2.imread("new.png")
for name, (top, right, bottom, left) in final_pred:
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
unknown_counter = 0
if name == "unknown":
unknowns_name = "unknown" + str(unknown_counter) + ".png"
(new_top, new_right, new_bottom, new_left) = (int(0.8 * top), int(1.2* right), int(1.2*bottom), int(0.8*left))
cv2.imwrite(unknowns_name,read_img[new_top:new_bottom, new_left:new_right])
unknown_counter += 1
cv2.imshow('Video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video_capture.release()
cv2.destroyAllWindows()
But the problem is while it is recognizing untrained people pictures unknown, it's not saving those unknown faces. Only one image named "unknonw0.png" is saved every time. What is wrong in my code?
You are resetting the unknown_counter
to zero in your for loop. Therefore, the image is overwriting every time. Just move it outside the loops.