ó
    8-Tj¾  ã                  ó„  • S r SSKJr  SSKr\R                  R                  SS5        \R                  R                  SS5        \R                  R                  SS5        \R                  R                  S	S
5        \R                  R                  SS5        SSKrSSKrSSKrSSK	r	SSK
Jr  SSKJr  SSKJrJrJrJrJrJr  SSKrSSKr \R0                  " S5         SSKrSrSr\" \R                  R=                  SS5      5      rSr Sr!Sr"Sq#/ SQr$/ SQr%/ SQr&/ SQr'/ SQr(/ SQr)\ " S S5      5       r*S>S  jr+S?S! jr,S?S" jr-  S@         SAS# jjr.  SB             SCS$ jjr/SDS% jr0    SES& jr1    SFS' jr2    SFS( jr3      SGS) jr4        SHS* jr5    SIS+ jr6      SJS, jr7      SKS- jr8        SLS. jr9    SMS/ jr:          SNS0 jr;              SOS1 jr<SPS2 jr=\>S3:X  a	   \=" 5         gg! \ a     GN>f = f! \ a    SrSr GNHf = f! \? a    e \ a€  r@\A" \R„                  " SS4\[F        \C" \@5      R|                  \D" \@5      SS5 \\R‹                  5       \D" \5      \F" \S6S75      \F" \S6S75      \	RŽ                  " S8S99S:.SSS;9SS<9  \?" S=5      eSr@C@ff = f)QuS  
Analisador hÃ­brido estÃ¡vel:
- MediaPipe Tasks Face Landmarker para localizar 478 pontos faciais.
- OpenCV/NumPy para medir caracterÃ­sticas visuais por regiÃ£o.
- OpenCV Haar como fallback integral.
- SaÃ­da JSON Ãºnica e limpa.

NÃ£o realiza diagnÃ³stico mÃ©dico e nÃ£o mede clinicamente hidrataÃ§Ã£o,
sebo, elasticidade ou colÃ¡geno.
é    )ÚannotationsNÚTF_CPP_MIN_LOG_LEVELÚ3ÚGLOG_minloglevelÚMEDIAPIPE_DISABLE_GPUÚ1ÚPYTHONIOENCODINGzutf-8ÚPYTHONUNBUFFERED)Ú	dataclass)ÚPath)ÚAnyÚDictÚListÚOptionalÚSequenceÚTupleé   TFz'PELE_HIBRIDO_MEDIAPIPE_TASKS_OPENCV_4.0ÚPELE_FACE_LANDMARKER_MODELz)/opt/pele-ai/modelos/face_landmarker.taskià  i  ÚINICIALIZACAO)$é
   iR  i)  iL  i  éû   i…  id  iÆ  iC  ii  i   i�  im  i{  iz  é�  iy  é˜   é”   é°   é•   é–   éˆ   é¬   é:   é„   é]   éê   é   é¢   é   é6   ég   éC   ém   )é!   é    éž   é…   é™   é�   )ij  i�  iƒ  i  iu  i|  )é=   é¹   é(   é'   é%   r   i  i  i  i™  i#  iw  iA  i•  i:  é   éT   éµ   é[   é’   )éÔ  iÕ  iÖ  i×  iØ  )iÙ  iÚ  iÛ  iÜ  iÝ  c                  óf   • \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S\S
'   S\S'   S\S'   S\S'   Srg)ÚFaceDataéN   zTuple[int, int, int, int]ÚbboxzOptional[np.ndarray]Ú	landmarksÚstrÚmetodoÚfloatÚ
inclinacaoÚgiro_horizontalÚ	coberturaÚconfianca_localizacaoz	List[str]Úavisos© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__rI   ó    ÚA/mnt/data/ANALISADOR_HIBRIDO_MEDIAPIPE_OPENCV/analisador_local.pyr=   r=   N   s1   ‡ à
#Ó#Ø#Ó#ØƒKØÓØÓØÓØ Ó ØÖrP   r=   c           	     ó@   • [        [        S[        SU 5      5      5      $ )Nç        ç      Y@)rC   ÚmaxÚmin©Úvalors    rQ   ÚlimitarrY   Z   s   € Ü”�Sœ#˜e UÓ+Ó,Ó-Ð-rP   c                ó    • U S:  a  gU S:  a  gg)Né"   ÚBAIXOr)   ÚMODERADOÚELEVADOrI   rW   s    rQ   Únivel_menor_melhorr_   ^   s   € ØˆrƒzØØˆrƒzØØrP   c                ó    • U S:¼  a  gU S:¼  a  gg)Nr)   ÚADEQUADOr3   r]   r\   rI   rW   s    rQ   Únivel_maior_melhorrb   f   s   € Ø�ƒ{ØØ�ƒ{ØØrP   c                ó¢   • U U[         [        S.nU(       a  UR                  U5        [        [        R
                  " USSS9SS9  [        U5      e)N)ÚsucessoÚmensagemÚmotorÚetapaF©Úensure_asciiÚ	allow_nanT©Úflush)ÚVERSAOÚETAPAÚupdateÚprintÚjsonÚdumpsÚ
SystemExit)rd   re   ÚcodigoÚdadosÚrespostas        rQ   Úemitir_jsonrw   n   sW   € ð ØÜÜñ	 €Hö Ø�‰˜Ôä	Ü�
Š
ØØØñ	
ð
 òô �VÓ
ÐrP   c                ó–   • UU c  S O[        [        U 5      S5      U[        [        U5      S5      S.nU(       a  XFS'   U(       a  XVS'   U$ )Né   )ÚnivelrX   Ú	descricaoÚ	confiancaÚ	limitacaoÚcomponentes)ÚroundrY   )rX   rz   r{   r|   r}   r~   Úitems          rQ   Úmetricar�   Š   sW   € ð ð ‰}ñ ä”w˜u“~ qÓ)àÜœ7 9Ó-¨qÓ1ñ	€Dö Ø%ˆ[ÑæØ)ˆ]Ñà€KrP   c           
     ó†  • Sq U R                  5       (       d  [        SSS5        [        R                  " [        U 5      [        R                  S9n[        R                  " U[        R                  5      nUb  UR                  S:X  a  [        SSS5        UR                  S S u  p4U[        :  d
  U[        :  a  [        SSSUUS	.5        [        XC5      nU[        :”  a`  [        [!        U5      -  n[        R"                  " U[%        ['        XF-  5      5      [%        ['        X6-  5      5      4[        R(                  S
9nU$ )NÚCARREGAR_IMAGEMFu-   A fotografia nÃ£o foi encontrada no servidor.ry   ©Údtyper   u;   A fotografia enviada Ã© invÃ¡lida ou nÃ£o pÃ´de ser aberta.uJ   A fotografia possui resoluÃ§Ã£o baixa. Tire outra foto com mais qualidade.)ÚlarguraÚaltura)Úinterpolation)rn   Úis_filerw   ÚnpÚfromfilerA   Úuint8Úcv2ÚimdecodeÚIMREAD_COLORÚsizeÚshapeÚMIN_LARGURAÚ
MIN_ALTURArU   ÚMAX_DIMENSAOrC   ÚresizeÚintr   Ú
INTER_AREA)ÚcaminhoÚbrutoÚimagemr‡   r†   ÚmaiorÚescalas          rQ   Úcarregar_imagemr�   ¦   s(  € à€Eà�?‰?×ÑÜØØ;Øô	
ô �KŠKÜˆG‹Ü�h‰hñ€Eô
 �\Š\ØÜ×Ñó€Fð
 �~˜Ÿ™¨Ó)ÜØØIØô	
ð —l‘l 2 AÐ&�O€Fà”Ó ¬Ó 3ÜØØXØà"Ø ñô		
ô �Ó €EàŒ|ÓÜ¤ e£Ñ,ˆÜ—’Øä”E˜'Ñ*Ó+Ó,Ü”E˜&™/Ó*Ó+ðô Ÿ.™.ñ
ˆð €MrP   c                ó‚  • Sq [        (       d  g [        R                  5       (       d  g  [        R
                  R                  n[        R
                  R                  R                  n[        R
                  R                  R                  n[        R
                  R                  R                  nU R                  S S u  pV [        R                  " U [        R                  5      n[        R                   " [        R"                  R$                  [&        R(                  " U5      S9nU" U" [+        [        5      S9UR,                  SSSSSSS	9n	UR/                  U	5       n
U
R1                  U5      nS S S 5        [3        WS
S 5      nU(       d  g [5        U5      S:w  a  [7        SSSS[5        U5      05        US   n[5        U5      S:  a  g [&        R8                  " U Vs/ s HJ  n[;        UR<                  5      U-  [;        UR>                  5      U-  [;        UR@                  5      U-  /PML     sn[&        RB                  S9nURD                  S:w  dK  UR                  S   S:  d8  [&        RF                  " [&        RH                  " US S 2S S24   5      5      (       d  g [K        S[M        [&        RN                  " [&        RP                  " US S 2S4   5      5      5      5      n[K        S[M        [&        RN                  " [&        RP                  " US S 2S4   5      5      5      5      n[Q        US-
  [M        [&        RR                  " [&        RJ                  " US S 2S4   5      5      5      5      n[Q        US-
  [M        [&        RR                  " [&        RJ                  " US S 2S4   5      5      5      5      nUU::  d  UU::  a  g [&        RT                  " U[V        S S24   SS9n[&        RT                  " U[X        S S24   SS9nUU-
  n[Z        R\                  " [Z        R^                  " [;        US   5      [;        US   5      5      5      n[;        US   5      nUU-   S-  nUU-
  [K        SUU-
  S-  5      -  S-  nUU-
  UU-
  -  [;        Xe-  5      -  n/ n[5        U5      S:¼  GaÃ  U[V        [X        -   [`        -   [b        -   S S24   n[K        S[M        [&        RP                  " US S 2S4   5      5      5      n[Q        U[M        [&        RJ                  " US S 2S4   5      5      5      n[K        S[M        [&        RP                  " US S 2S4   5      5      [M        UU-
  S-  5      -
  5      n [Q        U[M        [&        RJ                  " US S 2S4   5      5      [M        UU-
  S-  5      -   5      n!U U U!2UU24   n"U"Rd                  S:”  a¢  [        R                  " U"[        Rf                  5      n#[;        [&        RT                  " U#S:¬  5      S-  5      n$[;        [&        RT                  " [        Rh                  " U#SS5      S:„  5      S-  5      n%U$S:”  d  U%S:”  a  URk                  S5        [m        UUUU4USUUUS US!9$ ! [         a     g f = f! , (       d  f       GN$= fs  snf ! [n         a    e [         a     g f = f)"NÚMEDIAPIPE_FACE_LANDMARKERry   )Úimage_formatÚdata)Úmodel_asset_pathgš™™™™™á?g      à?FT)Úbase_optionsÚrunning_modeÚ	num_facesÚmin_face_detection_confidenceÚmin_face_presence_confidenceÚmin_tracking_confidenceÚoutput_face_blendshapesÚ%output_facial_transformation_matrixesÚface_landmarksr   z0A fotografia precisa conter exatamente um rosto.Úrostos_detectadosr   r;   r„   ©Úaxis)r   r   ç       @g      ð?g     €F@iÞ  çš™™™™™©?éð   rT   éF   r   g      @é   uW   PossÃ­vel presenÃ§a de Ã³culos/reflexo; a confianÃ§a da regiÃ£o dos olhos foi reduzida.ÚMEDIAPIPE_TASKS_FACE_LANDMARKERg     €W@©r?   r@   rB   rD   rE   rF   rG   rH   )8rn   ÚMEDIAPIPE_IMPORTADOÚMODELO_PADRAOr‰   ÚmpÚtasksÚBaseOptionsÚvisionÚFaceLandmarkerÚFaceLandmarkerOptionsÚRunningModeÚ	Exceptionr‘   r�   ÚcvtColorÚCOLOR_BGR2RGBÚImageÚImageFormatÚSRGBrŠ   ÚascontiguousarrayrA   ÚIMAGEÚcreate_from_optionsÚdetectÚgetattrÚlenrw   ÚarrayrC   ÚxÚyÚzÚfloat32ÚndimÚallÚisfiniterU   r–   ÚfloorrV   ÚceilÚmeanÚLEFT_EYEÚ	RIGHT_EYEÚmathÚdegreesÚatan2Ú	LEFT_IRISÚ
RIGHT_IRISr�   ÚCOLOR_BGR2GRAYÚCannyÚappendr=   rs   )&Ú
imagem_bgrrº   r¼   r½   r¾   r‡   r†   Ú
imagem_rgbÚ	imagem_mpÚopcoesÚ
landmarkerÚ	resultadoÚrostosÚpontosÚpr@   Úx1Úy1Úx2Úy2Úolho_esquerdoÚolho_direitoÚvetor_olhosrD   Únariz_xÚcentro_xÚgirorF   rH   Úregiao_olhosÚmin_xÚmax_xÚmin_yÚmax_yÚrecorte_olhosÚcinza_olhosÚreflexosÚbordass&                                         rQ   Údetectar_mediapipe_tasksrü   ß   sé  € ð (€EçÒØä× Ñ ×"Ñ"ØðÜ—h‘h×*Ñ*ˆÜŸ™Ÿ™×7Ñ7ˆä�H‰H�O‰O×1Ñ1ð 	ô —h‘h—o‘o×1Ñ1ˆð !×&Ñ& r¨Ð*�O€FðAÜ—\’\ØÜ×Ñó
ˆ
ô
 —H’HÜŸ™×,Ñ,Ü×%Ò% jÓ1ñ
ˆ	ñ
 'Ù$Ü!$¤]Ó!3ñð %×*Ñ*ØØ*.Ø)-Ø$(Ø$)Ø26ñ
ˆð ×/Ñ/Øô
àØ"×)Ñ)ØóˆI÷
ô ØØØó
ˆö Øäˆv‹;˜!ÓÜØØBØà'¬¨V«ðô	ð ˜‘ˆäˆv‹;˜ÓØä—H’Hñ  óò  �Aô	 ˜!Ÿ#™#“J Ñ(Ü˜!Ÿ#™#“J Ñ'Ü˜!Ÿ#™#“J Ñ(óñ
  ñô —*‘*ñ

ˆ	ð �N‰N˜aÓØ�O‰O˜AÑ Ó"Ü—’Ü—’Øša  ! ˜eÑ$ó÷ñ ð äØÜ”—’Ü—’Øša ˜d‘Oóóó ó
ˆô ØÜ”—’Ü—’Øša ˜d‘Oóóó ó
ˆô Ø�a‰KÜ”—’Ü—’Øša ˜d‘Oóóó ó
ˆô Ø�Q‰JÜ”—’Ü—’Øša ˜d‘Oóóó ó
ˆð �‹8�r˜R“xØäŸšØ”h   �lÑ#Øñ
ˆô —w’wØ”i  ! �mÑ$Øñ
ˆð Øñð 	ô
 —\’\Ü�JŠJÜ�k !‘nÓ%Ü�k !‘nÓ%óó
ˆ
ô Ø�d‰Oó
ˆð
 �‰GØñˆð
 �xÑÜØØ�b‘˜C‘óñð
 ñð 	ð �"‰WØ�"‰WñäØÑó
ñ
ˆ	ð ˆô ˆv‹;˜#ÔØ$ÜÜñäñô ñð ��ð	ñˆLô ØÜÜ—F’FØ$¢Q¨ TÑ*óóóˆEô ØÜÜ—F’FØ$¢Q¨ TÑ*óóóˆEô ØÜÜ—F’FØ$¢Q¨ TÑ*óóô
 Ø˜"‘W Ñ$óñó
ˆEô ØÜÜ—F’FØ$¢Q¨ TÑ*óóô
 Ø˜"‘W Ñ$óñó
ˆEð 'Ø�e�Ø�e�ðñˆMð
 ×!Ñ! AÓ%Ü!ŸlšlØ!Ü×&Ñ&ó�ô
 !Ü—G’GØ# sÑ*óàñó�ô Ü—G’GÜŸ	š	Ø'ØØóð ñ	óð ñó�ð ˜c“> V¨b£[Ø—M‘MðJôô
 Ø�b˜"˜bÐ!ØØ4Ø!Ø ØØ"&Øñ	
ð 		
øôq ó Ùðú÷:
ö 
üò@øôL ó ØÜó Ùðúse   ªBZ  ÃBZ' Å!ZÅ3Z' Æ<Z' ÇZ' Ç!AZ"È2A/Z' Ê"D"Z' ÏJ:Z' Ú 
ZÚZÚ
ZÚZ' Ú'Z>Ú=Z>c                ó.  • Sq [        R                  " U [        R                  5      n[        R                  " U5      nS[        R
                  R                  S-   4S[        R
                  R                  S-   4/n/ nU H™  u  pV[        R                  " U5      nUR                  5       (       a  M2  UR                  USSS[        R                  S	9nU H@  u  pšp¼UR                  [        U	5      [        U
5      [        U5      [        U5      U45        MB     M›     U(       d5  [        S
SS[        [        [         5      [         R#                  5       S.5        UR%                  S SS9  US   u  pšp¼nU R&                  S S u  pï[        US-  5      n[        US-  5      n[)        SU	U-
  5      n[)        SU
U-
  5      n[+        US-
  X›-   U-   5      n[+        US-
  X¬-   U-   5      nUU-
  UU-
  -  [-        Xþ-  5      -  n[/        UUUU4S SU-   SSUSS/S9$ )NÚOPENCV_HAAR_FALLBACKÚhaarcascade_frontalface_alt2z haarcascade_frontalface_alt2.xmlÚhaarcascade_frontalface_defaultz#haarcascade_frontalface_default.xmlgáz®Gáð?é   )é‚   r  )ÚscaleFactorÚminNeighborsÚminSizeÚflagsFuˆ   Nenhum rosto frontal foi localizado. Tire outra foto olhando diretamente para a cÃ¢mera, com o rosto maior no quadro e boa iluminaÃ§Ã£o.ry   )Úmediapipe_disponivelÚmodelo_mediapipeÚmodelo_existec                ó   • U S   U S   -  $ )Nry   é   rI   )r€   s    rQ   Ú<lambda>Ú!detectar_opencv.<locals>.<lambda>H  s   € Ø�‰G�d˜1‘gÒrP   T)ÚkeyÚreverser   g¸…ëQ¸®?gìQ¸…ë±?r   ÚOPENCV_HAAR_FALLBACK_rS   g      M@uO   MediaPipe nÃ£o foi usado nesta foto; as regiÃµes foram aproximadas pelo OpenCV.rµ   )rn   r�   rÀ   rÝ   ÚequalizeHistr¡   ÚhaarcascadesÚCascadeClassifierÚemptyÚdetectMultiScaleÚCASCADE_SCALE_IMAGErß   r–   rw   r¶   rA   r·   r‰   Úsortr‘   rU   rV   rC   r=   )rš   ÚcinzaÚ
equalizadaÚ
detectoresÚ
candidatosÚnomer˜   Úcascaderæ   rÌ   rÍ   ÚwÚhÚdetectorÚ
altura_imgÚlargura_imgÚmargem_xÚmargem_yré   rê   rë   rì   rF   s                          rQ   Údetectar_opencvr%  û  s�  € ð #€Eä�LŠLØÜ×Ñó€Eô
 ×!Ò!Øó€Jð +Ü�H‰H×!Ñ!Ø.ñ/ð	
ð .Ü�H‰H×!Ñ!Ø1ñ2ð	
ð€Jð 	ð ó $‰ˆÜ×'Ò'Øó
ˆð �=‰=�?‰?Ùà×)Ñ)ØØØØÜ×)Ñ)ð *ð 
ˆó !‰JˆA�!Ø×Ñä˜“FÜ˜“FÜ˜“FÜ˜“FØðöó !ñ! $ö6 ÜØð>ð ô (äœÓ&ä!×)Ñ)Ó+ñô	
ð  ‡O�Oñàð ñ ð 	�1‰ñ €Aˆ!�ð
 	�‰�R�aÐñ €Jô �1�t‘8‹}€HÜ�1�t‘8‹}€Hä	Ø	Ø	ˆH‰ó
€Bô 
Ø	Ø	ˆH‰ó
€Bô 
Ø�a‰Ø	‰�Ñó
€Bô 
Ø�Q‰Ø	‰�Ñó
€Bð 
ˆb‰Ø	ˆb‰ñ	äØÑ ó	ñ€Iô Ø�"�b˜"ÐØà#Øñð ØØØ"ð9ð
ñð rP   c                ó8   • [        U 5      nUb  U$ [        U 5      $ ©N)rü   r%  )rš   Úfaces     rQ   Údetectar_rostor)  ‚  s.   € ô $Øó€Dð ÑØˆäØóð rP   c                óö   • [         R                  " U [         R                  S9n[         R                  " US S 2S S24   5      R	                  [         R
                  5      n[        R                  " UU/S5        U$ )Nr„   ry   éÿ   )rŠ   ÚzerosrŒ   r   ÚastypeÚint32r�   ÚfillPoly)Úformarç   ÚmascaraÚ
pontos_ints       rQ   Úmascara_poligonor3  ‘  so   € ô �hŠhØÜ�h‰hñ€Gô
 —’ØŠq�"�1�"ˆu‰óç�fÜ
�‰óð ô ‡L‚LØØ	ˆØôð €NrP   c                ó  • [         R                  " U [         R                  S9n[        R                  " U[        US   5      [        US   5      4[        S[        US   5      5      [        S[        US   5      5      4SSSSS5        U$ )Nr„   r   r   ih  r+  éÿÿÿÿ)rŠ   r,  rŒ   r�   Úellipser–   rU   )r0  ÚcentroÚeixosr1  s       rQ   Úmascara_elipser9  ©  s‹   € ô
 �hŠhØÜ�h‰hñ€Gô
 ‡K‚KØä��q‘	‹NÜ��q‘	‹Nð	
ô
 �”3�u˜Q‘x“=Ó!Ü�”3�u˜Q‘x“=Ó!ð	
ð 	
Ø	ØØØ
ôð" €NrP   c                ó@   • [        [        R                  " U 5      5      $ r'  )r–   rŠ   Úcount_nonzero)r1  s    rQ   Úarea_mascarar<  Ç  s"   € ô Ü
×ÒØó	
óð rP   c                óB  • Sq U R                  S S u  p#X#4nUR                  u  pVpx[        SXu-
  5      n	[        SX†-
  5      n
XW-   S-  nXh-   S-  nS nS nUR                  S L=(       a§    [        UR                  [        R                  5      =(       a|    UR                  R                  S:H  =(       a\    UR                  R                  S   [        [        [        5      [        [        5      [        [        5      [        [        5      5      :„  nU(       Gaµ   UR                  n[        UU[           5      n[        R                  " [        UU[           5      [        UU[           5      5      n[        UU[           5      n[        R                   " [        R"                  [        S[%        U	S-  5      5      S-  [        S[%        U
S-  5      5      S-  45      n[        R&                  " UU5      n[        R                   " [        R"                  [        S	[%        U	S-  5      5      S-  [        S	[%        U
S
-  5      5      S-  45      n[        R&                  " UU5      n[        R(                  " U[        R*                  " U5      5      n[        R(                  " U[        R*                  " U5      5      n[-        U5      S:  a  S nS nUb  UcÉ  [1        UX¼4U	S-  U
S-  45      n[        R                  " [1        UX¹S-  -
  XjS-  -   4U	S-  U
S-  45      [1        UX¹S-  -   XjS-  -   4U	S-  U
S-  45      5      n[1        UUXjS-  -   4U	S-  U
S-  45      n[        R                  " UU5      n[        R(                  " U[        R*                  " U5      5      n[        R2                  " U[        R4                  S9n[        R6                  " U[        S[%        X¹S-  -
  5      5      [        S[%        XjS-  -   5      5      4[9        US-
  [%        X¹S-  -   5      5      [9        US-
  [%        XjS-  -   5      5      4SS5        [1        UUXjS-  -   4U	S-  U
S-  45      n[1        UUXjS-  -   4U	S-  U
S-  45      n[1        UX¹S-  -
  XjS -  -   4U	S!-  U
S-  45      n[1        UX¹S-  -   XjS -  -   4U	S!-  U
S-  45      n[        R                  " [1        UX¹S-  -
  XjS"-  -   4U	S-  U
S#-  45      [1        UX¹S-  -   XjS"-  -   4U	S-  U
S#-  45      5      n[        R                  " UU5      n[        R                  " UU5      n[        R                  " UU5      nUU[        R(                  " UU5      [        R(                  " UU5      [        R(                  " UU5      [        R(                  " UU5      [        R(                  " UU5      [        R(                  " UU5      [        R(                  " UU5      [        R(                  " UU5      S$.
$ ! [.         a    S nS n GNPf = f)%NÚCRIAR_MASCARASry   r¯   r   é	   g)\�Âõ(¬?r   gìQ¸…ë¡?é   gš™™™™™™?éÄ	  gq=
×£pÝ?g\�Âõ(\ß?g
×£p=
Ç?gš™™™™™Ù?çìQ¸…ëÁ?g333333³?g\�Âõ(\ç?gR¸…ëQÈ?r„   gq=
×£pÍ?g¤p=
×£À?g{®GázÔ?r+  r5  g¤p=
×£à?gáz®Gáº?g)\�Âõ(Ì?ç=
×£p=ê?gÃõ(\�ÂÅ?g
×£p=
·?g�Âõ(\�â?g333333Ã?g®GázÞ?r°   )
r(  ÚpeleÚtestaÚnarizÚqueixoÚzona_tÚbochecha_esquerdaÚbochecha_direitaÚ	bochechasÚolhos_inferiores)rn   r‘   r?   rU   r@   Ú
isinstancerŠ   ÚndarrayrÐ   Ú	FACE_OVALrÖ   r×   ÚLIPSr3  r�   Ú
bitwise_orÚgetStructuringElementÚMORPH_ELLIPSEr–   ÚdilateÚbitwise_andÚbitwise_notr<  r¿   r9  r,  rŒ   Ú	rectanglerV   )rš   r(  r‡   r†   r0  ré   rê   rë   rì   ÚfwÚfhÚcxÚcyÚ	face_maskrD  Úlandmarks_okr@   ÚolhosÚlabiosÚkernel_olhosÚkernel_labiosÚbocaÚ	exclusoesrE  rF  rG  Ú
bochecha_eÚ
bochecha_dÚ	sob_olhosrH  rK  s                                  rQ   Úcriar_mascarasrg  Ñ  s  € ð
 €Eà—l‘l 2 AÐ&�O€FØÐ€EØ—Y‘Y�N€BˆBÜ	ˆQ�‘‹€BÜ	ˆQ�‘‹€BØ
‰'�S‰€BØ
‰'�S‰€Bð 	ð ð 	ð 	ð
 	�‰˜dÐ"÷ 	ÜØ�N‰NÜ�J‰Jó	
÷	ð
 	�‰×Ñ˜qÑ ÷	ð 	�‰×Ñ˜QÑÜÜ”I“Ü”H“Ü”I“Ü”D“	ó	ñ	ð ÷  ðX	ØŸ™ˆIä(ØØœ)Ñ$óˆIô
 —N’NÜ ØØœhÑ'óô !ØØœiÑ(óó	ˆEô &ØØœ$‘óˆFô ×)Ò)Ü×%Ñ%äØÜ  U¡
›Oóð ñô ØÜ  U¡
›Oóð ñð	óð ô  —J’JØØóˆEô ×)Ò)Ü×%Ñ%äØÜ  U¡
›Oóð ñô ØÜ  U¡
›Oóð ñð	óð ô  —Z’ZØØóˆFô
 —?’?ØÜ—’ØóóˆDô —?’?ØÜ—’ØóóˆDô Øóàóð !�	Ø�ð Ñ˜D™LÜ"ØØˆHà�T‘	Ø�T‘	ðó
ˆ	ô —’ÜØà˜d™‘NØ˜d™‘Nðð
 ˜‘IØ˜‘Jðó
ô Øà˜d™‘NØ˜d™‘Nðð
 ˜‘IØ˜‘Jðó
ó
ˆô2 ØàØ˜$‘Y‘ðð
 �T‘	Ø�U‘
ðó

ˆô —N’NØØó
ˆ	ô
 �ŠØÜ�OŠOØóó
ˆô �HŠHØÜ�h‰hñ€Eô
 ‡M‚MØäØÜ�B˜d™‘NÓ#óô ØÜ�B˜d™‘NÓ#óð		
ô Ø˜!‘Ü�B˜d™‘NÓ#óô Ø˜‘
Ü�B˜d™‘NÓ#óð		
ð 	Ø
ô/ô4 ØàØ�d‘‰Nð	
ð
 �‰JØ�‰Ið	
ó
€Eô ØàØ�d‘‰Nð	
ð
 �‰IØ�‰Ið	
ó
€Fô  Øà�d‘‰NØ�d‘‰Nð	
ð
 �‰IØ�‰Ið	
ó
€Jô  Øà�d‘‰NØ�d‘‰Nð	
ð
 �‰IØ�‰Ið	
ó
€Jô —’ÜØà˜$‘Y‘Ø˜$‘Y‘ðð
 �T‘	Ø�T‘	ðó
	
ô 	Øà˜$‘Y‘Ø˜$‘Y‘ðð
 �T‘	Ø�T‘	ðó
	
ó€Iô2 �^Š^ØØó€Fô
 �^Š^ØØó€Fô
 —’ØØó€Ið Øä�OŠOØØóô
 �OŠOØØóô
 �OŠOØØóô
 �OŠOØØóô
 �OŠOØØóô
 �OŠOØØóô
 �OŠOØØóô
 �OŠOØØóñO+ð +øôm ó 	ØˆIØ‹Dð	ús   ÄF4X ØXØXc                ó¶   • U US:„     nUR                   S:X  a#  [        R                  " / [        R                  S9$ UR	                  [        R                  5      $ )Nr   r„   )r�   rŠ   rË   rÏ   r-  )Úcanalr1  Úamostras      rQ   Úvaloresrk  3  sX   € ð Ø�!‰ñ€Gð ‡|�|�qÓÜ�xŠxØÜ—*‘*ñ
ð 	
ð
 �>‰>Ü
�
‰
óð rP   c                óþ
  • Sq [        R                  " U [        R                  5      n[	        UUS   5      nUR
                  S:  a  [        SSS5        [        [        R                  " U[        R                  5      R                  5       5      n[        [        R                  " U5      5      n[        [        R                  " U5      5      n[        [        R                  " US:¬  5      S-  5      n[        [        R                  " US	:*  5      S-  5      n	[	        UUS
   5      n
[	        UUS   5      nSnU
R
                  S:”  aX  UR
                  S:”  aH  [        [        [        R                  " U
5      5      [        [        R                  " U5      5      -
  5      n/ n[!        UR"                  5      nUS:  a  UR%                  S5        OUS:  a  UR%                  S5        US:  a  UR%                  S5        OUS:  a  UR%                  S5        US:”  a  UR%                  S5        OUS:”  a  UR%                  S5        US:  a  UR%                  S5        US:”  a  UR%                  S5        U	S:”  a  UR%                  S5        US:”  a  UR%                  S 5        OUS!:”  a  UR%                  S"5        UR&                  S#:  a  UR%                  S$5        O!UR&                  S%:  a  UR%                  S&5        UR&                  S':”  a  UR%                  S(5        [        UR(                  5      S):”  a  UR%                  S*5        O*[        UR(                  5      S	:”  a  UR%                  S+5        [        UR*                  5      S,:”  a  UR%                  S-5        O*[        UR*                  5      S.:”  a  UR%                  S/5        U(       a.  [        SS0S1R-                  U5      -   SUUUR.                  S2.5        SnU[1        S3[3        SS4U-
  5      S5-  5      -  nU[1        S6[        US7-
  5      S8-  5      -  nU[1        S9US:-  5      -  nU[1        S;[        UR(                  5      S<-  5      -  nU[1        S;[        UR*                  5      S<-  5      -  nUR.                  R5                  S=5      (       a  US>-  n[7        U5      nUS?:¼  a  S@OSAnUUU[9        US5      [9        US5      [9        US5      [9        US5      [9        U	S5      [9        US5      [9        [        UR(                  5      S5      [9        [        UR*                  5      S5      [9        UR&                  SB5      [9        UR:                  S5      SC.
4$ )DNÚVALIDAR_QUALIDADErD  rA  FuX   Pouca Ã¡rea de pele ficou visÃ­vel. Retire objetos que cubram o rosto e tire outra foto.ry   éø   rT   é   rI  rJ  rS   r   r[   u   A foto estÃ¡ muito desfocada.éA   u   A nitidez estÃ¡ apenas regular.é.   u   O rosto estÃ¡ muito escuro.u$   A iluminaÃ§Ã£o estÃ¡ um pouco baixa.éä   u   O rosto estÃ¡ superexposto.éÒ   u$   A iluminaÃ§Ã£o estÃ¡ um pouco forte.é   z$A imagem tem contraste insuficiente.r?  u#   HÃ¡ reflexos estourados em excesso.é   u!   HÃ¡ sombras profundas em excesso.r3   u3   A iluminaÃ§Ã£o estÃ¡ muito desigual entre os lados.é   u1   Existe diferenÃ§a de iluminaÃ§Ã£o entre os lados.gš™™™™™¹?u   O rosto estÃ¡ muito distante.g{®GázÄ?zAproxime um pouco mais o rosto.çáz®Gáê?u(   O rosto estÃ¡ muito prÃ³ximo ou cortado.é   u   Mantenha a cabeÃ§a mais reta.u$   A cabeÃ§a estÃ¡ levemente inclinada.r6   u    Olhe diretamente para a cÃ¢mera.r   u   O rosto estÃ¡ levemente girado.u2   A fotografia nÃ£o atende aos critÃ©rios mÃ­nimos. Ú )ÚfalhasrH   Údetector_facialg      9@ç     €Q@g…ëQ¸…Û?g      2@g     à`@rB  g      ,@g…ëQ¸Õ?g      $@gÍÌÌÌÌÌÜ?ÚOPENCV_HAARg       @éH   ÚBOAÚREGULARr  )
ÚnitidezÚluminosidadeÚ	contrasteÚreflexos_percentualÚsombras_percentualÚdiferenca_ladosÚinclinacao_grausÚgiro_estimado_grausÚcobertura_rostorG   )rn   r�   rÀ   rÝ   rk  r�   rw   rC   Ú	LaplacianÚCV_64FÚvarrŠ   rÕ   ÚstdÚabsÚmedianÚlistrH   rß   rF   rD   rE   ÚjoinrB   rV   rU   Ú
startswithrY   r   rG   )rš   r(  Úmascarasr  rD  r�  r‚  rƒ  Ú
estouradosÚsombrasÚlado_eÚlado_dr†  rz  rH   Ú	pontuacaoÚ	qualidades                    rQ   Úvalidar_qualidaderš  F  sÕ  € ð  €Eä�LŠLØÜ×Ñó€Eô
 ØØ�Ñó€Dð
 ‡y�y�4ÓÜØðCàô		
ô Ü�ŠØÜ�J‰Jó	
÷ ‰#‹%ó	€Gô Ü
�Š�‹ó€Lô Ü
�Šˆt‹ó€Iô Ü
�ŠØ�C‰Kó	
àñ	ó€Jô Ü
�ŠØ�A‰Ió	
àñ	ó€Gô ØØØñ	
ó€Fô ØØØñ	
ó€Fð €Oð 	�‰�a‹Ø�‰�a‹äÜ”"—)’)˜FÓ#Ó$Ü”"—)’)˜FÓ#Ó$ñ%ó
ˆð
 €FÜ�$—+‘+Ó€Fà�ƒ|Ø�‰Ø+õ	
ð 
�2‹Ø�‰Ø-ô	
ð �bÓØ�‰Ø)õ	
ð 
˜Ó	Ø�‰Ø2ô	
ð �cÓØ�‰Ø)õ	
ð 
˜Ó	Ø�‰Ø2ô	
ð �2ƒ~Ø�‰Ø2ô	
ð �Aƒ~Ø�‰Ø1ô	
ð �ƒ|Ø�‰Ø/ô	
ð ˜ÓØ�‰ØAõ	
ð 
˜2Ó	Ø�‰Ø?ô	
ð ‡~�~˜ÓØ�‰Ø+õ	
ð 
�‰˜$Ó	Ø�‰Ø-ô	
ð ‡~�~˜ÓØ�‰Ø6ô	
ô ˆ4�?‰?Ó˜bÓ Ø�‰Ø+õ	
ô 
ˆT�_‰_Ó	 Ó	!Ø�‰Ø2ô	
ô Ø×Ñóà
óð 	�‰Ø.õ	
ô 
Ø×Ñó
à
ó
ð 	�‰Ø-ô	
ö ÜØØ@Ø�H‰H�VÓñàà Ø à—K‘Kñ	ô	
ð €IØ”ØÜØØ�7‰Nó	
ð ñ	óñ €Ið ”ØÜØ˜5Ñ ó	
àñ	óñ €Ið ”ØØ˜$Ñóñ €Ið ”ØÜˆD�O‰OÓ˜tÑ#óñ €Ið ”ØÜØ× Ñ ó	
àñ	óñ €Ið ‡{�{×ÑØ÷ñ ð 	�SÑˆ	äØó€Ið ˜‹?ñ 	àð ð 	ØØô �g˜qÓ!äØ Øóô
 ØØóô
 ØØóô
 ØØóô
 Ø#Øóô
 ÜØŸ™óð ó	ô ÜØ×,Ñ,óð ó	ô Ø—N‘NØóô
 Ø×.Ñ.Øóña4	
ð	9ð 9rP   c                óì   • SU R                  5       -   q U" 5       n[        U[        5      (       d  [	        S5      eU$ ! [
         a+  n[        S SU  S3SS[        U5      S S  35      s S nA$ S nAff = f)NÚMETRICA_u   resultado interno invÃ¡lidoÚNAO_CONCLUSIVOu,    nÃ£o pÃ´de ser concluÃ­da nesta fotografia.rS   u@   Falha isolada; as outras mÃ©tricas continuam. Detalhe tÃ©cnico: éŒ   )Úupperrn   rM  ÚdictÚ
ValueErrorr¿   r�   rA   )r  Úfuncaorå   Úerros       rQ   Úexecutar_seguror¤  i  sž   € ð 	Ø�
‰
‹ñ	ð 
ð

Ù“Hˆ	äØÜ÷
ñ 
ô Ø-óð ð Ðøäó 

ÜØØØˆfÐ@ÐAØð%Ü%(¨£Y¨t° _Ð$5ð7ó	
õ 		
ûð

ús   •(> ¾
A3Á A.Á(A3Á.A3c           
     óf  ^^^^^^• [         R                  " U [         R                  5      m[         R                  " U [         R                  5      m[         R                  " U [         R                  5      mSUUU4S jjnSUUU4S jjnSUUUU4S jjnSUUU4S jjnSUUU4S jjn[        SU5      [        SU5      [        SU5      [        S	U5      [        S
U5      S.n	/ n
S HN  nU	U   R                  S5      n[        U[        [        45      (       d  M4  U
R                  [        U5      5        MP     U
(       a_  [        [        R                  " U
5      5      n[        SUS-  -
  5      n[        U[        U5      SUS S3[!        STS-  5      S5      U	S'   U	$ [        S SSSS5      U	S'   U	$ )Nc                 óx  >• [        TS S 2S S 2S4   TS   5      n [        TS S 2S S 2S4   TS   5      nU R                  S:  a  [        S5      e[        [        R
                  " U S5      5      n[        [        R
                  " U S5      5      n[        [        R                  " U5      5      n[        [        R                  " X:¬  U[        SU5      :*  -  5      S	-  5      n[        US
-  [        SX2-
  5      S-  -   5      n[        U[        U5      SUS S3T	S-  S[        US5      [        X2-
  S5      S.5      $ )Nry   rH  r   i,  zZona T insuficienteéK   é_   g      N@rT   gÍÌÌÌÌÌ@rS   gffffffö?z2Brilho superficial aparente da Zona T estimado em ú.0fú/100.g)\�Âõ(ì?u2   Estimativa visual; nÃ£o mede sebo com equipamento.)Úrealces_percentualÚintervalo_p95_p75)rk  r�   r¡  rC   rŠ   Ú
percentiler�  rÕ   rU   rY   r�   r_   r   )
ÚvÚsÚp75Úp95Úmed_sÚrealcesrX   Úhsvr“  r™  s
          €€€rQ   Ú
oleosidadeÚ%analisar_metricas.<locals>.oleosidade¢  s�  ø€ ÜØ’’1�a�‰LØ�XÑó
ˆô Ø’’1�a�‰LØ�XÑó
ˆð
 �6‰6�C‹<ÜØ%óð ô Ü�MŠMØØóó
ˆô Ü�MŠMØØóó
ˆô Ü�IŠI�a‹Ló
ˆô Ü�GŠGØ‘àÜØØóññó	ð ñ	ó
ˆô Ø�c‰MÜØØ‘	óð ññó
ˆô ØÜØóð)Ø).¨s¨°5ð:ð ˜Ñð2ô
 ØØóô
 Ø™	Øóñó
ð 	
rP   c            	     ó,  >• [         R                  " T	S   T	S   5      n [         R                  " TSS5      n[         R                  " UT5      n[	        UU 5      nUR
                  S:  a  [        S5      e[        S[        [        R                  " US5      5      5      n[        [        R                  " X4:¬  5      S	-  5      n[        [        R                  " US
5      5      n[        US-  US-  -   5      n[        U[        U5      SUS S3T
S-  5      $ )NrK  rF  )r   r   g      @iô  u   Ã�rea de poros insuficienteg      @éR   rT   é\   g      @ç      ø?z5Visibilidade aparente de poros e textura estimada em r©  rª  rw  )r�   rQ  ÚGaussianBlurÚsubtractrk  r�   r¡  rU   rC   rŠ   r­  rÕ   rY   r�   r_   )r1  Ú	suavizadarv   rj  ÚlimiteÚ	proporcaoÚintensidaderX   r  r“  r™  s           €€€rQ   ÚporosÚ analisar_metricas.<locals>.porosò  sI  ø€ Ü—.’.Ø�[Ñ!Ø�WÑó
ˆô
 ×$Ò$ØØØó
ˆ	ô —<’<ØØó
ˆô
 ØØó
ˆð
 �<‰<˜#ÓÜØ-óð ô ØÜÜ—’ØØóóó
ˆô Ü�GŠGØÑ!óàñó
ˆ	ô Ü�MŠMØØóó
ˆô Ø˜‰OØ˜#Ññó
ˆô
 ØÜØóð)Ø).¨s¨°5ð:ð ˜Ñó

ð 
	
rP   c            	     óþ  >• [         R                  " TS   TS   5      n [         R                  " SSS9R                  T
5      n[         R                  " [         R
                  S5      n[         R                  " U[         R                  U5      n[        UU 5      nUR                  S:  a  [        S5      e[        S	[        [        R                  " US
5      5      5      n[        [        R                  " XE:¬  5      S-  5      n[        [        R                  " US5      5      n[!        US-  US-  -   5      nTS-  n	[#        S TR$                   5       5      (       a  U	S-  n	['        U[)        U5      SUS S3U	S5      $ )NrE  rL  rº  )ro  ro  )Ú	clipLimitÚtileGridSize)rt  r  i^  u   Ã�rea de linhas insuficienteg      (@r7   rT   é^   gš™™™™™@gš™™™™™ñ?rC  c              3  óH   #   • U  H  nS UR                  5       ;   v •  M     g7f)u   Ã³culosN)Úlower)Ú.0Úavisos     rQ   Ú	<genexpr>Ú4analisar_metricas.<locals>.linhas.<locals>.<genexpr>u  s"   é € ð 
â$�ð ˜Ÿ™›Ö&Ú$ùs   ‚ "ç
×£p=
ç?z+Linhas superficiais aparentes estimadas em r©  rª  uM   A confianÃ§a da regiÃ£o dos olhos Ã© reduzida quando hÃ¡ Ã³culos ou reflexos.)r�   rQ  ÚcreateCLAHEÚapplyrR  rS  ÚmorphologyExÚMORPH_BLACKHATrk  r�   r¡  rU   rC   rŠ   r­  rÕ   rY   ÚanyrH   r�   r_   )r1  ÚclaheÚkernelÚblackhatrj  r¾  r¿  rÀ  rX   r|   r  r(  r“  r™  s             €€€€rQ   ÚlinhasÚ!analisar_metricas.<locals>.linhas5  s²  ø€ Ü—.’.Ø�WÑØØ"ñó
ˆô —’ØØñ
÷ ‰%�‹,ð 	ô
 ×*Ò*Ü×ÑØó
ˆô
 ×#Ò#ØÜ×ÑØó
ˆô ØØó
ˆð
 �<‰<˜#ÓÜØ.óð ô ØÜÜ—’ØØóóó
ˆô Ü�GŠGØÑ!óàñó
ˆ	ô Ü�MŠMØØóó
ˆô Ø˜‰OØ˜#Ññó
ˆð
  Ñ$ˆ	äñ 
àŸšó
÷ 
ñ 
ð ˜ÑˆIäØÜØóð Ø % c˜{¨%ð1ð ð>ó
ð 	
rP   c                 óð  >• T	S   T	S   T	S   T	S   /n / nU  HÂ  n[        TS S 2S S 2S4   U5      n[        TS S 2S S 2S4   U5      n[        TS S 2S S 2S4   U5      nUR                  S:”  d  MW  UR                  [        [        R
                  " U5      5      [        [        R
                  " U5      5      [        [        R
                  " U5      5      /5        MÄ     [        U5      S	:  a  [        S
5      e[        [        R                  " [        R                  " [        R                  " U[        R                  S9SS95      5      n[        US-  5      n[        U[        U5      SUS S3T
S-  5      $ )NrE  rI  rJ  rG  r   r   ry   éx   r  u   RegiÃµes insuficientesr„   r­   g      @z0Irregularidade visual de tonalidade estimada em r©  rª  g…ëQ¸…ë?)rk  r�   rß   rC   rŠ   r�  rÊ   r¡  rÕ   r�  rË   rÏ   rY   r�   r_   )ÚregioesÚmedianasr1  ÚlÚaÚbÚvariacaorX   Úlabr“  r™  s           €€€rQ   Ú
tonalidadeÚ%analisar_metricas.<locals>.tonalidade‹  sœ  ø€ à�WÑØØ#ñð Ø"ñð �XÑð	
ˆð ˆãˆGÜØ’A’q˜!�G‘ØóˆAô Ø’A’q˜!�G‘ØóˆAô Ø’A’q˜!�G‘ØóˆAð
 �v‰v˜�|Ø—‘äÜŸIšI a›Lóô ÜŸIšI a›Lóô ÜŸIšI a›Lóð
öñ ô: ˆx‹=˜1ÓÜØ(óð ô Ü�GŠGÜ—’Ü—H’HØ Ü Ÿj™jñð ñóó

ˆô Ø�s‰Nó
ˆô ØÜØóðØ$ S˜k¨ð0ð ˜Ñó

ð 
	
rP   c                 ó¢  >• [         R                  " TS   TS   5      n [        TS S 2S S 2S4   U 5      nUR                  S:  a  [	        S5      e[        [        R                  " U5      5      n[        [        R                  " US5      5      n[        US-
  S-  [        S	X2-
  5      S
-  -   5      n[        U[        U5      SUS S3TS-  5      $ )NrK  rE  r   r   u   Ã�rea insuficienteéU   g     €_@g      @rS   r¯   u)   VermelhidÃ£o visual aparente estimada em r©  rª  g333333ë?)r�   rQ  rk  r�   r¡  rC   rŠ   r�  r­  rY   rU   r�   r_   )r1  Úcanal_aÚmedianaÚp85rX   rà  r“  r™  s        €€€rQ   ÚvermelhidaoÚ&analisar_metricas.<locals>.vermelhidao×  s  ø€ Ü—.’.Ø�[Ñ!Ø�WÑó
ˆô
 Ø’’1�a�‰LØó
ˆð
 �<‰<˜#ÓÜØ$óð ô Ü�IŠIØóó
ˆô Ü�MŠMØØóó
ˆô àØñàñô ØØ‘óð ññ	ó	
ˆô ØÜØóðØ$ S˜k¨ð0ð ˜Ñó

ð 
	
rP   rµ  rÁ  rÖ  rá  rè  ©rµ  rÁ  Úlinhas_expressaorá  rè  )rÁ  rë  rá  rX   rT   rÍ  u.   AparÃªncia visual de hidrataÃ§Ã£o estimada em r©  rª  r|  uJ   NÃ£o Ã© mediÃ§Ã£o clÃ­nica de hidrataÃ§Ã£o. Exige equipamento especÃ­fico.Ú
hidratacaor�  u5   A aparÃªncia de hidrataÃ§Ã£o nÃ£o pÃ´de ser estimada.rS   u+   NÃ£o Ã© mediÃ§Ã£o clÃ­nica de hidrataÃ§Ã£o.)ÚreturnúDict[str, Any])r�   rÀ   rÝ   ÚCOLOR_BGR2HSVÚCOLOR_BGR2LABr¤  ÚgetrM  r–   rC   rß   rŠ   rÕ   rY   r�   rb   rV   )rš   r“  r™  r(  rµ  rÁ  rÖ  rá  rè  rå   Úvalores_baseÚchaverX   Úcargarì  r  r´  rà  s    ```           @@@rQ   Úanalisar_metricasrõ  �  s  ý€ ô �LŠLØÜ×Ñó€Eô
 �,Š,ØÜ×Ñó€Cô
 �,Š,ØÜ×Ñó€C÷
N
ñ N
÷`A
ñ A
÷FT
ò T
÷lJ
ñ J
÷X2
ñ 2
ôl ØØóô
 ØØóô
 ØØóô
 ØØóô
 ØØóñ-€Ið8 !#€Lóˆð
 Øñ
ç
‰#ˆg‹,ð 	ô ØÜ”%ˆL÷
ó 
ð ×ÑÜ�e“öñö" ÜÜ�GŠGØóó
ˆô ØØ�D‰Lñó
ˆ
ô ØÜ"Øóð#Ø#-¨cÐ"2°%ð9ô ØØ Ñ$óð
5óð 	�,ÑðH Ðô ØØ ð/ð àAóð 	�,Ñð ÐrP   c                óÖ  • / nS HN  nUU   R                  S5      n[        U[        [        45      (       d  M4  UR	                  [        U5      5        MP     U(       a  [        [
        R                  " U5      5      OSn	U	S:  a  SO	U	S:  a  SOSn
US	   R                  S5      nUS
   R                  S5      n[        U[        [        45      (       a*  [        U[        [        45      (       a  US:”  a	  US:  a  SnOJ[        U[        [        45      (       a	  US:”  a  SnO&[        U[        [        45      (       a	  US:  a  SnOSnSSSU  SUS S3SUR                   3SU
 3SU 3S/nSSSSSSS .nUR                  5        HD  u  nnXW   nUR	                  U S!UR                  S"S#5       SUR                  SS$5       S%35        MF     U(       a8  UR                  SS&/5        UR                  U Vs/ s H  nS'U 3PM
     sn5        UR                  SS(/5        UR                  5        Vs/ s HA  n[        UR                  S)5      [        [        45      (       d  M/  UR                  S)S*5      PMC     nn0 S+S,_S-S._S/[        _S0S,_S1U _S2[        US35      _S4U(       a  S5R                  U5      OS6_S7U_S8UR                  _S9UR                  R                  S:5      _S;[        [         5      _S<U_S=S>_S?U
_S	US	   _S@US@   _SAUSA   _USB   US
   USC   SDSESFR                  U5      [        U(       a  [        [
        R                  " U5      5      OS*S35      SG.E$ s  snf s  snf )HNrê  rX   g      I@é#   u   APARÃŠNCIA VISUAL EQUILIBRADAé>   u   ATENÃ‡ÃƒO VISUAL MODERADAu   ATENÃ‡ÃƒO VISUAL ELEVADArµ  rì  é0   Ú"PELE_MISTA_COM_DESIDRATACAO_VISUALÚTENDENCIA_OLEOSA_VISUALé-   ÚTENDENCIA_SECA_VISUALÚPELE_VISUALMENTE_EQUILIBRADAu$   ANÃ�LISE HÃ�BRIDA MEDIAPIPE + OPENCVÚ zQualidade: z (r©  z/100)z
Detector: zStatus visual: zPerfil visual: Ú
OleosidadezPoros e texturazLinhas aparentesÚ
Tonalidadeu   HidrataÃ§Ã£o visualu   VermelhidÃ£o)rµ  rÁ  rë  rá  rì  rè  z: rz   r�  u   â€”Ú)zAVISOS DA CAPTURAu   â€¢ u�   AVISO: triagem visual por fotografia comum. NÃ£o equivale a diagnÃ³stico dermatolÃ³gico, mediÃ§Ã£o instrumental ou indicaÃ§Ã£o de procedimento.r|   rS   rd   Tre   u   AnÃ¡lise hÃ­brida concluÃ­da.rf   Úrosto_detectadoÚqualidade_imagemÚpontuacao_qualidadery   Úobservacoes_qualidadery  u$   A fotografia atendeu aos critÃ©rios.Úmetricas_qualidader{  Úmediapipe_utilizadoÚ	MEDIAPIPEr  Úperfil_codigoÚperfil_motivoud   ClassificaÃ§Ã£o visual baseada em brilho, textura, tonalidade, vermelhidÃ£o e hidrataÃ§Ã£o aparente.Ústatus_visualrÁ  rë  rá  rè  u²   Manter iluminaÃ§Ã£o, distÃ¢ncia e enquadramento semelhantes nas prÃ³ximas avaliaÃ§Ãµes. AlteraÃ§Ãµes persistentes devem ser avaliadas presencialmente por profissional habilitado.u:   Triagem visual; nÃ£o substitui avaliaÃ§Ã£o dermatolÃ³gica.Ú
)rá  rì  rè  ÚrecomendacoesÚaviso_importanteÚresultado_completoÚconfianca_global)rñ  rM  r–   rC   rß   rŠ   rÕ   rB   ÚitemsÚextendÚvaluesrm   r   r‘  r’  rA   r·   )Úqualidade_nomeÚqualidade_pontosrH   Úqualidade_detalhesr(  ÚmetricasÚvalores_atencaoró  rX   ÚmediaÚstatusÚoleorì  ÚperfilÚ	relatorioÚnomesÚtitulor€   rÊ  Ú
confiancass                       rQ   Úmontar_resultador"  m  sð  € ð $&€Oóˆð Øñ
ç
‰#ˆg‹,ð 	ô ØÜ”%ˆL÷
ó 
ð ×"Ñ"Ü�e“öñö2 ô 	Ü�GŠGØóô	
ð ð 
ð �2‹:ñ 	(ð �2‹:ñ 	$ð 	#ð ð Øñç	�cˆ'ƒlð 	ð Øñç	�cˆ'ƒlð ô
 	ØÜ”%ˆL÷	
ñ 	
ô 	ØÜ”%ˆL÷	
ñ 	
ð 	ˆr‹	Ø�R‹ð 1ñ 	ô 	ØÜ”%ˆL÷	
ñ 	
ð 	ˆr‹	ð &ñ 	ô 	ØÜ”%ˆL÷	
ñ 	
ð 	�R‹ð $ñ 	ð
 +ð 	ð
 	/Ø
à˜.Ð)ð *Ø  Ð% Uð,ð �T—[‘[�MÐ"Ø
˜&˜Ð"Ø
˜&˜Ð"Ø
ð€Ið àààà!àñ€Eð  	�‰Žñ 	ˆˆvð ‰ˆà×ÑØˆh�bØ�x‰x˜Ð!1Ó2Ð3ð 4Ø—‘˜ %Ó(Ð)¨ð,ö	
ñ	 	ö Ø×ÑàØ#ðô	
ð 	×Ññ $óâ#�Eð �u�g“Ù#ñô	
ð ×ÑàðIð	
ô	ð  —O‘OÔ%óò
 &ˆDÜØ�H‰HØóô ”%ˆL÷	
ó	
ˆ�‰ØØö	
ñ &ð ð ðOØ�4ðOàØ+ðOð 	”ð	Oð
 	˜4ðOð 	ØðOð 	ÜØ ØóðOð 	 ö ð —‘˜Ô ð 7ð%Oð( 	Øð+Oð, 	Ø�K‰Kð/Oð0 	Ø�K‰K×"Ñ"Øóð3Oð8 	Ü”Óð;Oð< 	Øð?Oð@ 	ð+ðEOðL 	ØðOOðP 	Ø�\Ñ"ðSOðT 	Ø�WÑðWOðX 	ØØ"ñð[Oðb �\Ñ"à�\Ñ"à�]Ñ#ð?ð.ð �I‰I�iÓ äö ô Ü—G’GØ"óôð Øó	òKOð Oùò?ùò"s   Ç6M!È1.M&É#M&c                 óp  • [        [        R                  5      S:w  a  [        SSS5        [	        [        [        R                  S   5      5      n [        U 5      n[        U U5      n[        U UU5      u  nnnn[        U UUU5      nSq
[        UUUUUU5      n[        [        R                  " USSS9SS9  g )	Nry   FzUso incorreto do analisador.r   ÚMONTAR_RESULTADOrh   Trk   )rÊ   ÚsysÚargvrw   r�   r   r)  rg  rš  rõ  rn   r"  rp   rq   rr   )	rš   r(  r“  r  r  rH   r  r  rv   s	            rQ   Úmainr'  o  sè   € ô Œ3�8‰8ƒ}˜ÓÜØØ*Øô	
ô ÜÜ�H‰H�Q‰Kó	
ó€Fô Øó€Dô ØØó€Hô 	ØØØó	ñØØØØô !ØØØØó	€Hð €EäØØØØØØó€Hô 
Ü�
Š
ØØØñ	
ð
 órP   Ú__main__z,O analisador encontrou uma falha controlada.i¼  Ú__version__Údesconhecidoro  )Úlimit)rd   re   rf   rg   Ú	tipo_erroÚdetalhesÚmediapipe_importador	  ÚmodeloÚopencvÚnumpyÚtracerh   rk   r  )rX   rC   rí  rC   )rX   rC   rí  rA   )r   N)
rd   Úboolre   rA   rt   r–   ru   úOptional[Dict[str, Any]]rí  ÚNone)NN)rX   zOptional[float]rz   rA   r{   rA   r|   rC   r}   zOptional[str]r~   r4  rí  rî  )r˜   r   rí  ú
np.ndarray)rà   r6  rí  zOptional[FaceData])rš   r6  rí  r=   )r0  úTuple[int, int]rç   r6  rí  r6  )r0  r7  r7  úTuple[float, float]r8  r8  rí  r6  )r1  r6  rí  r–   )rš   r6  r(  r=   rí  úDict[str, np.ndarray])ri  r6  r1  r6  rí  r6  )rš   r6  r(  r=   r“  r9  rí  z.Tuple[str, float, List[str], Dict[str, float]])r  rA   rí  rî  )
rš   r6  r“  r9  r™  rC   r(  r=   rí  úDict[str, Dict[str, Any]])r  rA   r  rC   rH   zSequence[str]r  zDict[str, float]r(  r=   r  r:  rí  rî  )rí  r5  )HÚ__doc__Ú
__future__r   ÚosÚenvironÚ
setdefaultrq   rØ   r%  Ú	tracebackÚdataclassesr   Úpathlibr   Útypingr   r   r   r   r   r   r�   r1  rŠ   ÚsetNumThreadsr¿   Ú	mediapiper¸   r¶   rm   rñ  r·   r’   r“   r”   rn   rO  rÖ   r×   rP  rÛ   rÜ   r=   rY   r_   rb   rw   r�   r�   rü   r%  r)  r3  r9  r<  rg  rk  rš  r¤  rõ  r"  r'  rJ   rs   r£  rp   rr   ÚtyperA   r‰   rÉ   Ú
format_excrI   rP   rQ   Ú<module>rH     s¨  ðñ	õ #ã 	à ‡
�
× Ñ Ð,¨cÔ 2Ø ‡
�
× Ñ Ð(¨#Ô .Ø ‡
�
× Ñ Ð-¨sÔ 3Ø ‡
�
× Ñ Ð(¨'Ô 2Ø ‡
�
× Ñ Ð(¨#Ô .ã Û Û 
Û Ý !Ý ß =× =ã 
Û ð	Ø×Ò�aÔð ÛØÐð 
3€ÙØ‡J�J‡N�NØ$Ø3óó€ð €Ø€
Ø€Ø€ò€	ò
 )€Ú*€	ò€ò &€	Ú&€
ð ÷ð ó ðô.ôôð Ø&*ð	Øðàðð ðð $ð	ð
 
õðB  $Ø,0ðØðàðð ðð ð	ð
 ðð *ðð õô86ðrYØðYàôYðxDØðDàôDðNØðàôðØðàðð ôð0Øðàðð ðð ô	ð<Øðàôð_Øð_à
ð_ð ô_ðDØðàðð ôð&`Øð`à
ð`ð $ð`ðô	`ðF	!
Ø
ð!
ð ô!
ðH]Øð]à#ð]ð ð]ð ð	]ð
 ô]ð@Øðàðð ðð )ð	ð
 ðð (ðð ôôD=ð@ ˆzÓð0Ù�ð øðSD ó 	Úð	ûð ó  Ø	€BØÓð ûðND ó Øàó *ÙØ�JŠJà$àFØ#Ü"á˜T›
×+Ñ+á˜D›	 $ 3˜à+à%×-Ñ-Ó/á˜MÓ*áØØ)Ø*óñ  ØØ)Ø*óð "×,Ò,Ø"#ññ; ðB #ØñG$ðJ òM'	
ñR ˜‹mÐûðU*ús=   ÃH Ã!H" ÈH3 ÈHÈHÈ"
H0È/H0È3J?È?A;J:Ê:J?