              cv2.putText(header_box,  # pylint: disable=no-member
                          text,
                          (text_x[idx], text_y),
                          font,
                          self.scaling,
                          (0, 0, 0),
                          1,
                          lineType=cv2.LINE_AA)  # pylint: disable=no-member
          logger.debug("header_box.shape: %s", header_box.shape)
          return header_box
 
</s> remove         texts = ["Target {}".format(side),
                 "{} > {}".format(side, side),
                 "{} > {}".format(side, other_side)]
 </s> add         texts = ["{} ({})".format(titles[0], side),
                 "{0} > {0}".format(titles[0]),
                 "{} > {}".format(titles[0], titles[1])] </s> remove         cv2.fillConvexPoly(mask, hull, 255.0, lineType=cv2.LINE_AA)  # pylint: disable=no-member
 </s> add         cv2.fillConvexPoly(mask, hull, self.threshold, lineType=cv2.LINE_AA) </s> remove         mask = np.zeros(self.face.shape[0:2] + (1, ), dtype=np.float32)
        hull = cv2.convexHull(  # pylint: disable=no-member
 </s> add         mask = np.zeros(self.face.shape[0:2] + (1, ), dtype=self.dtype)
        hull = cv2.convexHull( </s> remove                                       self.scaling,
 </s> add                                       self.scaling * 0.8, </s> remove             cv2.fillConvexPoly(mask, cv2.convexHull(merged), 255.)  # pylint: disable=no-member
 </s> add             cv2.fillConvexPoly(mask, cv2.convexHull(merged), self.threshold)
                        self.scaling * 0.8,
              cv2.putText(header_box,  # pylint: disable=no-member
                          text,
                          (text_x[idx], text_y),
                          font,
                        self.scaling * 0.8,
                          (0, 0, 0),
                          1,
                          lineType=cv2.LINE_AA)  # pylint: disable=no-member
          logger.debug("header_box.shape: %s", header_box.shape)
          return header_box
keep keep keep keep replace keep keep keep keep keep
 Optimize Data Augmentation (#881)

* Move image utils to lib.image
* Add .pylintrc file
* Remove some cv2 pylint ignores
* TrainingData: Load images from disk in batches
* TrainingData: get_landmarks to batch
* TrainingData: transform and flip to batches
* TrainingData: Optimize color augmentation
* TrainingData: Optimize target and random_warp
* TrainingData - Convert _get_closest_match for batching
* TrainingData: Warp To Landmarks optimized
* Save models to threadpoolexecutor
* Move stack_images, Rename ImageManipulation. ImageAugmentation Docstrings
* Masks: Set dtype and threshold for lib.masks based on input face
* Docstrings and Documentation 
plugins/train/trainer/_base.py