from picamera2 import Picamera2 import cv2 import os camera = Picamera2() preview_config = camera.create_preview_configuration(main={'size': (640, 480)}) camera.configure(preview_config) camera.start() if not os.path.exists("haarcascade_frontalface_default.xml"): import urllib.request url = "https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml" urllib.request.urlretrieve(url, "haarcascade_frontalface_default.xml") if not os.path.exists("haarcascade_eye.xml"): import urllib.request url = "https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_eye.xml" urllib.request.urlretrieve(url, "haarcascade_eye.xml") if not os.path.exists("haarcascade_smile.xml"): import urllib.request url = "https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_smile.xml" urllib.request.urlretrieve(url, "haarcascade_smile.xml") face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') smile_cascade = cv2.CascadeClassifier('haarcascade_smile.xml') while(1): frame = camera.capture_array() frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) eyes = eye_cascade.detectMultiScale(gray, 1.3, 5) smiles = smile_cascade.detectMultiScale(gray, 1.8, 20) for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2) for (x, y, w, h) in eyes: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) for (x, y, w, h) in smiles: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 2) cv2.imshow("Real-Time Face Detection", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows()