summaryrefslogtreecommitdiff
path: root/face-detection
diff options
context:
space:
mode:
Diffstat (limited to 'face-detection')
-rw-r--r--face-detection/01_face_capture_dataset.py44
1 files changed, 24 insertions, 20 deletions
diff --git a/face-detection/01_face_capture_dataset.py b/face-detection/01_face_capture_dataset.py
index c72a14a..edf271e 100644
--- a/face-detection/01_face_capture_dataset.py
+++ b/face-detection/01_face_capture_dataset.py
@@ -2,19 +2,19 @@ import cv2
import os
from picamera2 import Picamera2
-#Parameters
-count = 0
-pos=(30,60) #top-left
-font=cv2.FONT_HERSHEY_COMPLEX
-height=1.5 #font_scale
-textcolor=(0,0,255) #BGR- RED
-boxcolor=(255,0,255) #BGR- BLUE
-weight=3 #font-thickness
-face_detector=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
+# Constants
+COUNT_LIMIT = 30
+POS=(30,60) #top-left
+FONT=cv2.FONT_HERSHEY_COMPLEX #font type for text overlay
+HEIGHT=1.5 #font_scale
+TEXTCOLOR=(0,0,255) #BGR- RED
+BOXCOLOR=(255,0,255) #BGR- BLUE
+WEIGHT=3 #font-thickness
+FACE_DETECTOR=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# For each person, enter one numeric face id
face_id = input('\n----Enter User-id and press <return>----')
-print("\n [INFO] Initializing face capture. Look the camera and wait!")
+print("\n [INFO] Initializing face capture. Look at the camera and wait!")
# Create an instance of the PiCamera2 object
cam = Picamera2()
@@ -26,42 +26,46 @@ cam.preview_configuration.align()
cam.configure("preview")
cam.start()
+count=0
+
while True:
# Capture a frame from the camera
frame=cam.capture_array()
- #Display count of images taken
- cv2.putText(frame,'Count:'+str(int(count)),pos,font,height,textcolor,weight)
+ # Display count of images taken
+ cv2.putText(frame,'Count:'+str(int(count)),POS,FONT,HEIGHT,TEXTCOLOR,WEIGHT)
- #Convert fram from BGR to grayscale
+ # Convert frame from BGR to grayscale
frameGray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
- #Create a DS faces- array with 4 elements- x,y coordinates top-left corner), width and height
- faces = face_detector.detectMultiScale(
+ # Create a DS faces- array with 4 elements- x,y coordinates (top-left corner), width and height
+ faces = FACE_DETECTOR.detectMultiScale( # detectMultiScale has 4 parameters
frameGray, # The grayscale frame to detect
scaleFactor=1.1,# how much the image size is reduced at each image scale-10% reduction
minNeighbors=5, # how many neighbors each candidate rectangle should have to retain it
minSize=(30, 30)# Minimum possible object size. Objects smaller than this size are ignored.
)
for (x,y,w,h) in faces:
- #create a bounding box across the detected face
- cv2.rectangle(frame, (x,y), (x+w,y+h), boxcolor, 3) #5 parameters - frame, topleftcoords,bottomrightcooords,boxcolor,thickness
+ # Create a bounding box across the detected face
+ cv2.rectangle(frame, (x,y), (x+w,y+h), BOXCOLOR, 3) # 5 parameters - frame, topleftcoords,bottomrightcooords,boxcolor,thickness
count += 1 # increment count
+
# if dataset folder doesnt exist create:
if not os.path.exists("dataset"):
os.makedirs("dataset")
# Save the captured bounded-grayscaleimage into the datasets folder
- cv2.imwrite("dataset/User." + str(face_id) + '.' + str(count) + ".jpg", frameGray[y:y+h,x:x+w]) #req os
+ cv2.imwrite("dataset/User." + str(face_id) + '.' + str(count) + ".jpg", frameGray[y:y+h,x:x+w])
# Display the original frame to the user
cv2.imshow('FaceCapture', frame)
# Wait for 30 milliseconds for a key event (extract sigfigs) and exit if 'ESC' or 'q' is pressed
key = cv2.waitKey(100) & 0xff
- #Checking keycode
+ # Checking keycode
if key == 27: # ESCAPE key
break
elif key == 113: # q key
break
- elif count >= 30: # Take 30 face sample and stop video capture
+ elif count >= COUNT_LIMIT: # Take COUNT_LIMIT face sample and stop video capture
break
+
# Release the camera and close all windows
print("\n [INFO] Exiting Program and cleaning up stuff")
cam.stop()