
    j T                    :   U 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lZd dlZd dl	m
Z
 d dlmZmZ d dlmZ d dlZd dlZd dlmZmZmZmZmZmZmZmZmZmZmZmZm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( ej)        *                    ed	          Z+ej)        *                    ed
          Z,ej)        *                    ed          Z-ej)        *                    ed          Z.dZ/e
 G d d                      Z0 ej1                    Z2da3de4d<   da5de4d<   da6de4d<   da7de4d<   dUdZ8dUdZ9dVdZ:dWd Z;dXd#Z<dYd&Z=ddddd'dZd-Z>d[d.Z?d\d/Z@dUd0ZAd]d1ZBd^d5ZCd_d7ZD G d8 d9ejE                  ZFd`d:ZGdadbd=ZHdcd?ZId[d@ZJdddedHZKdfdJZLdad[dKZMdad[dLZNdadgdPZOdadhdTZPdS )i    )annotationsN)	dataclass)AnyOptional)uuid4)FACE_DATA_DIRFACE_MATCH_TOP_KFACE_MODEL_DETFACE_MODEL_RECFACE_SIMILARITY_THRFACE_SQL_DBFACE_SQL_ENABLEDFACE_SQL_HOSTFACE_SQL_PASSWORDFACE_SQL_PORTFACE_SQL_QUERY_PATHFACE_SQL_USERlogger)extract_best_face_embeddingextract_probe_embeddingsface_models_readyget_face_models
load_image)VectorIndexphotosfeaturesperson_db.pkl	meta.jsonz
SELECT
    bzr."zjlx",
    bzr."zjhm",
    bzr."xm",
    tdrz."xp"
FROM "stdata"."b_zdry_ryxx" bzr
LEFT JOIN "ywdata"."t_dsfb_rk_zpxx" tdrz
    ON bzr."zjhm" = tdrz."gmsfhm"
WHERE bzr."sflg" = 1
  AND bzr."deleteflag" = 0
c                  J    e Zd ZU ded<   ded<   ded<   dZded<   dZded	<   dS )
PersonRecordstrzjlxzjhmxmNzOptional[str]
photo_pathOptional[np.ndarray]	embedding)__name__
__module____qualname____annotations__r%   r'        G/home/longshao/multi-rider-rag/modules/face/services/library_service.pyr    r    =   sO         IIIIIIGGG $J$$$$&*I******r-   r    zlist[PersonRecord] | None_PERSON_CACHEznp.ndarray | None_MATRIX_CACHEzVectorIndex | None_VECTOR_INDEXfloat | None_CACHE_MTIMEreturnNonec                b    t          |           r	  | |           d S # t          $ r Y d S w xY wd S N)callable	Exception)progress_cbpayloads     r.   _reportr<   M   sY     	K      	 	 	DD	 s    
,,c                 r    t          j        t          d           t          j        t          d           d S )NTexist_ok)osmakedirs	PHOTO_DIRFEATURE_DIRr,   r-   r.   _ensure_dirsrD   U   s2    K	D))))Kd++++++r-   pathr!   c                
   | sd S t           j                            |           rt          j        | d           d S t           j                            |           r(	 t          j        |            d S # t          $ r Y d S w xY wd S )NT)ignore_errors)r@   rE   isdirshutilrmtreeexistsremoveFileNotFoundError)rE   s    r.   _cleanup_pathrN   Z   s     	w}}T d$//////			 	IdOOOOO  	 	 	DD	 s   A2 2
B ?B prefixc                    t           j                            t          d|  dt	                      j                   }t          j        |d           |S )N_Tr>   )r@   rE   joinr   r   hexrA   )rO   
stage_roots     r.   _make_stage_rootrU   f   sI    m-G-G-G%''+-G-GHHJK
T****r-   personslist['PersonRecord']c                    t          j        t           j                            |          d           t	          |d          5 }t          j        | |           d d d            d S # 1 swxY w Y   d S )NTr>   wb)r@   rA   rE   dirnameopenpickledump)rV   rE   fhs      r.   _save_person_db_to_pathr_   l   s    K%%5555	dD		 !RGR   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   A''A+.A+metadict[str, Any]c                    t          j        t           j                            |          d           t	          |dd          5 }t          j        | |dd           d d d            d S # 1 swxY w Y   d S )	NTr>   wutf-8encodingF   ensure_asciiindent)r@   rA   rE   rZ   r[   jsonr]   )r`   rE   r^   s      r.   _save_meta_to_pathrl   r   s    K%%5555	dC'	*	*	* :b	$q9999: : : : : : : : : : : : : : : : : :s   A,,A03A0stage_photo_dirstage_feature_dirstage_db_pathstage_meta_pathrn   
str | Nonero   rp   rq   c                  	 g 	d}d
	fd}	  || t                       ||t                      ||t                      ||t                     t	                       d	}|r	D ]\  }}|rt          |           d S t          	          D ]J\  }}t          |           |r4t          j        	                    |          rt          j        ||           Kt	                       d S # |r	D ]\  }}|rt          |           w t          	          D ]J\  }}t          |           |r4t          j        	                    |          rt          j        ||           Kt	                       w xY w)NFsrcrr   dstr!   r4   r5   c                D   | rt           j                            |           sd S d }t           j                            |          r.|dt                      j         z   }t          j        ||           t          j        | |                               ||f           d S )Nz.bak_)r@   rE   rK   r   rS   rI   moveappend)rt   ru   backupswapss      r.   
_swap_pathz._commit_face_library_stage.<locals>._swap_path   s     	"'..-- 	F7>># 	%0577;000FKV$$$Cc6]#####r-   T)rt   rr   ru   r!   r4   r5   )rB   rC   DB_CACHE_FILE	META_FILE_invalidate_cacherN   reversedr@   rE   rK   rI   rw   )
rn   ro   rp   rq   successr{   _dstry   ru   rz   s
            @r.   _commit_face_library_stager   x   s    +-EG$ $ $ $ $ $ 
?I...
$k222
=-000
?I... 		  % * *f *!&)))* *  ( - -Vc""" -bgnnV44 -K,,,  		  % * *f *!&)))*  ( - -Vc""" -bgnnV44 -K,,,s   AC( (BE.c                     t           j                            t                    si S 	 t	          t          dd          5 } t          j        |           cd d d            S # 1 swxY w Y   d S # t          $ r i cY S w xY w)Nrrd   re   )r@   rE   isfiler}   r[   rk   loadr9   r^   s    r.   
_load_metar      s    7>>)$$ 	)S7333 	!r9R==	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!   			s4   A- A A-  A$$A- 'A$(A- -A<;A<c                    t                       t          t          dd          5 }t          j        | |dd           d d d            d S # 1 swxY w Y   d S )Nrc   rd   re   Frg   rh   )rD   r[   r}   rk   r]   )r`   r^   s     r.   
_save_metar      s    NNN	iw	/	/	/ :2	$q9999: : : : : : : : : : : : : : : : : :s   AAAc                 V    t           5  d ad ad ad ad d d            d S # 1 swxY w Y   d S r7   )_CACHE_LOCKr/   r0   r1   r3   r,   r-   r.   r~   r~      s    	  	                 s   	""c                    t           rt          j                            t                     r	 t	          t           dd          5 } |                                                                 }d d d            n# 1 swxY w Y   |r|S t          j        dt                      nS# t          $ r%}t          j        dt           |           Y d }~n)d }~ww xY wt           rt          j        dt                      t                                          S )Nr   rd   re   z>face SQL query file is empty, falling back to built-in SQL: %szGfailed to read face SQL query file %s, falling back to built-in SQL: %sz?face SQL query file not found, falling back to built-in SQL: %s)r   r@   rE   r   r[   readstripr   warningr9   DEFAULT_QUERY_SQL)r^   textexcs      r.   _load_query_sqlr      sC    
orw~~.ABB 
o	@)3AAA )Rwwyy(() ) ) ) ) ) ) ) ) ) ) ) ) ) ) N[]pqqqq 	@ 	@ 	@Ndfy{~	@	 oXZmnnn""$$$sA   B! 'A7+B! 7A;;B! >A;?B! B! !
C+CCrawr   r&   c                H   | d S t          | t                    rt          |           } t          | t                    r'	 t	          j        |           } n# t          $ r Y d S w xY wt          j        | t          j	                  }t          j        |t          j                  S )Ndtype)
isinstance
memoryviewbytesr!   base64	b64decoder9   np
frombufferuint8cv2imdecodeIMREAD_COLOR)r   arrs     r.   _decode_photor      s    
{t#z"" Cjj#s 	"3''CC 	 	 	44	
-28
,
,
,C<S-...s   A 
A"!A"list[PersonRecord]c                    t                       t          t          d          5 }t          j        | |           d d d            n# 1 swxY w Y   t                       d S )NrY   )rD   r[   r|   r\   r]   r~   )rV   r^   s     r.   _save_person_dbr      s    NNN	mT	"	" !bGR   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   AA
A
c                        e Zd Zd fdZ xZS )_CompatUnpicklermoduler!   namec                b    |dk    rt           S t                                          ||          S )Nr    )r    super
find_class)selfr   r   	__class__s      r.   r   z_CompatUnpickler.find_class   s.    >!!ww!!&$///r-   )r   r!   r   r!   )r(   r)   r*   r   __classcell__)r   s   @r.   r   r      s=        0 0 0 0 0 0 0 0 0 0r-   r   c                     t          t          d          5 } t          |                                           cd d d            S # 1 swxY w Y   d S )Nrb)r[   r|   r   r   r   s    r.   _load_person_dbr      s    	mT	"	" +b##((**+ + + + + + + + + + + + + + + + + +s   !AAApersonscorec                    | j         | j        | j        | j        d}| t	          t          |          d          |d<   |S )N)r   	id_numberid_typer%      r   )r$   r#   r"   r%   roundfloat)r   r   r;   s      r.   _person_payloadr      sJ    	[;'	 G  uq11Nr-   %tuple[list[PersonRecord], np.ndarray]c                    t           j                            t                    s"g t	          j        dt          j                  fS t           j                            t                    } t          5  t          ,t          %t          | k    rt          t          fcd d d            S t                      }d |D             }|r;t	          j        d |D                                           t          j                  nt	          j        dt          j                  }|a	|a
t          d          }|                    |           |a| a||fcd d d            S # 1 swxY w Y   d S )N)r      r   c                4    g | ]}t          |d d          |S )r'   Ngetattr.0r   s     r.   
<listcomp>z'_load_cached_matrix.<locals>.<listcomp>   s)    ```Fd1S1S1_1_1_1_r-   c                    g | ]	}|j         
S r,   )r'   r   s     r.   r   z'_load_cached_matrix.<locals>.<listcomp>  s    @@@6+@@@r-   r   )dim)r@   rE   r   r|   r   emptyfloat32getmtimer   r/   r0   r3   r   stackastyper   buildr1   )mtimerV   validmatrixvis        r.   _load_cached_matrixr      s   7>>-(( 828HBJ77777G]++E	  $)B|W\G\G\ -/        "##``g```X]  H@@%@@@AAHHTTTcecklt|~  }G  dH  dH  dHS!!!
f}                 s   2'E&B'EE!Ec                    t                       t                      } t          j                            t
                    r0t          d t          j        t
                    D                       nd}t          j                            t                    r0t          d t          j        t                    D                       nd}t          j        	                    t                    }d}|r;	 t                      }t          d |D                       }n# t          $ r d}Y nw xY wt                      }i dt          |o|o|dk              d|dt           dt"          d	|d
t          dt
          dt          d|d|d|d|                     d          d|                     d          d|                     dd          dt&          dt          t(          ot*          ot,                    S )Nc                    g | ]}|S r,   r,   r   r   s     r.   r   z+get_face_library_status.<locals>.<listcomp>  s    >>>t>>>r-   r   c                `    g | ]+}|                                                     d           )|,S ).npy)lowerendswithr   s     r.   r   z+get_face_library_status.<locals>.<listcomp>  s4    ccc$TZZ\\EZEZ[aEbEbccccr-   c              3  <   K   | ]}t          |d d          dV  dS )r'   N   r   r   s     r.   	<genexpr>z*get_face_library_status.<locals>.<genexpr>  s4      jjf76;X\;];];i;i;i;i;ijjr-   readymodels_readydet_model_pathrec_model_pathcache_existsperson_db_path	photo_dirfeature_dirphoto_countfeature_countvalid_person_countlast_sync_tslast_rebuild_tslast_sync_rowssql_enabledsql_configured)rD   r   r@   rE   rH   rB   lenlistdirrC   r   r|   r   sumr9   r   boolr
   r   getr   r   r   r   )r`   r   r   r   valid_personsrV   r   s          r.   get_face_library_statusr     sA   NNN<<DCE7==QZC[C[b#>>
9(=(=>>>???abKhjhohuhu  wB  iC  iC  JCcc"*[*A*Acccddd  IJM7>>-00LM 	%''GjjjjjjjMM 	 	 	MMM	 %&&LlI|I8IJJ 	. 	.	
 	 	- 	Y 	{ 	{ 	 	m 	00 	488$566 	$((#3Q77 	'  	$}NNOO! s   2'D D)(D)r       pageint	page_sizekeywordc                   t           j                            t                    sg d| |ddS 	 t	                      }n# t
          $ r g d| |ddcY S w xY wpd                                                                rfd|D             }t          |          }t          d||z   dz
  |z            }t          dt          | |                    } | dz
  |z  }||||z            }g }|D ]}	t          |	dd          du}
t          |	j        o#t           j                            |	j                            }|                    |	j        |	j        |	j        |	j        ||
|
rdnd	d
           ||| ||dS )z=Return a paginated list of persons from the cached person_db.r   )itemstotalr   r   pagesr   c                    g | ]>}|j         pd                                 v s|j        pd                                 v <|?S )r   )r$   r   r#   )r   pr   s     r.   r   z list_persons.<locals>.<listcomp>:  sU    nnnQTZR4F4F4H4H)H)HGXYX^XdbdWkWkWmWmLmLm1LmLmLmr-   r   r'   Nr   
no_feature)idr   r   r   	has_photohas_featurestatus)r@   rE   r   r|   r   r9   r   r   r   maxminr   r   r%   rx   r#   r$   r"   )r   r   r   rV   r   r   startslicedr   r  has_embeddingr  s     `         r.   list_personsr  /  s   7>>-(( [aIXYZZZ[!## [ [ [aIXYZZZZZ[ }"##%%++--G onnnngnnnLLEEI%)i788Eq#dE""##DAX"EUUY../FE  ;55TAF"'..*F*FGG	&Dv"(!.@ggL
 
 	 	 	 	 UDy[`aaas   > AA	person_idc                   t           j                            | pd                                          } | sd S dD ]M}t           j                            t
          | |z             }t           j                            |          r|c S Nd S )Nr   ).jpgz.jpegz.png)r@   rE   basenamer   rR   rB   r   )r  ext	candidates      r.   get_face_library_photo_pathr  R  s      )/r!8!8!:!:;;I t(  GLLIO<<	7>>)$$ 		4r-   c           	        t                       t          | dddd           t          j                            t
                    rt                      }ng }t          t          j        t                              D ]}t          j        
                    t          |          }t          j                            |          sGt          j                            |          \  }}|                    t          d|||                     |st          d          t          d          }t          j        
                    |d	          }t          j        |d
           t          j        
                    |d          }t          j        
                    |d          }	t          | dddt#          |                     t%                      \  }
}d}d}t#          |          }	 t'          |d          D ]@\  }}|j        st+          |j                  |_        |j        r$t          j                            |j                  s |dz  }t          | dd| d| ||           qt/          |j                  }| |dz  }t          | dd| d| ||           t1          ||
|d
          \  }}| |dz  }t          | dd| d| ||           ||_        t5          j        t          j        
                    ||j         d          |           |dz  }t          | dd| d| ||           Bt9          ||           t;                      }t=          t?          j                              |d<   ||d<   tA          ||	           tC          |||	           t          | dd||           d
t#          |          ||dtE          |           S # tE          |           w xY w)Npreparez$Preparing local face feature rebuildr   stagemessage	processedr   r   )r"   r#   r$   r%   z8no cached face photos found; sync the face library firstface_rebuildr   Tr>   r   r   load_modelsLoading face modelsr   extractzRebuilding features /use_enhancer   r   r   )ro   rp   rq   completezFace feature rebuild completed)okr  r   failed)#rD   r<   r@   rE   r   r|   r   sortedr   rB   rR   splitextrx   r    RuntimeErrorrU   rA   r   r   	enumerater%   r  r#   r   r   r'   r   saver_   r   r   timerl   r   rN   )r:   rV   filename	full_pathr  _extrT   ro   rp   rq   detector
recognizerr   r#  r   indexr   imgr'   _infor`   s                        r.   rebuild_face_libraryr2  ]  sV   NNNKy2Xdemnoooo	w~~m$$ 	f!##rz)4455 	f 	fHY99I7>>),,  g..x88OItNN<RiIZcdddeeee WUVVV!.11JZ<<K!D1111GLL_==Mgll:{;;OK}6KWX`cdk`l`lmmmm*,,HjGFLLE$"&w22 	@ 	@ME6$ M$?$L$L!$ BGNN6;L,M,M !9>dUZ>d>d]b>d>dpu  ~C  D  D  D  DV.//C{!9>dUZ>d>d]b>d>dpu  ~C  D  D  D  D:3*bfgggIu !9>dUZ>d>d]b>d>dpu  ~C  D  D  D  D(FGBGLL!2v{4H4H4HII9UUUqLGKy:`QV:`:`Y^:`:`lqy~777||"%dikk"2"2%,!"4111"/'+	
 	
 	
 	

 	:7WchpuvvvvW'U[\\j!!!!j!!!!s   *G!O O,c                8   t           st          d          t          rt          rt          st          d          	 dd l}dd l}n%# t          $ r}t          d|           |d }~ww xY wt          | dddd           |	                    t          t          t          t          t                    5 }|                    |j        j        	          5 }t          | d
ddd           |                    t!                                 |                                }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   i }|D ]u}|                    d          pd}|s||vrt'          |          ||<   3||                             d          '|                    d          t'          |          ||<   vt)                       t+          d          }	t,          j                            |	d          }
t,          j                            |	d          }t-          j        |
d           t-          j        |d           t,          j                            |	d          }t,          j                            |	d          }t          | dddt5          |                     g }d}t7          |                                          }t5          |          }	 t;          |d          D ]\  }}t=          |                    d          pd|                    d          pd|                    d          pd          }t?          |                    d                    }|tt,          j                            |
|j          d          }tC          j"        ||           t,          j                            tF          |j          d          |_$        |dz  }|%                    |           t          | dd| d| ||            t          | d d!dt5          |                     tM                      \  }}d}t;          |d          D ]x\  }}|j$        s5t          | d"d#| dt5          |           |t5          |                     Bt,          j                            |
|j          d          }tO          |          }|5t          | d"d#| dt5          |           |t5          |                     tQ          |||d$          \  }}|5t          | d"d#| dt5          |           |t5          |                     ||_)        tU          j+        t,          j                            ||j          d%          |           |dz  }t          | d"d#| dt5          |           |t5          |                     ztY          ||           t[          t]          j.                              }t_          ||t5          |          ||d&|           ta          |
|||'           t          | d(d)t5          |          t5          |                     dt5          |          ||d*tc          |	           S # tc          |	           w xY w)+Nz-face SQL sync is disabled by FACE_SQL_ENABLEDz+face SQL connection is not fully configuredr   z"psycopg2-binary is not installed: connectzConnecting to intranet face SQLr  )hostportdbnameuserpassword)cursor_factoryqueryzExecuting face library SQLr#   r   xp	face_syncr   r   Tr>   r   r   prepare_filesz"Preparing local face library cacher   r"   r$   )r"   r#   r$   r  save_photoszSaving face photos r  r  r  r  zExtracting face features r  r   )r   r   r   saved_photo_countr   rm   r!  zFace library sync completed)r"  rowssaved_photosr   )2r   r&  r   r   r   psycopg2psycopg2.extrasr9   r<   r4  r   r   cursorextrasRealDictCursorexecuter   fetchallr   dictrD   rU   r@   rE   rR   rA   r   listvaluesr'  r    r   r#   r   imwriterB   r%   rx   r   r   r   r'   r   r(  r_   r   r)  rl   r   rN   )r:   rC  r   conncurrA  seenrowr  rT   rn   ro   rp   rq   rV   saved
dedup_rowsr   r/  r   r0  stage_photo_pathr-  r.  r   r'   r1  nows                               r.   sync_face_libraryrV    s    LJKKK Jk Jm JHIIIP P P PEEEFFCOP Ky2S_`hijjjj			" 
 
 
 
" 
[[(F[GG 	"3Kw8T`aijkkkkKK))***<<>>D	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" ')D ( (GGFOO)r	 	D  "3iiDOO)_  &&.3774==3L"3iiDONNN!+..Jgll:x88OZ<<K$////K!D1111GLL_==Mgll:{;;OK8\hiqtuyqzqz{{{{"$GEdkkmm$$J
OOE6"#J22 		C 		CJE3!swwv'<"3776??CXVX]`]d]dei]j]j]pnpqqqF..C#%7<<FKAUAUAU#V#V ,c222$&GLLv{<P<P<P$Q$Q!
NN6"""K}>cTY>c>c\a>c>cot  }B  C  C  C  C  C=:O[\dghodpdpqqqq.00*&w22 	S 	SME6$ 9>pZ_>p>pbefmbnbn>p>p  }B  JM  NU  JV  JV  W  W  W  W!w||O=Q=Q=QRR-..C{9>pZ_>p>pbefmbnbn>p>p  }B  JM  NU  JV  JV  W  W  W  W:3*bfgggIu 9>pZ_>p>pbefmbnbn>p>p  }B  JM  NU  JV  JV  W  W  W  W(FGBGLL!2v{4H4H4HII9UUUqLGKy:lV[:l:l^abi^j^j:l:lx}  FI  JQ  FR  FR  S  S  S  S  S777$)++ ##&"%d))%*&-  		
 		
 		
 	#+/'+		
 	
 	
 	
 	:7T`cdk`l`ltwx  uA  uA  	B  	B  	B  	BCIIu\cddj!!!!j!!!!s[   A 
A'A""A'1!D?A
D(D?(D,	,D?/D,	0D??EE#NZ Z
image_pathtop_k
int | Nonec                6   t          dt          |pt                              }t                      }|d         sdddg dS t	          |           }|
dd|  dg dS t                      \  }}t          |||d	
          }|sddg dS t                      \  }}|j        dk    rdddg dS t          }	g }
d}|D ]M\  }}|	
                    ||          \  }}g }t          ||          D ]U\  }}t          |          }|t          k    r6|                    t          |t          |                   |                     V|rdn|                    d          dk    rdnd}|dk    rd}n|dk    r|dk    rd}|
                    |d |d         D             |                    d          |                    d          |                    d          |                    d          |                    d          |d           O|t#          |
          |
dS )Nr   r   library_unavailablezface library is not readyr   )r  error
face_countfacesr\  zcannot read image: Tr  no_face)r  r]  r^  z$face library has no valid embeddingsno_match)kmatchedqualitylow_qualityc                H    g | ]}t          t          |          d            S )rg   )r   r   )r   vs     r.   r   z'identify_image_path.<locals>.<listcomp>3  s(    BBBuQxx++BBBr-   bbox	face_size	det_score
blur_score
used_align)r  rg  rh  ri  rj  rc  rk  top_matches)r  r   r	   r   r   r   r   r   sizer1   r;  zipr   r   rx   r   r   r   )rW  rX  r  r0  r-  r.  r^  rV   	db_matrixr   face_resultsoverall_statusr'   infotop_indexesscoresmatchesidxr   face_statuss                       r.   identify_image_pathrx    s   3u0 01122E$&&F'? u/:Uefqsttt
Z
 
 C
{!,N*,N,N^_jlmmm*,,Hj$S(JDQQQE C#1rBBB,..GY~/:`pq|~ 
BLN  
 
	4 hhyEh::Vk622 	J 	JJC%LLE+++ws3xx/@%HHIII#*wii$((9BUBUYfBfBflv)##&NNy(([M-I-I*N%BBT&\BBB!XXk22!XXk22"hh|4488I.."hh|44&	 		
 	
 	
 	
 %C4E4EP\]]]r-   image_paths	list[str]list[dict[str, Any]]c                \    g }| D ]&}|                     t          ||                     '|S )N)rX  )rx   rx  )ry  rX  resultsrW  s       r.   identify_image_pathsr~  @  s@    G! E E
*:UCCCDDDDNr-   )r4   r5   )rE   r!   r4   r5   )rO   r!   r4   r!   )rV   rW   rE   r!   r4   r5   )r`   ra   rE   r!   r4   r5   )
rn   rr   ro   rr   rp   rr   rq   rr   r4   r5   )r4   ra   )r`   ra   r4   r5   )r4   r!   )r   r   r4   r&   )rV   r   r4   r5   )r4   r   r7   )r   r    r   r2   r4   ra   )r4   r   )r   r   r   )r   r   r   r   r   r!   r4   ra   )r  r!   r4   rr   )rW  r!   rX  rY  r4   ra   )ry  rz  rX  rY  r4   r{  )Q
__future__r   r   rk   r@   r\   rI   	threadingr)  dataclassesr   typingr   r   uuidr   r   numpyr   shared.config.configr   r	   r
   r   r   r   r   r   r   r   r   r   r   &modules.face.services.identity_servicer   r   r   r   r   "modules.face.services.vector_storer   rE   rR   rB   rC   r|   r}   r   r    Lockr   r/   r+   r0   r1   r3   r<   rD   rN   rU   r_   rl   r   r   r   r~   r   r   r   	Unpicklerr   r   r   r   r   r  r  r2  rV  rx  r~  r,   r-   r.   <module>r     s   " " " " " " "   				        ! ! ! ! ! !                       



                                               ; : : : : : GLL11	gll=*55]O<<GLL44	  + + + + + + + + in+/ / / / /#' ' ' ' '$( ( ( ( (! ! ! ! !   , , , ,
	 	 	 	   ! ! ! !: : : : #'$( $"&%  %  %  %  %  % P   : : : :   % % % %/ / / /   0 0 0 0 0v' 0 0 0+ + + +
	 	 	 	 	   .       F b  b  b  b  bF   A" A" A" A" A"Hg" g" g" g" g"T2^ 2^ 2^ 2^ 2^j      r-   