              cv2.imshow("Faces", faces)
              key = cv2.waitKey(1)
  
              if self.window_closed(is_windows, is_conda, key):
                  break
  
              if key in press.keys():
                  action = press[key]["action"]
                  if action == "quit":
 
</s> remove         if not key in Installed_Packages:
            Missing_Packages.append(pkg)
 </s> add         if key not in INSTALLED_PACKAGES:
            MISSING_PACKAGES.append(pkg) </s> remove     @staticmethod
    def cv2_read_write(action, filename, image=None):
        """ Read or write an image using cv2 """
        if action == 'read':
            image = cv2.imread(filename)
        if action == 'write':
            cv2.imwrite(filename, image)
        return image

 </s> add  </s> remove     if i == "" or i == "N" or i == "n":
        ERROR('Please install system dependencies to continue')

def Check_Missing_Dep():
    global Missing_Packages, Installed_Packages, ENABLE_CUDA, Is_MacOS
    if ENABLE_CUDA and Is_MacOS:
        Required_Packages.extend(MacOS_Required_Packages)
    Missing_Packages = []
    for pkg in Required_Packages:
 </s> add     if i in ("", "N", "n"):
        out_error('Please install system dependencies to continue')


def check_missing_dep():
    """ Check for missing dependencies """
    global MISSING_PACKAGES, INSTALLED_PACKAGES, ENABLE_CUDA, IS_MACOS
    if ENABLE_CUDA and IS_MACOS:
        REQUIRED_PACKAGES.extend(MACOS_REQUIRED_PACKAGES)
    MISSING_PACKAGES = []
    for pkg in REQUIRED_PACKAGES: </s> remove class Faces():
    """ Holds the faces """
    def __init__(self, arguments):
        self.args = arguments
        self.extractor = self.load_extractor()
        self.mtcnn_kwargs = self.get_mtcnn_kwargs()
        self.filter = self.load_face_filter()
        self.align_eyes = self.args.align_eyes if hasattr(
            self.args, 'align_eyes') else False
        self.output_dir = get_folder(self.args.output_dir)
 </s> add         if skip_faces:
            # Remove items from algnments that have no faces so they will
            # be re-detected
            del_keys = [key for key, val in data.items() if not val]
            for key in del_keys:
                if key in data:
                    del data[key] </s> remove         Tooltip(ctl, text=helptext, wraplength=400)
 </s> add         Tooltip(ctl, text=helptext, wraplength=720)
                queue_manager.terminate_queues()
              cv2.imshow("Faces", faces)
              key = cv2.waitKey(1)
  
              if self.window_closed(is_windows, is_conda, key):
                queue_manager.terminate_queues()
                  break
  
              if key in press.keys():
                  action = press[key]["action"]
                  if action == "quit":
keep keep keep add 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 
tools/lib_alignments/jobs_manual.py