a
    c_Tg                     @   s   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
Z
d dlmZ d dlZdZdZdZejeeedZd	d
 ZedddgdZejd ddd ddgdfddZG dd dZG dd dZdS )    N)FaceAnalysis)pairwise)datetimez5redis-19050.c16.us-east-1-2.ec2.redns.redis-cloud.comijJ  Z pY403bLDgc7pqJ9mUUzhPGs5OGcI6Bl6)hostportpasswordc                 C   s   t | }t|}|dd }|j}ttdd |}||_| 	 }ddg|_
|d dd tj|ddg< |g d	 S )
Nc                 S   s   t j| t jdS )Ndtype)np
frombufferfloat32x r   AF:\PYTHON\Attendance_System\attendance_system_app\app\face_rec.py<lambda>       zretrive_data.<locals>.<lambda>c                 S   s   |   S )N)decoder   r   r   r   r       r   	name_rolefacial_featuresc                 S   s
   |  dS )N@)splitr   r   r   r   r   $   r   NameRole)r   r   r   )rZhgetallpdSeriesapplyindexlistmapto_framereset_indexcolumns)nameZretrive_dictZretrive_seriesr   Z
retrive_dfr   r   r   retrive_data   s    


"r%   Z
buffalo_scZinsightface_modelZCPUExecutionProvider)r$   rootZ	providers)  r'         ?)Zctx_idZdet_sizeZ
det_threshr   r   c                 C   s   |   } | |  }t|}t||dd}t| }|| d< | 	d| }	t
|	dkr|	jddd |	d  }
|	j|
 | \}}nd}d}||fS )	z1
    cosine similarity base search algorithm
       Zcosinez
cosine >= r   T)dropinplaceUnknown)copytolistr
   asarrayr   Zcosine_similarityreshapearrayflattenquerylenr"   argmaxloc)	dataframefeature_columntest_vectorr   threshZX_listr   ZsimilarZsimilar_arrZdata_filterr6   person_nameperson_roler   r   r   ml_search_algorithm-   s    
r>   c                   @   s6   e Zd Zdd Zdd Zdd Zddgd	fd
dZdS )RealTimePredc                 C   s   t g g g d| _d S N)r$   rolecurrent_timedictlogsselfr   r   r   __init__O   s    zRealTimePred.__init__c                 C   s   t g g g d| _d S r@   rC   rF   r   r   r   
reset_dictR   s    zRealTimePred.reset_dictc           
      C   s   t | j}|jddd |d  }|d  }|d  }g }t|||D ]0\}}}|dkrN| d| d| }	||	 qNt|dkrtj	d	g|R   | 
  d S )
Nr$   T)r,   rA   rB   r-   r   r   zattendance:logs)r   	DataFramerE   Zdrop_duplicatesr/   zipappendr5   r   ZlpushrI   )
rG   r8   	name_listZ	role_listZ
ctime_listZencoded_datar$   rA   ctimeZconcat_stringr   r   r   saveLogs_redisU   s    zRealTimePred.saveLogs_redisr   r   r(   c              
   C   s   t t }t|}| }|D ]}	|	d t\}
}}}|	d }t|||||d\}}|dkrhd}nd}t	
||
|f||f| |}t	|||
|ft	jd|d t	|||
|d	 ft	jd|d | jd
 | | jd | | jd | q"|S )Nbbox	embedding)r:   r   r;   r-   )r   r      r   rR   r   gffffff?   
   r$   rA   rB   )strr   nowfaceappgetr.   astypeintr>   cv2	rectangleputTextFONT_HERSHEY_DUPLEXrE   rL   )rG   Z
test_imager8   r9   r   r;   rB   resultsZ	test_copyresx1y1x2y2
embeddingsr<   r=   colorZtext_genr   r   r   face_predictionl   s.    

 zRealTimePred.face_predictionN)__name__
__module____qualname__rH   rI   rO   rh   r   r   r   r   r?   N   s
   r?   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
RegistrationFormc                 C   s
   d| _ d S Nr   samplerF   r   r   r   rH      s    zRegistrationForm.__init__c                 C   s
   d| _ d S rm   rn   rF   r   r   r   reset   s    zRegistrationForm.resetc           
   
   C   s   t j|dd}d }|D ]r}|  jd7  _|d t\}}}}t|||f||fdd d| j }	t||	||ftjddd |d	 }q||fS )
Nr)   )Zmax_numrP   rS   z
samples = g333333?)rR   rR   r   rT   rQ   )	rX   rY   ro   rZ   r[   r\   r]   r^   r_   )
rG   framer`   rf   ra   rb   rc   rd   re   textr   r   r   get_embedding   s    
zRegistrationForm.get_embeddingc                 C   s   |d ur*|  dkr$| d| }q.dS ndS dt vr>dS tjdtjd}t|jd }||d}t	|}|j
dd	}|tj}| }tjd
||d td |   dS )N r   Z
name_falsezface_embedding.txtZ
file_falser   i   r   )axiszacademy:register)r$   keyvalueT)striposlistdirr
   Zloadtxtr   r[   sizer1   r0   meanrZ   tobytesr   Zhsetremoverp   )rG   r$   rA   rv   Zx_arrayZreceived_samplesZx_meanZx_mean_bytesr   r   r   save_data_in_redis_db   s$    

z&RegistrationForm.save_data_in_redis_dbN)ri   rj   rk   rH   rp   rs   r   r   r   r   r   rl      s   rl   )numpyr
   pandasr   r\   redisZinsightface.appr   Zsklearn.metricsr   timer   ry   hostnameZ
portnumberr   ZStrictRedisr   r%   rX   preparer>   r?   rl   r   r   r   r   <module>   s,   
!D