                  face_hashes.append(read_image_hash(face))
              logger.debug("Face Hashes: %s", (len(face_hashes)))
              if not face_hashes:
                  raise FaceswapError("Aligned directory is empty, no faces will be converted!")
              if len(face_hashes) <= len(self.input_images) / 3:
                  logger.warning("Aligned directory contains far fewer images than the input "
                                 "directory, are you sure this is the right folder?")
          return face_hashes
 
</s> remove         input_aligned_dir = self.args.input_aligned_dir
 </s> add         input_aligned_dir = self._args.input_aligned_dir </s> remove         pre_face_count = self.alignments.faces_count
        self.alignments.filter_hashes(face_hashes, filter_out=False)
        logger.info("Faces filtered out: %s", pre_face_count - self.alignments.faces_count)

    def get_face_hashes(self):
        """ Check for the existence of an aligned directory for identifying
            which faces in the target frames should be swapped.
            If it exists, obtain the hashes of the faces in the folder """
 </s> add         pre_face_count = self._alignments.faces_count
        self._alignments.filter_hashes(face_hashes, filter_out=False)
        logger.info("Faces filtered out: %s", pre_face_count - self._alignments.faces_count)

    def _get_face_hashes(self):
        """ Check for the existence of an aligned directory for identifying which faces in the
        target frames should be swapped.

        Returns
        -------
        list
            A list of face hashes that exist in the given input aligned directory.
        """ </s> remove                   if self.alignments.frame_has_faces(os.path.basename(filename))]
        logger.debug("Filtered out frames: %s", self.images.images_found - len(retval))
 </s> add                   if self._alignments.frame_has_faces(os.path.basename(filename))]
        logger.debug("Filtered out frames: %s", self._images.images_found - len(retval)) </s> remove         face_hashes = self.get_face_hashes()
 </s> add         face_hashes = self._get_face_hashes()
            if len(face_hashes) <= len(self._input_images) / 3:
                  face_hashes.append(read_image_hash(face))
              logger.debug("Face Hashes: %s", (len(face_hashes)))
              if not face_hashes:
                  raise FaceswapError("Aligned directory is empty, no faces will be converted!")
            if len(face_hashes) <= len(self._input_images) / 3:
                  logger.warning("Aligned directory contains far fewer images than the input "
                                 "directory, are you sure this is the right folder?")
          return face_hashes
keep keep keep keep replace keep keep keep
 Smart Masks to Convert (#957)

- scripts.convert - Use Smart Masks for Convert
    * Make on-the-fly conversion an explicit option

- Move BlurMask to lib.faces_detect

- tools.preview - Fix for smart masks
    * Subclass from tk.Tk
    * Options to lib.gui.control_helper
    *variable cleanup

- lib.logger - Demote more tensorflow deprecation messages

- Documentation:
    * lib.faces_detect.BlurMask
    * plugins.convert.mask
    * lib.convert
    * scripts.convert
    * scripts.fsmedia
    * tools.preview 
scripts/convert.py