class_docstr: Find duplicates using hashing algorithms and/or generate hashes given a single image or a directory of images.
  
  The module can be used for 2 purposes: Encoding generation and duplicate detection.
  - Encoding generation:
  To generate hashes using specific hashing method. The generated hashes can be used at a later time for
  deduplication. Using the method 'encode_image' from the specific hashing method object, the hash for a
  single image can be obtained while the 'encode_images' method can be used to get hashes for all images in a
  directory.
  
  - Duplicate detection:
  Find duplicates either using the encoding mapping generated previously using 'encode_images' or using a Path to the
  directory that contains the images that need to be deduplicated. 'find_duplicates' and 'find_duplicates_to_remove'
  methods are provided to accomplish these tasks.
docstr: Give out a list of image file names to remove based on the hamming distance threshold threshold. Does not
  remove the mentioned files.
  
  Args:
      image_dir: Path to the directory containing all the images or dictionary with keys as file names
                 and values as hash strings for the key image file.
      encoding_map: Optional, used instead of image_dir, a dictionary containing mapping of filenames and
                    corresponding hashes.
      max_distance_threshold: Optional, hamming distance between two images below which retrieved duplicates are
                              valid. (must be an int between 0 and 64). Default is 10.
      outfile: Optional, name of the file to save the results, must be a json. Default is None.
      recursive: Optional, find images recursively in a nested image directory structure, set to False by default.
      num_enc_workers: Optional, number of cpu cores to use for multiprocessing encoding generation, set to number of CPUs in the system by default. 0 disables multiprocessing.
      num_dist_workers: Optional, number of cpu cores to use for multiprocessing distance computation, set to number of CPUs in the system by default. 0 disables multiprocessing.
  
  Returns:
      duplicates: List of image file names that are found to be duplicate of me other file in the directory.
  
  Example:
  ```
  from imagededup.methods import <hash-method>
  myencoder = <hash-method>()
  duplicates = myencoder.find_duplicates_to_remove(image_dir='path/to/images/directory'),
  max_distance_threshold=15)
  
  OR
  
  from imagededup.methods import <hash-method>
  myencoder = <hash-method>()
  duplicates = myencoder.find_duplicates(encoding_map=<mapping filename to hashes>,
  max_distance_threshold=15, outfile='results.json')
  ```
docstr_tok: ["Give","out","a","list","of","image","file","names","to","remove","based","on","the","hamming","distance","threshold","threshold",".","Does","not","remove","the","mentioned","files",".","Args",":","image_dir",":","Path","to","the","directory","containing","all","the","images","or","dictionary","with","keys","as","file","names","and","values","as","hash","strings","for","the","key","image","file",".","encoding_map",":","Optional",",","used","instead","of","image_dir",",","a","dictionary","containing","mapping","of","filenames","and","corresponding","hashes",".","max_distance_threshold",":","Optional",",","hamming","distance","between","two","images","below","which","retrieved","duplicates","are","valid",".","(","must","be","an","int","between","0","and","64",")",".","Default","is","10.","outfile",":","Optional",",","name","of","the","file","to","save","the","results",",","must","be","a","json",".","Default","is","None",".","recursive",":","Optional",",","find","images","recursively","in","a","nested","image","directory","structure",",","set","to","False","by","default",".","num_enc_workers",":","Optional",",","number","of","cpu","cores","to","use","for","multiprocessing","encoding","generation",",","set","to","number","of","CPUs","in","the","system","by","default",".","0","disables","multiprocessing",".","num_dist_workers",":","Optional",",","number","of","cpu","cores","to","use","for","multiprocessing","distance","computation",",","set","to","number","of","CPUs","in","the","system","by","default",".","0","disables","multiprocessing",".","Returns",":","duplicates",":","List","of","image","file","names","that","are","found","to","be","duplicate","of","me","other","file","in","the","directory",".","Example",":","``","`","from","imagededup.methods","import","<","hash-method",">","myencoder","=","<","hash-method",">","(",")","duplicates","=","myencoder.find_duplicates_to_remove","(","image_dir='path\/to\/images\/directory","'",")",",","max_distance_threshold=15",")","OR","from","imagededup.methods","import","<","hash-method",">","myencoder","=","<","hash-method",">","(",")","duplicates","=","myencoder.find_duplicates","(","encoding_map=","<","mapping","filename","to","hashes",">",",","max_distance_threshold=15",",","outfile='results.json","'",")","``","`"]
code: def find_duplicates_to_remove(
      self,
      image_dir: PurePath = None,
      encoding_map: Dict[str, str] = None,
      max_distance_threshold: int = 10,
      outfile: Optional[str] = None,
      recursive: Optional[bool] = False,
      num_enc_workers: int = cpu_count(),
      num_dist_workers: int = cpu_count(),
  ) -> List:
      """
      Give out a list of image file names to remove based on the hamming distance threshold threshold. Does not
      remove the mentioned files.
  
      Args:
          image_dir: Path to the directory containing all the images or dictionary with keys as file names
                     and values as hash strings for the key image file.
          encoding_map: Optional, used instead of image_dir, a dictionary containing mapping of filenames and
                        corresponding hashes.
          max_distance_threshold: Optional, hamming distance between two images below which retrieved duplicates are
                                  valid. (must be an int between 0 and 64). Default is 10.
          outfile: Optional, name of the file to save the results, must be a json. Default is None.
          recursive: Optional, find images recursively in a nested image directory structure, set to False by default.
          num_enc_workers: Optional, number of cpu cores to use for multiprocessing encoding generation, set to number of CPUs in the system by default. 0 disables multiprocessing.
          num_dist_workers: Optional, number of cpu cores to use for multiprocessing distance computation, set to number of CPUs in the system by default. 0 disables multiprocessing.
  
      Returns:
          duplicates: List of image file names that are found to be duplicate of me other file in the directory.
  
      Example:
      ```
      from imagededup.methods import <hash-method>
      myencoder = <hash-method>()
      duplicates = myencoder.find_duplicates_to_remove(image_dir='path/to/images/directory'),
      max_distance_threshold=15)
  
      OR
  
      from imagededup.methods import <hash-method>
      myencoder = <hash-method>()
      duplicates = myencoder.find_duplicates(encoding_map=<mapping filename to hashes>,
      max_distance_threshold=15, outfile='results.json')
      ```
      """
      result = self.find_duplicates(
          image_dir=image_dir,
          encoding_map=encoding_map,
          max_distance_threshold=max_distance_threshold,
          scores=False,
          recursive=recursive,
          num_enc_workers=num_enc_workers,
          num_dist_workers=num_dist_workers,
      )
      files_to_remove = get_files_to_remove(result)
      if outfile:
          save_json(files_to_remove, outfile)
      return files_to_remove
  
imports: import os
  import sys
  import warnings
  from pathlib import PurePath, Path
  from typing import Dict, List, Optional
  from multiprocessing import cpu_count
  import numpy
  import pywt
  from scipy.fftpack import dct
  from imagededup.handlers.search.retrieval import HashEval
  from imagededup.utils.general_utils import get_files_to_remove, save_json, parallelise, generate_files, generate_relative_names
  from imagededup.utils.image_utils import load_image, preprocess_image, check_image_array_hash
  from imagededup.utils.logger import return_logger
label_desc: Use image node_id 12 for calling the Hashing obj's underlying member method code with example usage: obj.find_duplicates_to_remove(image_dir, encoding_map, max_distance_threshold, outfile, recursive, num_enc_workers, num_dist_workers) and returns: files_to_remove