o
    AVg                     @   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   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   //var/www/html/Attendance-system-app/face_rec.py<lambda>   s    zretrive_data.<locals>.<lambda>c                 S   s   |   S )N)decoder   r   r   r   r       s    	name_rolefacial_featuresc                 S   s
   |  dS )N@)splitr   r   r   r   r   $   s   
 NameRole)r   r   r   )rhgetallpdSeriesapplyindexlistmapto_framereset_indexcolumns)nameretrive_dictretrive_seriesr   
retrive_dfr   r   r   retrive_data   s   


"r)   
buffalo_scinsightface_modelCPUExecutionProvider)r%   root	providers)  r/         ?)ctx_iddet_size
det_threshr   r   c                 C   s   |   } | |  }t|}t||dd}t| }|| d< | 	d| }	t
|	dkrL|	jddd |	d  }
|	j|
 | \}}||fS d}d}||fS )	z1
    cosine similarity base search algorithm
       cosinez
cosine >= r   T)dropinplaceUnknown)copytolistr   asarrayr   cosine_similarityreshapearrayflattenquerylenr#   argmaxloc)	dataframefeature_columntest_vectorr   threshX_listr   similarsimilar_arrdata_filterrC   person_nameperson_roler   r   r   ml_search_algorithm-   s   
rO   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      t g g g d| _d S N)r%   rolecurrent_timedictlogsselfr   r   r   __init__O      zRealTimePred.__init__c                 C   rQ   rR   rU   rX   r   r   r   
reset_dictR   r[   zRealTimePred.reset_dictc           
      C   s   t | j}|jddd |d  }|d  }|d  }g }t|||D ]\}}}|dkr?| d| d| }	||	 q't|dkrOtj	d	g|R   | 
  d S )
Nr%   T)r8   rS   rT   r9   r   r   zattendance:logs)r   	DataFramerW   drop_duplicatesr;   zipappendrB   r   lpushr\   )
rY   rE   	name_list	role_list
ctime_listencoded_datar%   rS   ctimeconcat_stringr   r   r   saveLogs_redisU   s   
zRealTimePred.saveLogs_redisr   r   r0   c              
   C   s   t t }t|}| }|D ]i}	|	d t\}
}}}|	d }t|||||d\}}|dkr4d}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)rG   r   rH   r9   )r   r      r   rk   r   gffffff?   
   r%   rS   rT   )strr   nowfaceappgetr:   astypeintrO   cv2	rectangleputTextFONT_HERSHEY_DUPLEXrW   r`   )rY   
test_imagerE   rF   r   rH   rT   results	test_copyresx1y1x2y2
embeddingsrM   rN   colortext_genr   r   r   face_predictionl   s.   

 zRealTimePred.face_predictionN)__name__
__module____qualname__rZ   r\   rh   r   r   r   r   r   rP   N   s    rP   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
RegistrationFormc                 C   
   d| _ d S Nr   samplerX   r   r   r   rZ         
zRegistrationForm.__init__c                 C   r   r   r   rX   r   r   r   reset   r   zRegistrationForm.resetc           
   
   C   s   t j|dd}d }|D ]9}|  jd7  _|d t\}}}}t|||f||fdd d| j }	t||	||ftjddd |d	 }q||fS )
Nr4   )max_numri   rl   z
samples = g333333?)rk   rk   r   rm   rj   )	rq   rr   r   rs   rt   ru   rv   rw   rx   )
rY   framerz   r   r|   r}   r~   r   r   textr   r   r   get_embedding   s   
zRegistrationForm.get_embeddingc                 C   s   |d ur|  dkr| d| }ndS 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   
name_falsezface_embedding.txt
file_falser	   i   r   )axiszacademy:register)r%   keyvalueT)striposlistdirr   loadtxtr   rt   sizer>   r<   meanrs   tobytesr   hsetremover   )rY   r%   rS   r   x_arrayreceived_samplesx_meanx_mean_bytesr   r   r   save_data_in_redis_db   s$   

z&RegistrationForm.save_data_in_redis_dbN)r   r   r   rZ   r   r   r   r   r   r   r   r      s
    r   )numpyr   pandasr   ru   redisinsightface.appr   sklearn.metricsr   timer   r   hostname
portnumberr   StrictRedisr   r)   rq   preparerO   rP   r   r   r   r   r   <module>   s.    
!D