          return batch
  
      def predict(self, batch):
          """ Run model to get predictions """
          masks = np.zeros(batch["feed"].shape[:-1] + (1,), dtype='uint8')
          for mask, face in zip(masks, batch["detected_faces"]):
              parts = self.parse_parts(np.array(face.landmarks_xy))
              for item in parts:
                  item = np.concatenate(item)
                  hull = cv2.convexHull(item).astype('int32')  # pylint: disable=no-member
                  cv2.fillConvexPoly(mask, hull, 255, lineType=cv2.LINE_AA)
          batch["prediction"] = masks
 
</s> remove         masks = np.zeros(batch["feed"].shape[:-1] + (1,), dtype='uint8')
        for mask, face in zip(masks, batch["detected_faces"]):
            parts = self.parse_parts(np.array(face.landmarks_xy))
 </s> add         for mask, face in zip(batch["feed"], batch["detected_faces"]):
            parts = self.parse_parts(np.array(face.feed_landmarks)) </s> remove                 hull = cv2.convexHull(item).astype('int32')  # pylint: disable=no-member
                cv2.fillConvexPoly(mask, hull, 255, lineType=cv2.LINE_AA)
        batch["prediction"] = masks
 </s> add                 hull = cv2.convexHull(item).astype("int32")  # pylint: disable=no-member
                cv2.fillConvexPoly(mask, hull, 1.0, lineType=cv2.LINE_AA)
        batch["prediction"] = batch["feed"] </s> remove                 hull = cv2.convexHull(item).astype('int32')  # pylint: disable=no-member
                cv2.fillConvexPoly(mask, hull, 255, lineType=cv2.LINE_AA)
        batch["prediction"] = masks
 </s> add                 hull = cv2.convexHull(item).astype("int32")  # pylint: disable=no-member
                cv2.fillConvexPoly(mask, hull, 1.0, lineType=cv2.LINE_AA)
        batch["prediction"] = batch["feed"] </s> remove         batch["feed"] = np.array([face.image for face in batch["detected_faces"]])
 </s> add         batch["feed"] = np.zeros((self.batchsize, self.input_size, self.input_size, 1),
                                 dtype="float32") </s> remove         batch["feed"] = np.array([face.image for face in batch["detected_faces"]])
 </s> add         batch["feed"] = np.zeros((self.batchsize, self.input_size, self.input_size, 1),
                                 dtype="float32")
        for mask, face in zip(batch["feed"], batch["detected_faces"]):
            parts = self.parse_parts(np.array(face.feed_landmarks))
          return batch
  
      def predict(self, batch):
          """ Run model to get predictions """
        for mask, face in zip(batch["feed"], batch["detected_faces"]):
            parts = self.parse_parts(np.array(face.feed_landmarks))
        for mask, face in zip(batch["feed"], batch["detected_faces"]):
            parts = self.parse_parts(np.array(face.feed_landmarks))
        for mask, face in zip(batch["feed"], batch["detected_faces"]):
            parts = self.parse_parts(np.array(face.feed_landmarks))
              for item in parts:
                  item = np.concatenate(item)
                  hull = cv2.convexHull(item).astype('int32')  # pylint: disable=no-member
                  cv2.fillConvexPoly(mask, hull, 255, lineType=cv2.LINE_AA)
          batch["prediction"] = masks
keep keep keep keep replace replace replace keep keep keep keep keep
 Mask plugin cleanup

- PEP8 Fixes
- Remove config for non NN Masks
- Tidy up defaults helptext
- cli.py fix typos
- Remove unused imports and functions _base.py
- Standardize input_size param
- Enable and update documentation
- Change references from `aligner` to `masker`
- Change  input_size, output_size and coverage_ratio from kwargs to params
- Move load_aligned to batch input iterator
- Remove unnecessary self.input param
- Add softmax layer append function to KSession
- Remove references to KSession protected objects
- Standardize plugin output into finalize method
- Make masks full frame and add to lib.faces_detect
- Add masks to alignments.json (temporary zipped base64 solution) 
plugins/extract/mask/components.py