
    uki                     ,   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlZddl	Z
ddlmZ ddlmZ ddlmZ ddlmZ d	Zd
Zi dddgdddgdddgdddgdddgdddgdddgdddgdddgd d!d"gd#d$d%gd&d'd(gd)d*d+gd,d-d.gd/d0d(gd1d2d"gd3d4d5gd6dgd7dgd8dgd9dgd:dgd;dgd<dgd=dgd>d"gd?d1gd@d.gdAd+gdBd.gdCd(gd<d"gdDZd*d"gdd"gd*dEgdFd"gdGdHgdId%gdJd%gdIdEgdKd%gdIdLgdM
Z G dN dOej0                        ZedPk(  r ej6                          yy)Qz/Tests for mediapipe.python.solutions.face_mesh.    N)
NamedTuple)absltest)parameterized)drawing_styles)drawing_utils)	face_meshz#mediapipe/python/solutions/testdata   !   iY        i\        i`     ie     im     is     iz     }        i     i[        i^        ic        j        ip        iw     |  i  i     i  i  i  i  i  i  i  i  i  i  i  i  i  i  )   i  iu  iv  r$   r   i~  r   i  i  i  i  i  i  i     ib  ik     i  i  i     )
i  i  i  i  i  i  i  i  i  i  c                       e Zd Zdej                  dededefdZd Z	d Z
 ej                  dd	d
d      dededefd       Zy)FaceMeshTestframeresultsidx	draw_irisc           	      |   |j                   D ]  }t        j                  ||t        j                  d t        j                                t        j                  ||t        j                  d t        j                                |szt        j                  ||t        j                  d t        j                                 t        j                  j                  t        j                         | j!                         j#                  d      d   dj%                  |      z         }t'        j(                  ||       y )N)landmark_drawing_specconnection_drawing_spec.z_frame_{}.png)multi_face_landmarks
mp_drawingdraw_landmarksmp_facesFACEMESH_TESSELATIONr   'get_default_face_mesh_tesselation_styleFACEMESH_CONTOURS$get_default_face_mesh_contours_styleFACEMESH_IRISES,get_default_face_mesh_iris_connections_styleospathjointempfile
gettempdiridsplitformatcv2imwrite)selfr,   r-   r.   r/   face_landmarksr@   s          d/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/mediapipe/python/solutions/face_mesh_test.py	_annotatezFaceMeshTest._annotateV   s    !66 =



'
' $"022#56 



$
$ $"0//#23 
!!$$"&$299%<	=!=. 77<<++-twwys/CB/G.=.D.DS.I0J KDKKe    c           	      6   t        j                         5 }| j                  t        d      5  |j	                  t        j                  dt
        j                        j                  ddd             d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz0Input image must contain three channel rgb data.$   dtype      )	r8   FaceMeshassertRaisesRegex
ValueErrorprocessnparangeuint8reshape)rI   facess     rK   test_invalid_image_shapez%FaceMeshTest.test_invalid_image_shapes   s    				 F!!
HJ Fbii"((3;;Aq!DEFF FF FF Fs#   BAB2BB	BBc                    t        j                         5 }t        j                  g dt        j                        }|j                  d       |j                  |      }| j                  |j                         d d d        y # 1 sw Y   y xY w)N)d   r_   rR   rP      )	r8   rT   rX   zerosrZ   fillrW   assertIsNoner5   )rI   r\   imager-   s       rK   test_blank_imagezFaceMeshTest.test_blank_imagey   sf    				 6hh}BHH5ejjoe$g
445	6 6 6s   A%BB)static_image_mode_no_attentionTFr	   ) static_image_mode_with_attentionTTr	   )streaming_mode_no_attentionFF
   )streaming_mode_with_attentionFTri   static_image_moderefine_landmarks
num_framesc           	         t         j                  j                  t         j                  j                  t              d      }t        j                  |      }|j                  \  }}}t        j                  ||d      5 }	t        |      D ]%  }
|	j                  t        j                  |t
        j                              }| j                  |j                         ||
|       g }|j                   D ]  }| j#                  |j$                  |rt        j&                  nt        j(                         |j$                  D cg c]  }|j*                  |z   }}|j$                  D cg c]  }|j,                  |z   }}t/        j0                  ||f      }|j3                  |        | j#                  |d       t4        j7                         D ]c  \  }}t/        j8                  t/        j:                  |d   |         t/        j:                  |      z
        }t=        j>                  |t@               e |stB        j7                         D ]c  \  }}t/        j8                  t/        j:                  |d   |         t/        j:                  |      z
        }t=        j>                  |t@               e ( 	 d d d        y c c}w c c}w # 1 sw Y   y xY w)Nztestdata/portrait.jpgg      ?)rk   rl   min_detection_confidence   r   )"r?   r@   rA   dirname__file__rG   imreadshaper8   rT   rangerW   cvtColorCOLOR_BGR2RGBrL   copyr5   	assertLenlandmark"FACEMESH_NUM_LANDMARKS_WITH_IRISESFACEMESH_NUM_LANDMARKSxyrX   column_stackappendEYE_INDICES_TO_LANDMARKSitemsabsasarraynptassert_array_lessDIFF_THRESHOLDIRIS_INDICES_TO_LANDMARKS)rI   rk   rl   rm   
image_pathrd   rowscols_r\   r.   r-   r5   	landmarksrz   r}   r~   rJ   eye_idxgt_ldsprediction_erroriris_idxs                         rK   	test_facezFaceMeshTest.test_face   sh    bggooh757JJJz"EKKMD$			+)!$
& D */z" D#--UC4E4E FGuzz|Wc3CD! 55 	6I
..  ! #+"M"M'/'F'FH 2;1C1CDXxzzD D!D1:1C1CDXxzzD D!D??Aq62.

%
%n
5	6 	+Q/7==? 	BOGVVVjj-a09:RZZ=OOQ



 0.
A	B ";"A"A"C Dh!vv

/28<=

6"# $ !!"2NC	D'D	D D EDD Ds3   ?C K?J>
K%K
;B:K7A=K>
KKN)__name__
__module____qualname__rX   ndarrayr   intboolrL   r]   re   r   named_parametersr    rM   rK   r+   r+   T   s{    RZZ * 3 :F6 "=!!8978	:
!D !D !D!D:
!DrM   r+   __main__)__doc__r?   rB   typingr   absl.testingr   r   rG   numpyrX   numpy.testingtestingr   mediapipe.python.solutionsr   r   r6   r   r8   TEST_IMAGE_PATHr   r   r   TestCaser+   r   mainr   rM   rK   <module>r      s>   6 	   ! & 
   6 B <7!c
!Sz! #s! #s	!
 #s! #s! #s! #s! #s! #s! #s! #s! #s! #s! #s!  #s!!" #s#!$ s
s
s
s
s
s
s
s
s
s
s
s
s
s
sA! H s
s
s
s
s
s
s
s
s
s RD=)) RDj z(--/ rM   