o
    ͐vhq                     @   s   d dl Z d dlmZmZmZ d dlZd dlZd dlZe 	e j
jd Zd dlmZmZmZmZmZmZmZmZ dd Zdejdejfd	d
ZdedefddZdedefddZdS )    N)analizar_frames_con_openaianalizar_frames_con_openai_uno!analizar_frames_con_openai_variosz#haarcascade_frontalface_default.xml)detectar_rostrodetectar_ojosevaluar_iluminaciondetectar_labiosestimar_parpadeoestimar_mov_labiosestimar_lentesestimar_auricularesc                 C   s   t dd| S )Nz(?<!")(\b\w+\b)(?=\s*:)z"\1")resub)Ztexto r   XC:\Users\Equipo\Documents\GitHub\reconocimiento-facial-lambda\src\utils\vida_avanzada.pysanitizar_json_no_estricto   s   r   framereturnc                 C   s   t | t j}tj|ddd}|D ]Q\}}}}| ||| ||| f }t |t j}t |ddt jt j \}	}
t |
t j	t j
\}}	t|}t j||ddt jd t ||}t |d	  S d S )
Ng?   )ZscaleFactorZminNeighbors<      )r   r   r   )Z	thickness)   r   )cv2cvtColorCOLOR_BGR2GRAYface_cascadedetectMultiScale	thresholdTHRESH_BINARY_INVTHRESH_OTSUfindContoursRETR_EXTERNALCHAIN_APPROX_SIMPLEnp
zeros_likedrawContoursFILLEDbitwise_andresize)r   grayrostrosxywhrostroZgray_rostro_ZthreshZcontoursmaskZrostro_con_maskr   r   r   recortar_rostro_con_contornos   s   
r3   
video_pathc              
   C   sh  t | }d}d }d }d}| rE| \}}|sqE|d7 }t |t j}t|}	|	d ur1|d7 }|dkr9t|}|dkrAt|}| s|  i }
|d ur|d urz;t	||
 }td|}|rh|dn|}zt|}
W n tjy   t|}t|}
Y nw W d	|
iS W d	|
iS  ty } zt|t ddd}
W Y d }~d	|
iS d }~ww d	|
iS )
Nr            
{[\s\S]*?}resultado_limpio Z
error_lhiarawresultado_vida)r   VideoCaptureisOpenedreadr   r   r   r3   releaser   stripr   searchgroupjsonloadsJSONDecodeErrorr   	Exceptionstrlocalsget)r4   captotal_framesZframe_openai_1Zframe_openai_2r+   retr   r*   r0   openai_resultadoresultado_openaimatchr9   	json_correr   r   r   procesar_prueba_vida_avanzada/   s`   
	rT   c              
   C   s  t | }|t j}t|t j}|dkr|| nd}|t j}t|t j}|dkr3|| nd}|r;|dkrAdddiiS ttt|d |d t|d |d t	|d dg}g }|D ]_}t|| }|t j
| | \}	}
|	syqat |
t j}t|}|d urt|
}n"|
j\}}}|
|d	 |d
 d	 |d	 |d
 d	 f }t |d}|| t dt| d| qa|  t|d
k r|tjdtjd t|d
k szCt|d |d |d  }td|}|r|dn|}zt|}W n tj y   t!|}t|}Y nw W d|iS W d|iS  t"yA } zt#|t$ ddd}W Y d }~d|iS d }~ww )Nr   r=   errorz!No se pudo obtener FPS del video.g?g?g      ?g?   r6   )   rW   Zframe_debug_z.jpg)rW   rW   r6   )dtyper5      r8   r9   r:   r;   )%r   r>   rK   CAP_PROP_FPSintCAP_PROP_FRAME_COUNTsortedsetminmaxCAP_PROP_POS_FRAMESr@   r   r   r   r3   shaper)   appendimwritelenrA   r$   zerosuint8r   rB   r   rC   rD   rE   rF   rG   r   rH   rI   rJ   )r4   rL   ZfpsrM   ZduracionZtiempos_objetivoZframes_recortadosZtiempoZframe_targetrN   r   r*   r0   Zframe_recortador/   r.   r1   Zcenter_croprP   rQ   r9   rO   rR   rS   r   r   r   'procesar_prueba_vida_avanzada_one_frame   s|   

,
	rh   )r   Zsrc.models.model_iar   r   r   rE   r   numpyr$   CascadeClassifierdatahaarcascadesr   Zsrc.validators.deteccionr   r   r   r   r	   r
   r   r   r   ndarrayr3   rI   dictrT   rh   r   r   r   r   <module>   s    (h