  
  
  class DetectedFace():
      """ Detected face and landmark information """
      def __init__(self, image=None, r=0, x=None,
                   w=None, y=None, h=None, landmarksXY=None):
          self.image = image
          self.r = r
          self.x = x
          self.w = w
          self.y = y
 
</s> remove         self.r = r
 </s> add  </s> remove class DetectedFace():
    """ Detected face and landmark information """
    def __init__(self):
        self.image = None
        self.x = None
        self.w = None
        self.y = None
        self.h = None
        self.landmarksXY = None

    def alignment_to_face(self, image, alignment):
        """ Convert a face alignment to detected face object """
        self.image = image
        self.x = alignment["x"]
        self.w = alignment["w"]
        self.y = alignment["y"]
        self.h = alignment["h"]
        self.landmarksXY = alignment["landmarksXY"]

    def face_to_alignment(self, alignment):
        """ Convert a face alignment to detected face object """
        alignment["x"] = self.x
        alignment["w"] = self.w
        alignment["y"] = self.y
        alignment["h"] = self.h
        alignment["landmarksXY"] = self.landmarksXY
        return alignment

    def landmarks_as_xy(self):
        """ Landmarks as XY """
        return self.landmarksXY


 </s> add  </s> remove from lib import face_alignment


def detect_faces(frame, detector, verbose, rotation=0,
                 dlib_buffer=64, mtcnn_kwargs=None):
    """ Detect faces and draw landmarks in an image """
    face_detect = face_alignment.Extract(frame,
                                         detector,
                                         dlib_buffer,
                                         mtcnn_kwargs,
                                         verbose)
    for face in face_detect.landmarks:
        ax_x, ax_y = face[0][0], face[0][1]
        right, bottom = face[0][2], face[0][3]
        landmarks = face[1]

        yield DetectedFace(frame[ax_y: bottom, ax_x: right],
                           rotation,
                           ax_x,
                           right - ax_x,
                           ax_y,
                           bottom - ax_y,
                           landmarksXY=landmarks)
 </s> add from dlib import rectangle as d_rectangle </s> remove class OptionalActions(object):
 </s> add class OptionalActions(): </s> remove class Images():
    """ Holds the full frames/images """
    def __init__(self, arguments):
 </s> add class Alignments():
    """ Holds processes pertaining to the alignments file """
    def __init__(self, arguments, is_extract):
        self.is_extract = is_extract
    def __init__(self, image=None, x=None, w=None, y=None, h=None,
                 landmarksXY=None):
  
  
  class DetectedFace():
      """ Detected face and landmark information """
    def __init__(self, image=None, x=None, w=None, y=None, h=None,
                 landmarksXY=None):
    def __init__(self, image=None, x=None, w=None, y=None, h=None,
                 landmarksXY=None):
          self.image = image
          self.r = r
          self.x = x
          self.w = w
          self.y = y
keep keep keep keep replace replace keep keep keep keep keep
 Extraction - Speed improvements (#522) (#523)

* Extraction - Speed improvements (#522)

* Initial Plugin restructure

* Detectors to plugins. Detector speed improvements

* Re-implement dlib aligner, remove models, FAN to TF. Parallel processing

* Update manual, update convert, implement parallel/serial switching

* linting + fix cuda check (setup.py). requirements update keras 2.2.4

* Add extract size option. Fix dlib hog init

* GUI: Increase tooltip width

* Update alignment tool to support new DetectedFace

* Add skip existing faces option

* Fix sort tool to new plugin structure

* remove old align plugin

* fix convert -skip faces bug

* Fix convert skipping no faces frames

* Convert - draw onto transparent layer

* Fix blur threshold bug

* fix skip_faces convert bug

* Fix training 
lib/faces_detect.py