diff options
| -rw-r--r-- | face-detection/01_face_capture_dataset.py | 44 | 
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()  | 
