                                "group": "Data",
                                "help": "Serializer for alignments file. If yaml is chosen and not "
                                        "available, then json will be used as the default "
                                        "fallback."})
          s3fd = "s3fd"
          fan = "fan"
          if backend == "cpu":
              default_detector = default_aligner = "cv2-dnn"
          else:
              default_detector = s3fd
              default_aligner = fan
          if backend == "amd":
              default_detector += "-amd"
              default_aligner += "-amd"
              s3fd += "-amd"
              fan += "-amd"
  
          argument_list.append({
              "opts": ("-D", "--detector"),
              "action": Radio,
              "type": str.lower,
              "choices":  PluginLoader.get_available_extractors("detect"),
 
</s> remove         backend = get_backend()
 </s> add         if get_backend() == "cpu":
            default_detector = default_aligner = "cv2-dnn"
        else:
            default_detector = "s3fd"
            default_aligner = "fan"
 </s> remove                     "\nL|'" + fan + "': Face Alignment Network. Best aligner. GPU "
 </s> add                     "\nL|fan: Face Alignment Network. Best aligner. GPU " </s> remove         if rotated_width is None or rotated_height is None:
            abs_cos = abs(rotation_matrix[0, 0])
            abs_sin = abs(rotation_matrix[0, 1])
            if rotated_width is None:
                rotated_width = int(height*abs_sin + width*abs_cos)
            if rotated_height is None:
                rotated_height = int(height*abs_cos + width*abs_sin)
        rotation_matrix[0, 2] += rotated_width/2 - image_center[0]
        rotation_matrix[1, 2] += rotated_height/2 - image_center[1]
 </s> add         rotation_matrix[0, 2] += self.input_size / 2 - image_center[0]
        rotation_matrix[1, 2] += self.input_size / 2 - image_center[1] </s> remove                     "\nL|'cv2-dnn': A cpu only CNN based landmark detector. Faster, less "
 </s> add                     "\nL|cv2-dnn: A cpu only CNN based landmark detector. Faster, less " </s> remove         logger.trace("Obtain points from prediction")
        points = np.array(prediction).flatten()
        points = np.reshape(points, (-1, 2))
        points *= (roi[2] - roi[0])
        points[:, 0] += roi[0]
        points[:, 1] += roi[1]
        retval = np.rint(points).astype("uint").tolist()
        logger.trace("Predicted Landmarks: %s", retval)
        return retval
 </s> add         for prediction, roi in zip(batch["prediction"], batch["roi"]):
            points = np.array(prediction).flatten()
            points = np.reshape(points, (-1, 2))
            points *= (roi[2] - roi[0])
            points[:, 0] += roi[0]
            points[:, 1] += roi[1]
            landmarks = np.rint(points).astype("uint").tolist()
            batch.setdefault("landmarks", []).append(landmarks)
        logger.trace("Predicted Landmarks: %s", batch["landmarks"])
                                "group": "Data",
                                "help": "Serializer for alignments file. If yaml is chosen and not "
                                        "available, then json will be used as the default "
                                        "fallback."})













          argument_list.append({
              "opts": ("-D", "--detector"),
              "action": Radio,
              "type": str.lower,
              "choices":  PluginLoader.get_available_extractors("detect"),
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 De-Multiprocess Extract (#871)

* requirements.txt: - Pin opencv to 4.1.1 (fixes cv2-dnn error)

* lib.face_detect.DetectedFace: change LandmarksXY to landmarks_xy. Add left, right, top, bottom attributes

* lib.model.session: Session manager for loading models into different graphs (for Nvidia + CPU)

* plugins.extract._base: New parent class for all extract plugins

* plugins.extract.pipeline. Remove MultiProcessing. Dynamically limit batchsize for Nvidia cards. Remove loglevel input

* S3FD + FAN plugins. Standardise to Keras version for all backends

* Standardize all extract plugins to new threaded codebase

* Documentation. Start implementing Numpy style docstrings for Sphinx Documentation

* Remove s3fd_amd. Change convert OTF to expect DetectedFace object

* faces_detect - clean up and documentation

* Remove PoolProcess

* Migrate manual tool to new extract workflow

* Remove AMD specific extractor code from cli and plugins

* Sort tool to new extract workflow

* Remove multiprocessing from project

* Remove multiprocessing queues from QueueManager

* Remove multiprocessing support from logger

* Move face_filter to new extraction pipeline

* Alignments landmarksXY > landmarks_xy and legacy handling

* Intercept get_backend for sphinx doc build

# Add Sphinx documentation 
lib/cli.py