      return [m.group(0) for m in matches]
  
  
  class Timelapse:
      @classmethod
      def create_timelapse(cls, input_dir_a, input_dir_b, output_dir, trainer):
          """ Create the time lapse """
          if input_dir_a is None and input_dir_b is None and output_dir is None:
              return None
 
</s> remove     def CreateTimelapse(test, input_dir_A, input_dir_B, output_dir, trainer):
        #self.input_dir = input
        #self.output_dir = output
        #self.trainer = trainer

        if input_dir_A is None and input_dir_B is None and output_dir is None:
 </s> add     def create_timelapse(cls, input_dir_a, input_dir_b, output_dir, trainer):
        """ Create the time lapse """
        if input_dir_a is None and input_dir_b is None and output_dir is None: </s> remove         if input_dir_A is None or input_dir_B is None:
            raise Exception("To enable the timelapse, you have to supply all the parameters "
                            "(--timelapse-input-A and --timelapse-input-B).")
 </s> add         if input_dir_a is None or input_dir_b is None:
            raise ValueError("To enable the timelapse, you have to supply "
                             "all the parameters (--timelapse-input-A and "
                             "--timelapse-input-B).") </s> remove         return Timelapse(input_dir_A, input_dir_B, output_dir, trainer)
 </s> add         return Timelapse(input_dir_a, input_dir_b, output_dir, trainer) </s> remove class BackgroundGenerator(threading.Thread):
    """ Run a queue in the background. From:
        https://stackoverflow.com/questions/7323664/ """
    # See below why prefetch count is flawed
    def __init__(self, generator, prefetch=1):
        threading.Thread.__init__(self)
        self.queue = Queue.Queue(prefetch)
        self.generator = generator
        self.daemon = True
        self.start()

    def run(self):
        """ Put until queue size is reached.
            Note: put blocks only if put is called while queue has already
            reached max size => this makes 2 prefetched items! One in the
            queue, one waiting for insertion! """
        for item in self.generator:
            self.queue.put(item)
        self.queue.put(None)

    def iterator(self):
        """ Iterate items out of the queue """
        while True:
            next_item = self.queue.get()
            if next_item is None:
                break
            yield next_item
 </s> add def camel_case_split(identifier):
    """ Split a camel case name
        from: https://stackoverflow.com/questions/29916065 """
    matches = finditer(
        ".+?(?:(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|$)",
        identifier)
    return [m.group(0) for m in matches]
 </s> remove             output_dir = get_folder(os.path.join(trainer.model.model_dir, "timelapse"))
 </s> add             output_dir = get_folder(os.path.join(trainer.model.model_dir,
                                                 "timelapse"))
    """ Time lapse function for training """
      return [m.group(0) for m in matches]
  
  
  class Timelapse:
    """ Time lapse function for training """
      @classmethod
      def create_timelapse(cls, input_dir_a, input_dir_b, output_dir, trainer):
          """ Create the time lapse """
          if input_dir_a is None and input_dir_b is None and output_dir is None:
              return None
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 
lib/utils.py