o
    >h                     @   s   d dl mZ d dlZd dlZd dlZd dlmZ d dlZd dl	Z	d dl
Z
d dlZd dlZdd ZdddZdd	d
Zdd Zdd Ze ededejddddejddddejddedddd Zedkrve  dS dS )    )print_functionNc                 C   s   g }g }t | D ]A}tjtj|d }t|}t|}t|dkr.t	
d| t|dkr=t	
d| q|| ||d  q||fS )Nr      zIWARNING: More than one face found in {}. Only considering the first face.z-WARNING: No faces found in {}. Ignoring file.)image_files_in_folderospathsplitextbasenameface_recognitionload_image_fileface_encodingslenclickechoformatappend)known_people_folderknown_namesknown_face_encodingsfiler   Zimg	encodings r   k/home/www/facesmatcher.com/frenv_dlib/lib/python3.10/site-packages/face_recognition/face_recognition_cli.pyscan_known_people   s   


r   Fc                 C   s.   |rt d| || d S t d| | d S )Nz{},{},{}z{},{})printr   )filenamenamedistanceshow_distancer   r   r   print_result#   s   r   333333?c                    s   t  }t|jdkrtj|}|dtjj t	
|}t |}|D ](}t ||}	t|	|k}
d|
v rG fddt|
||	D  q&t dd  q&|sZt dd  d S d S )N@  )r    r    Tc                    s$   g | ]\}}}|rt  ||qS r   )r   ).0Zis_matchr   r   image_to_checkr   r   r   
<listcomp>:   s   $ ztest_image.<locals>.<listcomp>Zunknown_personZno_persons_found)r	   r
   maxshapePILZImageZ	fromarrayZ	thumbnailZLANCZOSnparrayr   Zface_distancelistzipr   )r#   r   r   	tolerancer   Zunknown_imageZpil_imgZunknown_encodingsZunknown_encodingZ	distancesresultr   r"   r   
test_image*   s   


r.   c                    s    fddt  D S )Nc                    s,   g | ]}t jd |t jdrtj |qS )z.*\.(jpg|jpeg|png))flags)rematchIr   r   join)r!   ffolderr   r   r$   D   s   , z)image_files_in_folder.<locals>.<listcomp>)r   listdirr5   r   r5   r   r   C   s   r   c           
      C   sp   |dkrd }n|}t }dt  v rt d}|j|d}t| t|t|t|t|}	|t|	 d S )NZ
forkserver)	processes)	multiprocessingZget_all_start_methodsZget_contextZPoolr+   	itertoolsrepeatstarmapr.   )
Zimages_to_checkr   r   Znumber_of_cpusr,   r   r9   contextpoolZfunction_parametersr   r   r   process_images_in_process_poolG   s   
r@   r   r#   z--cpusr   zmnumber of CPU cores to use in parallel (can speed up processing lots of images). -1 means "use all in system")defaulthelpz--tolerancezkTolerance for face comparisons. Default is 0.6. Lower this if you get multiple matches for the same person.z--show-distancez<Output face distance. Useful for tweaking tolerance setting.)rA   typerB   c                    s   t | \ tjdk r|dkrtd d}tj|r=|dkr0 fddt|D  d S t	t| | d S t
|  d S )N)      r   zmWARNING: Multi-processing support requires Python 3.4 or greater. Falling back to single-threaded processing!c                    s   g | ]
}t | qS r   )r.   )r!   Z
image_filer   r   r   r,   r   r   r$   o   s    zmain.<locals>.<listcomp>)r   sysversion_infor   r   r   r   isdirr   r@   r.   )r   r#   Zcpusr,   r   r   rF   r   main_   s   
 rJ   __main__)F)r   F)
__future__r   r   r   r0   Zface_recognition.apiapir	   r:   r;   rG   Z	PIL.Imager'   numpyr(   r   r   r.   r   r@   commandargumentoptionboolrJ   __name__r   r   r   r   <module>   s2   


