import cv2 CASCADE_PATH = "src/face.xml" def run_camera(save_folder=None): cap = cv2.VideoCapture(0) if not cap.isOpened(): print("Cannot open camera") return face_cascade = cv2.CascadeClassifier(CASCADE_PATH) print("Press 'q' to quit, 's' to save a snapshot of the detected faces") idx = 0 while True: ret, frame = cap.read() if not ret: print("Can't receive frame (stream end?). Exiting...") break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30,30)) for (x,y,w,h) in faces: cv2.rectangle(frame, (x,y), (x+w, y+h), (0,255,0), 2) cv2.imshow('Camera - face.xml detection', frame) key = cv2.waitKey(1) & 0xFF if key == ord('q'): break if key == ord('s') and save_folder: path = f"{save_folder}/snapshot_{idx}.jpg" cv2.imwrite(path, frame) print("Saved", path) idx += 1 cap.release() cv2.destroyAllWindows() if __name__ == '__main__': import sys, os save_folder = None if len(sys.argv) > 1: save_folder = sys.argv[1] os.makedirs(save_folder, exist_ok=True) run_camera(save_folder)