
    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Zd	d
gddgddgddgddgddggZd	dgddgddgddgddgddggZdZ G d  d!ej.                        Zed"k(  r ej4                          yy)#z4Tests for mediapipe.python.solutions.face_detection.    N)
NamedTuple)absltest)parameterized)drawing_utils)face_detectionz#mediapipe/python/solutions/testdataik     i     i     i  i  i'     i        i  i     i  i  i2     i        c                   r    e Zd Zdej                  dedefdZd Zd Z	 e
j                  dd      d	        Zy
)FaceDetectionTestframeresultsidxc                 F   |j                   D ]  }t        j                  ||        t        j                  j                  t        j                         | j                         j                  d      d   dj                  |      z         }t        j                  ||       y )N.z_frame_{}.png)
detections
mp_drawingdraw_detectionospathjointempfile
gettempdiridsplitformatcv2imwrite)selfr   r   r   	detectionr   s         i/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/mediapipe/python/solutions/face_detection_test.py	_annotatezFaceDetectionTest._annotate)   s}    '' 2	y12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      )	mp_facesFaceDetectionassertRaisesRegex
ValueErrorprocessnparangeuint8reshape)r'   facess     r)   test_invalid_image_shapez*FaceDetectionTest.test_invalid_image_shape0   s    				! FU!!
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                  g dt         j                        }|j                  d       t	        j
                  d      5 }|j                  |      }| j                  |j                         d d d        y # 1 sw Y   y xY w)N)d   r>   r0   r.            ?)min_detection_confidence)	r7   zerosr9   fillr2   r3   r6   assertIsNoner   )r'   imager;   r   s       r)   test_blank_imagez"FaceDetectionTest.test_blank_image6   sh    HH]"((3E	JJsO				= ,e$g
**+, , ,s   -BB)short_range_modelr   )full_range_model   c                    t         j                  j                  t         j                  j                  t              d      }t        j                  |      }|j                  \  }}}t        j                  d|      5 }t        d      D ]  }|j                  t        j                  |t
        j                              }	| j                  |j                         |	|       |	j                   d   j"                  }
|
j$                  D cg c]  }|j&                  |z   }}|
j$                  D cg c]  }|j(                  |z   }}t+        j,                  ||f      }|dk(  rCt+        j.                  t+        j0                  |      t+        j0                  t2              z
        }nBt+        j.                  t+        j0                  |      t+        j0                  t4              z
        }| j7                  |	j                   d       | j7                  |
j$                  d       t9        j:                  |t<                	 d d d        y c c}w c c}w # 1 sw Y   y xY w)Nztestdata/portrait.jpgr@   )rA   model_selectionr   r   rI      )r   r   r   dirname__file__r%   imreadshaper2   r3   ranger6   cvtColorCOLOR_BGR2RGBr*   copyr   location_datarelative_keypointsxyr7   column_stackabsasarray$SHORT_RANGE_EXPECTED_FACE_KEY_POINTS#FULL_RANGE_EXPECTED_FACE_KEY_POINTS	assertLennptassert_array_lessDIFF_THRESHOLD)r'   rK   
image_pathrE   rowscols_r;   r   r   rU   keypointrW   rX   face_keypointsprediction_errors                   r)   	test_facezFaceDetectionTest.test_face=   s    bggooh757JJJz"EKKMD$			!$o
G @JOq @#--UC4E4E FGuzz|Wc2**1-;;/</O/OP8XZZ$PP/</O/OP8XZZ$PP!Q0aVVjj(jj=>?@
  VVjj(jj<=>?
 	w))1-}77;.?%@@ @ QP@ @s,   >BI	II/IC8I
IIN)__name__
__module____qualname__r7   ndarrayr   intr*   r<   rF   r   named_parametersri    r+   r)   r   r   '   sT    RZZ * 3 F, "=!!":"9;@;@r+   r   __main__)__doc__r   r    typingr   absl.testingr   r   r%   numpyr7   numpy.testingtestingr_   mediapipe.python.solutionsr   r   r   r2   TEST_IMAGE_PATHr\   r]   ra   TestCaser   rj   mainrp   r+   r)   <module>r|      s    ; 	   ! & 
   C A7),c
S#Jc
),c
S#Jc
(L $(+SzC:Sz(+SzC:Sz'K #1@.. 1@h z(--/ r+   