56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
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()
|