Example #1
0
 def _detect_faces(self, img):
     """Detects faces on the image.
     Args:
         img -- image
     Returns:
         faces -- LIST of np.array([x,y,w,h]) face coordinates
     """
     if not self._face_cascade.empty():
         gray = img_to_gray(img)
         faces = self._face_cascade.detectMultiScale(gray, \
                                             scaleFactor=1.3, \
                                             minNeighbors=4, \
                                             minSize=(30, 30), \
                                             flags=cv2.CASCADE_SCALE_IMAGE)
         if len(faces) == 0:
             return []
         return faces
Example #2
0
 def substract_bg(self, frame):
     """Apply Background Substraction from frame.
     Args:
         frame -- current frame
     Returns: 
         fgmask -- foreground mask
     """
     # Get FGMASK with MOG2
     gray = img_to_gray(frame)
     fgmask = self._bs_mog2.apply(gray, learningRate=self.learningRate)
     # Elliptical Kernel for morphology func
     kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,( \
                             self.kernel_size, self.kernel_size))
     # Open (remove white points from the background)
     fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
     # Close (remove black points from the object)
     fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_CLOSE, kernel)
     # Dilation alg (increases white regions size)
     fgmask = cv2.dilate(fgmask, kernel, iterations=self.iters)        
     return fgmask
Example #3
0
 def track_faces(self, img):
     """Apply oval mask over faces detected in the image.
     Args:
         img -- image
     Updates:
         self.faces -- list of faces detected
         self.gc_rect -- coords. tuple for GrabCut algorithm (x, y, w, h)
     Returns:
         fgmask -- binary mask with faces highlighted with oval
     """
     faces = self._detect_faces(img)
     if faces != []:                              # Face coords detected
         self.faces = faces
         self.gc_rect = self._faces_to_gc_rect(faces)
     else:                                        # Default values
         self.faces = self.def_face
         self.gc_rect = self._faces_to_gc_rect(self.faces, 1)
     fgmask = np.zeros((self.height, self.width, 3), np.uint8)
     fgmask = draw_ellipse(fgmask, self.faces)
     fgmask = img_to_gray(fgmask)
     return fgmask