microwerx icon

Realtime Face Detection OpenCV

microwerx | PRO | 12/03/19 07:41:29 PM UTC | 0 ⭐ | 697 👁️ | Never ⏰ | []
Python |

2.52 KB

|

None

|

0 👍

/

0 👎

# Object Detection Realtime
import numpy as np
import cv2
 
blob_params = cv2.SimpleBlobDetector_Params()
blob_params.minThreshold = 10
blob_params.maxThreshold = 100
blob_params.filterByArea = True
blob_params.minArea = 1500
blob_params.filterByCircularity = True
blob_params.minCircularity = 0.1
blob_params.filterByConvexity = True
blob_params.minConvexity = 0.87
blob_params.filterByInertia = True
blob_params.minInertiaRatio = 0.01
 
# Set this to 255 to detect bright objects
# blob_params.blobColor = 255
 
blob_detector = cv2.SimpleBlobDetector_create(blob_params)
body_cascade = cv2.CascadeClassifier('haarcascade_upperbody.xml')
if body_cascade.empty():
    body_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml')
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
 
body_loaded = body_cascade and not body_cascade.empty()
face_loaded = face_cascade and not face_cascade.empty()
eye_loaded = eye_cascade and not eye_cascade.empty()
cascades_loaded = body_loaded and face_loaded and eye_loaded
 
cap = cv2.VideoCapture(1)
if not cap.isOpened():
    cap = cv2.VideoCapture(0)
if not cap.isOpened():
    exit(1)
cap.set(3,640) # set Width
cap.set(4,480) # set Height
 
while(True):
    ret, img = cap.read()
    #frame = cv2.flip(frame, -1) # Flip camera vertically
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 
    blobs = blob_detector.detect(img)
    cv2.drawKeypoints(img, blobs, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)  
    for kp in blobs:
        cv2.circle(img, (int(kp.pt[0]), int(kp.pt[1])), int(kp.size), (0, 0, 255))
 
    if cascades_loaded:
        bodies = body_cascade.detectMultiScale(gray, 1.3, 5)
        for (x,y,w,h) in bodies:
            cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,255),2)
            print("body")
 
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
        for (x,y,w,h) in faces:
            cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2)
            print("face")
            roi_gray = gray[y:y+h, x:x+w]
            roi_color = img[y:y+h, x:x+w]
            eyes = eye_cascade.detectMultiScale(roi_gray)
            for(ex,ey,ew,eh) in eyes:
                cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(255,255,0),2)
                print("eye")
 
    cv2.imshow('frame', img)
    cv2.imshow('gray', gray)
 
    k = cv2.waitKey(30) & 0xff
    if k == 27: # press 'ESC' to quit
        break
 
cap.release()
cv2.destroyAllWindows()

Comments