
    j                        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 d dl	m
Z
 dZdededefd	Zd
ededededeeef         f
dZdededeeef         fdZ	 d'deeef         dededeeef         dz  deeef         f
dZ	 d'deeef         dedej        deeef         dz  deeef         f
dZdeeef         defdZdedeeef         fdZdedefdZdedeeef         fdZdedeeeeef         f         fdZd eeeef                  deeef         fd!Zded
ed"eeeef                  deeeeef         f         fd#Zd$eeef         d%eeef         dz  deeeef                  fd&ZdS )(    N)Any)Image)RESULTS_DIRzidentity_results.jsonnamefallbackreturnc                     t           j                            | pd                                          p|}t	          j        dd|                              d          }|p|S )N z[^A-Za-z0-9._-]+_z._)ospathbasenamestripresub)r   r   basecleaneds       Q/home/longshao/multi-rider-rag/modules/detection/services/result_store_service.py_safe_filenamer      sY    7TZR..0011=XDf(#t44::4@@Gh    job_idjob_typesource_typesource_namec           
      
   t           j                            t          |           }t           j                            |d          }t          j        |d           | |||||t           j                            |d          g dS )NassetsT)exist_okzmanifest.json)r   r   r   r   
result_dir
assets_dirmanifest_pathitems)r   r   joinr   makedirs)r   r   r   r   r   r   s         r   create_result_storer$      sx    k622Jj(33JK
T****""  j/BB	 	 	r   	directoryfilenamec                    t           j                            |          \  }}|}d}t           j                            t           j                            | |                    rK| d| | }|dz  }t           j                            t           j                            | |                    Kt           j                            | |          |fS )N   r   )r   r   splitextexistsr"   )r%   r&   rootext	candidateindexs         r   _unique_pathr/   %   s      **ID#IE
'..i;;
<
< **e*S**	
 '..i;;
<
<  7<<	9--y88r   store
asset_namepayloadextrac                    t          |d          }t          | d         |          \  }}t          |d          5 }|                    |           d d d            n# 1 swxY w Y   ||t          j                            |          t          |          d}|r|                    |           | d         	                    |           |S )N
result.jpgr   wb)idr   r   
size_bytesr!   )
r   r/   openwriter   r   abspathlenupdateappend)	r0   r1   r2   r3   	safe_name	full_pathstored_namefhitems	            r   add_result_bytesrD   /   s    z<88I)%*=yIII{	i		 "
               	**'ll	 D  E	'N$Ks   AA #A imagec                    t           j                            t          |d                    d         dz   }t	          j                    }|                    |dd           t          | ||                                |          S )Nr5   r   z.jpgJPEGZ   )formatquality)r3   )	r   r   r)   r   ioBytesIOsaverD   getvalue)r0   r1   rE   r3   output_namebufs         r   add_result_imagerQ   F   sp     '"">*l#K#KLLQORXXK
*,,C	JJs62J...E;eLLLLr   c           
         | d         | d         | d         | d         t           j                            | d                   t           j                            | d                   t          | d                   | d         d}t	          | d	         d
d          5 }t          j        ||dd           d d d            n# 1 swxY w Y   | d	         S )Nr   r   r   r   r   r   r!   )r   r   r   r   r   r   result_countr!   r    wutf-8encodingF   ensure_asciiindent)r   r   r;   r<   r9   jsondump)r0   manifestrB   s      r   finalize_result_storer_   R   s   /*%]+]+gooeL&9::gooeL&9::E'N++w	 	H 
eO$cG	<	<	< >	(BU1====> > > > > > > > > > > > > > >!!s   C  CCr    c                     t          | dd          5 }t          j        |          cd d d            S # 1 swxY w Y   d S )NrrU   rV   )r9   r\   load)r    rB   s     r   load_result_manifestrc   b   s    	mS7	3	3	3 ry}}                 s   488c                     | sdS t           j                            t           j                            t           j                            |                     t
                    S )Nr
   )r   r   r"   dirnamer;   IDENTITY_REPORT_FILENAME)r    s    r   _identity_report_pathrg   g   sB     r7<<(F(FGGIabbbr   report_pathc                 ^   | rt           j                            |           sg i dS t          | dd          5 }t	          j        |          }d d d            n# 1 swxY w Y   d|vst          |d         t                    sg |d<   d|vst          |d         t                    si |d<   |S )Nr!   summaryra   rU   rV   r!   rk   )	r   r   isfiler9   r\   rb   
isinstancelistdict)rh   rB   datas      r   load_identity_reportrq   m   s     ,bgnn[99 ,+++	k3	1	1	1 Ry}}              d*T']D"A"AWJtI$E$EYKs   AA!Ac                 T    t          |           }|sdg i dfS |t          |          fS )Nr
   rj   )rg   rq   )r    rh   s     r   !load_identity_report_for_manifestrs   y   s>    '66K 0RB////,[9999r   r!   c           
         t          |           ddddddddd	}ddddddd	}| D ]}t          |                    d
          pd                                          }|                    |          }|r||xx         dz  cc<   |                    d          pg }|dxx         t          |          z  cc<   |D ]'}|                    d          r|dxx         dz  cc<   (|S )Nr   )	recognized_asset_countmatched_asset_countno_match_asset_countno_face_asset_countlow_quality_asset_counterror_asset_countlibrary_unavailable_asset_counttotal_face_countmatched_face_countrv   rw   rx   ry   rz   r{   )matchedno_matchno_facelow_qualityerrorlibrary_unavailablestatusr
   r(   facesr|   top_matchesr}   )r<   strgetr   )r!   rk   status_key_maprC   r   
mapped_keyr   faces           r   summarize_identity_itemsr      sG   "%e**  ! #$+,
 
G )*(0$@ N  	3 	3TXXh''-2..4466#''//
 	%J1$!!'R"###s5zz1### 	3 	3Dxx&& 3,---2---	3 Nr   identified_itemsc                    t          |           \  }}|st          d          d |                    dg           D             }t          t	          j                              }|D ]T}t          |                    d          pd                                          }|s;t          |          }	||	d<   |	||<   Ut          |	                                d           }
||t          |
          |
d	}||d
         d<   t          |dd          5 }t          j        ||dd           d d d            n# 1 swxY w Y   ||fS )Nz5manifest_path is required to persist identity resultsc                     i | ]O}t          |t                    |                    d           ,t          |                    d                     |PS asset_idrm   ro   r   r   .0rC   s     r   
<dictcomp>z,persist_identity_results.<locals>.<dictcomp>   sd       dD!! '+hhz&:&:DHHZ  !!4  r   r!   r   r
   recognized_tsc                     t          |                     d          pd          t          |                     d          pd          fS )Nr1   r
   r   )r   r   )rC   s    r   <lambda>z*persist_identity_results.<locals>.<lambda>   sA    &&,"--$$*++
 r   )key)r   
updated_tsrk   r!   rk   r   rT   rU   rV   FrX   rY   )rs   
ValueErrorr   inttimer   r   ro   sortedvaluesr   r9   r\   r]   )r    r   r   rh   existingexisting_mapnow_tsrC   r   mergedmerged_itemsreportrB   s                r   persist_identity_resultsr      s   
 >mLLK RPQQQ LL"--  L
 F  ( (txx
++1r2288:: 	d"(!'X
 
  L +L99	 F '-F9l#	k3	1	1	1 <R	&"5;;;;< < < < < < < < < < < < < < <s   D55D9<D9r^   identity_reportc                 <   i }|r d |                     dg           D             }g }|                      dg           D ]^}t          |          }|                     t          |                     d                              |d<   |                    |           _|S )Nc                     i | ]O}t          |t                    |                    d           ,t          |                    d                     |PS r   r   r   s     r   r   z5attach_identity_to_manifest_items.<locals>.<dictcomp>   sd     
 
 
$%%
 +/((:*>*>
$$%%t
 
 
r   r!   r7   identity)r   ro   r   r>   )r^   r   identity_mapr!   rC   r2   s         r   !attach_identity_to_manifest_itemsr      s     L 

 
'++GR88
 
 
 EWb))  t***..s488D>>/B/BCC
WLr   )N)rK   r\   r   r   r   typingr   PILr   shared.config.configr   rf   r   r   ro   r$   tupler/   bytesrD   rQ   r_   rc   rg   rq   rs   rn   r   r   r    r   r   <module>r      s   				  				 				              , , , , , ,2        s  SV [_`ceh`h[i     9C 93 95c? 9 9 9 9 $(	 S>  S>D 	
 
#s(^   6 $(		M 	MS>	M	M ;	M S>D 		M
 
#s(^	M 	M 	M 	M"c3h "C " " " "  S#X    
c c c c c c	c 	d38n 	 	 	 	:S :U3SRUXCV=W : : : :Dc3h$8 T#s(^    B''' 4S>*' 3S#X	' ' ' 'T38n#s(^d* 
$sCx.     r   