TKK_E32232028/detect_cam.py

41 lines
1.3 KiB
Python

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)