
    ukiH.                     \   d 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  ej                         Z ej                         Z ej                  ej"                  	      Z ej                         Zd
Z G d dej*                        Zedk(  r ej0                          yy)z3Tests for mediapipe.python.solutions.drawing_utils.    )absltest)parameterizedN)text_format)detection_pb2)landmark_pb2)drawing_utils)color)   r
   r
   c                       e Zd Zd Zd Zd Zd Zd Z ej                  dd      d        Z
 ej                  d	d
      d        Zd Zd Zd Zd Zy)DrawingUtilTestc                    t        j                  dt         j                        j                  ddd      }| j	                  t
        d      5  t        j                  |t        j                                d d d        | j	                  t
        d      5  t        j                  |t        j                                d d d        | j	                  t
        d      5  t        j                  dt         j                        }t        j                  g d      }t        j                   |||       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N   dtype      z0Input image must contain three channel bgr data.)        r         ?)nparangeuint8reshapeassertRaisesRegex
ValueErrorr   draw_landmarksr   NormalizedLandmarkListdraw_detectionr   	Detectioneyefloat32array	draw_axis)selfimagerotationtranslations       h/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/mediapipe/python/solutions/drawing_utils_test.pytest_invalid_input_imagez(DrawingUtilTest.test_invalid_input_image%   s   IIb)11!Q:E			F
H Q""5,*M*M*OPQ 
		F
H E""5-*A*A*CDE 
		F
H <,hHH\*keX{;	< <Q QE E< <s%   )D8)EAE8EEEc                 F   t        j                  dt        j                               }t	        j
                  dt        j                        j                  ddd      }| j                  t        d      5  t        j                  ||dg       d d d        y # 1 sw Y   y xY w)Nz1landmark {x: 0.5 y: 0.5} landmark {x: 0.2 y: 0.2}   r   r   zLandmark index is out of range.)r   r   )r   Parser   r   r   r   r   r   r   r   r   r   )r#   landmark_listr$   s      r'   test_invalid_connectionz'DrawingUtilTest.test_invalid_connection3   s    %%;++-/M IIb)11!Q:E			
,M	N C""5-&BC C Cs   5BB c                 B   t        j                  dt        j                               }t	        j
                  dt        j                        j                  ddd      }| j                  t        d      5  t        j                  ||       d d d        y # 1 sw Y   y xY w)Nzlocation_data {format: GLOBAL}r*   r   r   zLocationData must be relative)r   r+   r   r   r   r   r   r   r   r   r   r   )r#   	detectionr$   s      r'   test_unqualified_detectionz*DrawingUtilTest.test_unqualified_detection;   sz    !!"B"/"9"9";=IIIb)11!Q:E			
,K	L 5""5)45 5 5s   5BBc                 >   t        j                  dt        j                               }t	        j
                  dt        j                        }t	        j                  |      }t        j                  |dt        j                  t        j                  t        j                         t        j                  |dt        j                  t        j                  t        j                         t        j                  ||       t        j                   j#                  ||       y )Nzolocation_data {  format: RELATIVE_BOUNDING_BOX  relative_keypoints {x: 0 y: 1}  relative_keypoints {x: 1 y: 0}}d   r3   r   r   c   r5   r   )r   r+   r   r   r   zerosr   copycv2circleDEFAULT_CIRCLE_DRAWING_SPECcircle_radiusr	   	thicknessr   r   testingassert_array_equalr#   r/   r$   expected_results       r'   test_draw_keypoints_onlyz(DrawingUtilTest.test_draw_keypoints_onlyB   s    !!	, .;-D-D-F	HI
 HH]BHH-EggenOJJ*88*00*446 JJ*88*00*446   	2JJ!!%9    c                    t        j                  dt        j                               }t	        j
                  dt        j                        }t	        j                  |      }t        j                  |ddt        j                  t        j                         t        j                  ||       t        j                  j!                  ||       y )Nzklocation_data {  format: RELATIVE_BOUNDING_BOX  relative_bounding_box {xmin: 0 ymin: 0 width: 1 height: 1}}r2   )r   r   )r5   r5   )r   r+   r   r   r   r7   r   r8   r9   	rectangleDEFAULT_BBOX_DRAWING_SPECr	   r=   r   r   r>   r?   r@   s       r'   test_draw_bboxs_onlyz$DrawingUtilTest.test_draw_bboxs_onlyU   s    !!	H 	!	#I
 HH]BHH-EggenOMM/68+11+557   	2JJ!!%9rC   )"landmark_list_has_only_one_elementzlandmark {x: 0.1 y: 0.1})second_landmark_is_invisiblezAlandmark {x: 0.1 y: 0.1} landmark {x: 0.5 y: 0.5 visibility: 0.0}c                 0   t        j                  |t        j                               }t	        j
                  dt        j                        }t	        j                  |      }t        j                  |dt        j                  dz   t        t        j                         t        j                  |dt        j                  t        j                  t        j                         t        j                   ||       t        j"                  j%                  ||       y )Nr2   
   rL      )r   r+   r   r   r   r7   r   r8   r9   r:   r;   r<   DEFAULT_CYCLE_BORDER_COLORr=   r	   r   r   r>   r?   )r#   landmark_list_textr,   r$   rA   s        r'   test_draw_single_landmark_pointz/DrawingUtilTest.test_draw_single_landmark_pointc   s    
  %%&8&2&I&I&KMMHH]BHH-EggenOJJ*881<)*446 JJ*88*00*446   6JJ!!%9rC   )landmarks_have_x_and_y_onlyz1landmark {x: 0.1 y: 0.5} landmark {x: 0.5 y: 0.1})%landmark_zero_visibility_and_presencezNlandmark {x: 0.1 y: 0.5 presence: 0.5}landmark {x: 0.5 y: 0.1 visibility: 0.5}c                    t        j                  |t        j                               }t	        j
                  dt        j                        }t	        j                  |      }d}d}t        j                  |||t        j                  t        j                         t        j                  ||t        j                  dz   t         t        j                         t        j                  ||t        j                  dz   t         t        j                         t        j                  ||t        j                  t        j                  t        j                         t        j                  ||t        j                  t        j                  t        j                         t#        j$                  ||dg       t        j&                  j)                  ||       y )Nr2   )rL   2   )rT   rL   rM   r   rM   r$   r,   connectionsr   r+   r   r   r   r7   r   r8   r9   lineDEFAULT_CONNECTION_DRAWING_SPECr	   r=   r:   r;   r<   rN   r   r   r>   r?   )r#   rO   r,   r$   rA   start_point	end_points          r'   #test_draw_landmarks_and_connectionsz3DrawingUtilTest.test_draw_landmarks_and_connectionsw   sS     %%&8&2&I&I&KMMHH]BHH-EggenOKIHH_k9,22,668 JJ*881<)*446 JJ	*881<)*446 JJ*88*00*446 JJ	*88*00*446   =vhHJJ!!%9rC   c                    t        j                  dt         j                        }t        j                  |      }d}d}d}d}t	        j
                  |||t        j                  t        j                         t	        j
                  |||t        j                  t        j                         t	        j
                  |||t        j                  t        j                         t        j                  d      dz  }t        j                  g dd|| gd||gg      }t        j                  g d	      }	t        j                  |||	       t         j                  j!                  ||       y )
Nr2   rT   rT   )K   rT   )rT      )rT   M   g       @)r   r   r   r   )r   r   gɿ)r   r7   r   r8   r9   arrowedLiner   	RED_COLORDEFAULT_AXIS_DRAWING_SPECr=   GREEN_COLOR
BLUE_COLORsqrtr!   r"   r>   r?   )
r#   r$   rA   originx_axisy_axisz_axisrr%   r&   s
             r'   test_draw_axiszDrawingUtilTest.test_draw_axis   s	   HH]BHH-EggenOFFFFOOOVV]5L5L-779OOOVV]5N5N-779OOOVV]5M5M-779
bAxxAr{RAJ?@H((<(KE8[9JJ!!%9rC   c                    t        j                  dt         j                        }t        j                  |      }d}d}d}d}t	        j
                  |||t        j                  t        j                         t	        j
                  |||t        j                  t        j                         t	        j
                  |||t        j                  t        j                         t        j                  dt         j                        }t        j                  dt         j                        }t        j                  |||       t         j                  j!                  ||       y )Nr2   r_   )r   rT   )rT   r3   r   r   )r   )r   r7   r   r8   r9   rc   r   rd   re   r=   rf   rg   r   r    r"   r>   r?   )	r#   r$   rA   ri   rj   rk   rl   r%   r&   s	            r'   test_draw_axis_zero_translationz/DrawingUtilTest.test_draw_axis_zero_translation   s    HH]BHH-EggenOFFFFOOOVV]5L5L-779OOOVV]5N5N-779OOOVV]5M5M-779vvarzz*H((4rzz2KE8[9JJ!!%9rC   c                    t        j                  dt        j                               }t	        j
                  dt        j                        }t	        j                  |      }d}d}t        j                  |||t        j                  t        j                         t        j                  ||t        j                  dz   t         t        j                         t        j                  ||t        j                  dz   t         t        j                         t        j                  ||t        j                  t        j                  t        j                         t        j                  ||t        j                  t        j                  t        j                         t#        j$                  ||dg       t        j&                  j)                  ||       y )Nz0landmark {x: 0.0 y: 1.0}landmark {x: 1.0 y: 0.0}r2   r4   r6   rM   rU   rV   rX   )r#   r,   r$   rA   r[   r\   s         r'   "test_min_and_max_coordinate_valuesz2DrawingUtilTest.test_min_and_max_coordinate_values   sU   %%	#$0$G$G$IKM HH]BHH-EggenOKIHH_k9,22,668 JJ*881<)*446 JJ	*881<)*446 JJ*88*00*446 JJ	*88*00*446   =vhHJJ!!%9rC   c                    t        j                  dt        j                               }t	        j
                  dt        j                        }t        j                  dd      }t        j                  dd      }t	        j                  |      }d}d	}t        j                  ||||j                  |j                         t        j                  |||j                  d
z   t         |j                         t        j                  |||j                  d
z   t         |j                         t        j                  |||j                  |j                  |j                         t        j                  |||j                  |j                  |j                         t        j"                  ||dg||       t        j$                  j'                  ||       y )Nz0landmark {x: 0.1 y: 0.1}landmark {x: 0.8 y: 0.8}r2   )r   r         )r	   r=   )rt   r   r   r   rK   )P   rv   rM   rU   )r$   r,   rW   landmark_drawing_specconnection_drawing_spec)r   r+   r   r   r   r7   r   r   DrawingSpecr8   r9   rY   r	   r=   r:   r<   rN   r   r>   r?   )r#   r,   r$   rw   rx   rA   r[   r\   s           r'   test_drawing_specz!DrawingUtilTest.test_drawing_spec   s   %%	#$0$G$G$IKM HH]BHH-E)55Q(+77Q(ggenOKIHH_k9$**,C,M,MOJJ$22Q6)+@+J+JL JJ	$22Q6)+@+J+JL JJ$224I4O4O$..0 JJ	+@+N+N$**,A,K,KM  #H3 79 JJ!!%9rC   N)__name__
__module____qualname__r(   r-   r0   rB   rG   r   named_parametersrP   r]   rn   rp   rr   rz    rC   r'   r   r   #   s    <C5:&: "=!!HLM:	M:  "=!!<34:4:<:&:$:>:rC   r   __main__)__doc__absl.testingr   r   r9   numpyr   google.protobufr   mediapipe.framework.formatsr   r   mediapipe.python.solutionsr   ry   rF   rZ   rd   r;   re   rN   TestCaser   r{   mainr   rC   r'   <module>r      s    : ! & 
  ' 5 4 45M557 ";-";";"= 7m77

!
!# 5M557 , [:m,, [:| z(--/ rC   