                      if self._save_interval and (idx + 1) % self._save_interval == 0:
                          self._alignments.save()
                  else:
                      del faces["image"]
                  status_bar.update(1)
  
              if not is_final:
                  logger.debug("Reloading images")
                  self._threaded_redirector("reload", detected_faces)
          saver.close()
 
</s> remove                 # All black frames will return not np.any() so check dims too
 </s> add                 # All black frames will return not numpy.any() so check dims too </s> remove         if self._thread is not None:
 </s> add         logger.debug("Setting thread")
        if self._thread is not None and self._thread.is_alive():
            logger.debug("Thread pre-exists and is alive: %s", self._thread)
                    # cache detected faces for next run
                    detected_faces[faces["filename"]] = faces
                      if self._save_interval and (idx + 1) % self._save_interval == 0:
                          self._alignments.save()
                  else:
                      del faces["image"]
                    # cache detected faces for next run
                    detected_faces[faces["filename"]] = faces
                  status_bar.update(1)
  
              if not is_final:
                  logger.debug("Reloading images")
                  self._threaded_redirector("reload", detected_faces)
          saver.close()
keep keep keep add keep keep keep keep keep keep
 Bugfix: Extract - Fix serial processing 
scripts/extract.py