                      frames_dir +
                      "\n'missing-frames': Identify frames in the alignments"
                      "\n\tfile that do not appear within the frames"
                      "\n\tfolder." + output_opts + frames_dir +
                      "\n'leftover-faces': Identify faces in the faces"
                      "\n\tfolder that do not exist in the alignments file."
                      + output_opts + faces_dir +
                      "\n'multi-faces': Identify where multiple faces exist"
                      "\n\twithin the alignments file." + output_opts +
 
</s> remove                     "\n'rotate' - Rotate landmarks and bounding boxes. Legacy"
                    "\n\talignments files hold an 'r' parameter indicating"
                    "\n\tthat the image needs to be rotated for convert. This"
                    "\n\tmeans that the stored landarks and bounding box do"
                    "\n\tnot correspond to the actual frame. This command"
                    "\n\tupdates the alignments file with the correct"
                    "\n\tlandmarks and bounding boxes and removes the 'r'"
                    "\n\tparameter." + frames_dir +
 </s> add  </s> remove             self.smooth_mask(old_face,new_face)
 </s> add             self.smooth_mask(old_face, new_face)

        new_face = self.superpose(src_face, new_face, crop)
        new_image = frame.copy() </s> remove             self.adjust_avg_color(old_face,new_face)
 </s> add             self.adjust_avg_color(old_face, new_face) </s> remove     def adjust_avg_color(self,img_old,img_new):
        w,h,c = img_new.shape
        for i in range(img_new.shape[-1]):
            old_avg = img_old[:, :, i].mean()
            new_avg = img_new[:, :, i].mean()
 </s> add     @staticmethod
    def adjust_avg_color(old_face, new_face):
        """ Perform average color adjustment """
        for i in range(new_face.shape[-1]):
            old_avg = old_face[:, :, i].mean()
            new_avg = new_face[:, :, i].mean() </s> remove         new_face = self.superpose(image, new_face, crop)
        original[slice(face_detected.y, face_detected.y + face_detected.h), slice(face_detected.x, face_detected.x + face_detected.w)] = cv2.resize(new_face, (face_detected.w, face_detected.h))
        return original
 </s> add         cv2.warpAffine(
            new_face,
            detected_face.adjusted_matrix,
            (detected_face.frame_dims[1], detected_face.frame_dims[0]),
            new_image,
            flags=cv2.WARP_INVERSE_MAP | cv2.INTER_CUBIC,
            borderMode=cv2.BORDER_TRANSPARENT)
        return new_image
                    "\n'legacy': This updates legacy alignments to the latest "
                    "\n\tformat by adding frame dimensions and rotating "
                    "\n\tthe landmarks and bounding boxes" + frames_dir +
                      frames_dir +
                      "\n'missing-frames': Identify frames in the alignments"
                      "\n\tfile that do not appear within the frames"
                      "\n\tfolder." + output_opts + frames_dir +
                    "\n'legacy': This updates legacy alignments to the latest "
                    "\n\tformat by adding frame dimensions and rotating "
                    "\n\tthe landmarks and bounding boxes" + frames_dir +
                      "\n'leftover-faces': Identify faces in the faces"
                      "\n\tfolder that do not exist in the alignments file."
                      + output_opts + faces_dir +
                      "\n'multi-faces': Identify where multiple faces exist"
                      "\n\twithin the alignments file." + output_opts +
keep keep keep add keep keep keep keep keep
 Fix convert-adjust (#531)

* Add dimensions to alignments + refactor

* Add frame_dims + funcs to DetectFaces. Add alignments lib

* Convert Adjust working

* Refactor and tidy up 
tools/cli.py