  
          self.feed["size"] = size
          self.feed["padding"] = self._padding_from_coverage(size, coverage_ratio)
          self.feed["matrix"] = get_align_mat(self)
          face = AlignerExtract().transform(image, self.feed["matrix"], size, self.feed["padding"])
          self.feed["face"] = face if dtype is None else face.astype(dtype)
  
          logger.trace("Loaded feed face. (face_shape: %s, matrix: %s)",
                       self.feed_face.shape, self.feed_matrix)
  
 
</s> remove         logger.trace("Loading feed face: (size: %s, coverage_ratio: %s, dtype: %s)",
                     size, coverage_ratio, dtype)
 </s> add         logger.trace("Loading feed face: (size: %s, coverage_ratio: %s, dtype: %s, "
                     "is_aligned_face: %s)", size, coverage_ratio, dtype, is_aligned_face) </s> remove                      "normalize_method: %s)",
 </s> add                      "normalize_method: %s, image_is_aligned: %s)", </s> remove                      multiprocess, rotate_images, min_size, normalize_method)
        self._flow = ["detect", "align", "mask"]
 </s> add                      multiprocess, rotate_images, min_size, normalize_method, image_is_aligned)
        self._flow = self._set_flow(detector, aligner, masker) </s> remove         """ numpy.ndarray: The mask at the size of :attr:`stored_size` """
        return np.frombuffer(decompress(self._mask),
                             dtype="uint8").reshape((self.stored_size, self.stored_size, 1))
 </s> add         """ numpy.ndarray: The mask at the size of :attr:`stored_size` with any requested blurring
        and threshold amount applied."""
        dims = (self.stored_size, self.stored_size, 1)
        mask = np.frombuffer(decompress(self._mask), dtype="uint8").reshape(dims)
        if self._threshold != 0.0:
            mask[mask < self._threshold] = 0.0
            mask[mask > 255.0 - self._threshold] = 255.0
        if self._blur_kernel != 0:
            mask = cv2.GaussianBlur(mask, (self._blur_kernel, self._blur_kernel), 0)[..., None]
        logger.trace("mask shape: %s", mask.shape)
        return mask
        if is_aligned_face:
            original_size = image.shape[0]
            interp = cv2.INTER_CUBIC if original_size < size else cv2.INTER_AREA
            face = cv2.resize(image, (size, size), interpolation=interp)
        else:
            face = AlignerExtract().transform(image,
                                              self.feed["matrix"],
                                              size,
                                              self.feed["padding"])
  
          self.feed["size"] = size
          self.feed["padding"] = self._padding_from_coverage(size, coverage_ratio)
          self.feed["matrix"] = get_align_mat(self)
        if is_aligned_face:
            original_size = image.shape[0]
            interp = cv2.INTER_CUBIC if original_size < size else cv2.INTER_AREA
            face = cv2.resize(image, (size, size), interpolation=interp)
        else:
            face = AlignerExtract().transform(image,
                                              self.feed["matrix"],
                                              size,
                                              self.feed["padding"])
          self.feed["face"] = face if dtype is None else face.astype(dtype)
  
          logger.trace("Loaded feed face. (face_shape: %s, matrix: %s)",
                       self.feed_face.shape, self.feed_matrix)
  
keep keep keep keep replace keep keep keep keep keep
 Extract - Mask updates

- Remove none mask plugin
- Make pipeline more flexible
- Add support for pre-aligned faces to masker plugin
- Migrate blur and threshold settings to mask output 
lib/faces_detect.py