
    ^h                        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 ZddZddZd Zd	 Z ej(                          ej*                  d
       ej*                  d       ej,                  ddd       ej,                  ddd       ej,                  dded      d                                           Zedk(  r e        yy)    )print_functionNc                    g }g }t        |       D ]  }t        j                  j                  t        j                  j	                  |            d   }t        j                  |      }t        j                  |      }t        |      dkD  r$t        j                  dj                  |             t        |      dk(  r%t        j                  dj                  |             |j                  |       |j                  |d           ||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
   img	encodingss          c/var/www/html/facial_api/venv/lib/python3.12/site-packages/face_recognition/face_recognition_cli.pyscan_known_peopler      s    K%&9: 677##BGG$4$4T$:;A>..t4$33C8	y>AJJbiijnopy>QJJFMMdSTx( ''	!56 ,,,    Fc                 x    |rt        dj                  | ||             y t        dj                  | |             y )Nz{},{},{}z{},{})printr   )filenamenamedistanceshow_distances       r   print_resultr"   #   s/    j$9:gnnXt,-r   333333?c                 T   t        j                  |       }t        |j                        dkD  r^t        j
                  j                  |      }|j                  dt        j
                  j                         t        j                  |      }t        j                  |      }|D ]k  }t        j                  ||      }	t        |	|k        }
d|
v r3t        |
||	      D cg c]  \  }}}|s
t        | |||       c}}} ^t        | dd |       m |st        | dd |       y y c c}}}w )N@  )r%   r%   Tunknown_personno_persons_found)r   r   maxshapePILImage	fromarray	thumbnailLANCZOSnparrayr   face_distancelistzipr"   )image_to_checkr   r   	tolerancer!   unknown_imagepil_imgunknown_encodingsunknown_encoding	distancesresultis_matchr   r    s                 r   
test_imager=   *   s+   $44^DM =$&))%%m4,		(9(9:)(77F- P$223GIYZ	i9,-6>ilms  vA  CL  jM  Z  ZMeXW[]e  QY\.$-H  Z)94OP ^%7}M 	 Zs   D#
+D#
c                     t        j                  |       D cg c]I  }t        j                  d|t        j                        s*t         j
                  j                  | |      K c}S c c}w )Nz.*\.(jpg|jpeg|png))flags)r   listdirrematchIr   join)folderfs     r   r   r   C   sF    -/ZZ-?r288LacdlnlplpCqBGGLL#rrrs   +A)"A)c           	         |dk(  rd }n|}t         }dt        j                         v rt        j                  d      }|j                  |      }t	        | t        j                  |      t        j                  |      t        j                  |      t        j                  |            }	|j                  t        |	       y )N
forkserver)	processes)	multiprocessingget_all_start_methodsget_contextPoolr3   	itertoolsrepeatstarmapr=   )
images_to_checkr   r   number_of_cpusr5   r!   rJ   contextpoolfunction_parameterss
             r   process_images_in_process_poolrW   G   s    	"	 G<<>>!--l;<<)<,D%-.#' 	LL01r   r   r4   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.)rX   typerY   c           
      p   t        |       \  }}t        j                  dk  r|dk7  rt        j                  d       d}t
        j                  j                  |      rF|dk(  r't        |      D cg c]  }t        |||||       c} y t        t        |      |||||       y t        |||||       y c c}w )N)      r   zmWARNING: Multi-processing support requires Python 3.4 or greater. Falling back to single-threaded processing!)r   sysversion_infor   r   r   r   isdirr   r=   rW   )r   r4   cpusr5   r!   r   r   
image_files           r   mainrc   _   s     )::M(N%K% 	6!tqy

  C  	D	ww}}^$19 tI  JX  tY  ZeoZ
K1EyR_`  Z*+@+PR]_suy  |E  GT  U>;0DiQ^_	 Zs   /B3__main__)F)r#   F)
__future__r   r   r   rA   face_recognition.apiapir   rK   rO   r^   	PIL.Imager*   numpyr/   r   r"   r=   r   rW   commandargumentoptionboolrc   __name__ r   r   <module>rp      s    %  	 	 /   
  -*.N2s20 %& !h  )X  YmS  0]  ^T@~` @ ^ Y " ' `" zF r   