
    2vhq                        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 j                  e j                  j                  dz         Zd dlmZmZmZmZmZmZmZmZ d Zdej.                  dej.                  fdZd	edefd
Zd	edefdZy)    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                 0    t        j                  dd|       S )Nz(?<!")(\b\w+\b)(?=\s*:)z"\1")resub)textos    0/opt/face_recognition/src/utils/vida_avanzada.pysanitizar_json_no_estrictor      s    66,gu==    framereturnc                    t        j                  | t         j                        }t        j	                  |dd      }|D ]  \  }}}}| |||z   |||z   f   }t        j                  |t         j                        }t        j
                  |ddt         j                  t         j                  z         \  }	}
t        j                  |
t         j                  t         j                        \  }}	t        j                  |      }t        j                  ||ddt         j                         t        j                  ||      }t        j                   |d	      c S  y )
Ng?   )scaleFactorminNeighbors<      )r   r   r   )	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rostrogray_rostro_threshcontoursmaskrostro_con_masks                 r   recortar_rostro_con_contornosr>      s   <<s112D++DcPQ+RG 7Aq!q1ua!e|$ll63+=+=> MM+r38M8MPSP_P_8_`	6&&vs/@/@#BYBYZ!}}V$x_

S//&$7zz/:667 r   
video_pathc                 D   t        j                  |       }d}d }d }d}|j                         r|j                         \  }}|snl|dz  }t        j                  |t         j
                        }t        |      }	|	|dz  }|dk(  rt        |      }|dk(  rt        |      }|j                         r|j                          i }
|b|`	 t        ||      j                         }t        j                  d|      }|r|j                  d      n|}	 t        j                  |      }
d	|
iS d	|
iS # t        j                   $ r# t#        |      }t        j                  |      }
Y =w xY w# t$        $ r3}t'        |      t)               j+                  dd      d}
Y d }~d	|
iS d }~ww xY w)
Nr            
{[\s\S]*?}resultado_limpio 
error_lhiarawresultado_vida)r    VideoCaptureisOpenedreadr!   r"   r   r>   releaser   stripr   searchgroupjsonloadsJSONDecodeErrorr   	Exceptionstrlocalsget)r?   captotal_framesframe_openai_1frame_openai_2r2   retr   r1   r7   openai_resultadoresultado_openaimatchrE   	json_corres                   r   procesar_prueba_vida_avanzadarc   /   s   


:
&CLNNG
,,.XXZ
U||E3#5#56 &qLG1:5AN1:5AN ,,." KKM!n&@	9..Y__aIIm-=>E16u{{1~<L9#'::.>#?  	* *  '' 967GH	#'::i#8 9  	!!fx||$6;  	* 	s7   AE# D* *3E E# E  E# #	F,&FFc           
         t        j                  |       }|j                  t         j                        }t	        |j                  t         j
                              }|dkD  r||z  nd}|j                  t         j                        }t	        |j                  t         j
                              }|dkD  r||z  nd}|r|dk(  rdddiiS t        t        t        |dz  |dz
        t        |dz  |dz
        t        |dz
  d      g            }g }|D ]  }t	        ||z        }|j                  t         j                  |       |j                         \  }	}
|	sGt        j                  |
t         j                        }t        |      }|t        |
      }nC|
j                   \  }}}|
|d	z  |d
z  d	z  |d	z  |d
z  d	z  f   }t        j"                  |d      }|j%                  |       t        j&                  dt)        |       d|        |j+                          t)        |      d
k  rC|j%                  t-        j.                  dt,        j0                               t)        |      d
k  rC	 t3        |d   |d   |d         j5                         }t7        j8                  d|      }|r|j;                  d      n|}	 t=        j>                  |      }d|iS # t<        j@                  $ r# tC        |      }t=        j>                  |      }Y 9w xY w# tD        $ r3}tG        |      tI               j                  dd      d}Y d }~d|iS d }~ww xY w)Nr   rJ   errorz!No se pudo obtener FPS del video.g?g?g      ?g?   rB   )   rg   frame_debug_z.jpg)rg   rg   rB   )dtyperA      rD   rE   rF   rG   )%r    rK   rX   CAP_PROP_FPSintCAP_PROP_FRAME_COUNTsortedsetminmaxCAP_PROP_POS_FRAMESrM   r!   r"   r   r>   shaper0   appendimwritelenrN   r+   zerosuint8r   rO   r   rP   rQ   rR   rS   rT   r   rU   rV   rW   )r?   rY   fpsrZ   duraciontiempos_objetivoframes_recortadostiempoframe_targetr]   r   r1   r7   frame_recortador6   r5   r9   center_cropr_   r`   rE   r^   ra   rb   s                           r   'procesar_prueba_vida_avanzada_one_framer      s'   


:
&C
''#""
#Cswws7789L%(1W|c!!H
''#""
#Cswws7789L%(1W|c!!H#( 7,O"PQQ cHsNHsN+HsNHtO,HsNC #   " R3<(''6XXZ
U||E3#5#56 &;EBOkkGAq!1QqS!VQT!A#q&[ 89K!jjjAO  1l3'8#9":$?Q'R* KKM

 1
$  -rxx!HI 
 1
$
<a "3A"68I!8L

%' 	 		-)9:-25;;q>8H	5#zz*:; 	*  ## 	523CDI#zz)4	5  
a&8<< 2B7
 	* 
s7   0AL  K 3LL LL 	M&M		M)r    src.models.model_iar   r   r   rR   r   numpyr+   CascadeClassifierdatahaarcascadesr#   src.validators.deteccionr   r   r   r	   r
   r   r   r   r   ndarrayr>   rV   dictrc   r    r   r   <module>r      s    
 { {  	 $s$$SXX%:%:=b%bc  > 

 (0c 0d 0PG G Gr   