
    Wpf*%                        d Z ddl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dZddgddgddgddgddgddgddgddgddgddgd d!gd"d#gd$d%gd&d'gd(d)gd*d+gd,d-gd.d/gd0d1gd2d3gd4d5ggd6d7gd8dgd9d:gd;d<gd=d>gd?d@gdAd6gdBdCgdDdEgdFdGgdHdIgdJdKgdLdMgd6dNgdOdPgdQdRgdSdTgdUdVgdWdXgdYdQgdZd[gggZ G d\ d]ej                  Zed^k    r ej                     dS dS )_z+Tests for mediapipe.python.solutions.hands.    N)
NamedTuple)absltest)parameterized)drawing_styles)drawing_utils)handsz#mediapipe/python/solutions/testdata      iD  "   i  2   i  ^   i     i     i     i     i  i$  i  iJ  i!     i  i	  i  i?  i  ih  iE     iK     iQ  i0  iW  iZ  ig     it     i~  i  i  i      iW     i  i  i!     iB                 Z      3            s      <                  |   M   u   $   j      \      O   D   ]   c                       e Zd Zd Zd Zd Zd Zdej        de	de
fdZd	 Zd
 Z ej        dddd          d             Z	 	 	 ddZ ej        d          d             ZdS )	HandsTestc                     t           j                            t          j                    |                                                     d          d         |z             S )N.)ospathjointempfile
gettempdiridsplit)selfnames     e/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/mediapipe/python/solutions/hands_test.py_get_output_pathzHandsTest._get_output_path8   s?    7<<+--twwyys/C/CB/G$/NOOO    c                 ^    |\  }t          j        fd|j        D                       S )Nc                 J    g | ]}|j         z  |j        z  |j        z  f S  xyz).0lmkcolsrowss     rF   
<listcomp>z6HandsTest._landmarks_list_to_array.<locals>.<listcomp>=   sB     : : : cedlCEDLA : : :rH   npasarraylandmark)rD   landmark_listimage_shape_rR   rS   s       @@rF   _landmarks_list_to_arrayz"HandsTest._landmarks_list_to_array;   sQ    MD$: : : : : :"/"8: : : ; ; ;rH   c                 H    t          j        d |j        D                       S )Nc                 6    g | ]}|j         |j        |j        fS rK   rL   )rP   rQ   s     rF   rT   z<HandsTest._world_landmarks_list_to_array.<locals>.<listcomp>A   s5     : : : suce, : : :rH   rU   )rD   rY   s     rF   _world_landmarks_list_to_arrayz(HandsTest._world_landmarks_list_to_array@   s5    : : :"/"8: : : ; ; ;rH   c                 Z    t          j        t          j        ||z
            |           d S )N)nptassert_array_lessrV   abs)rD   array1array2	thresholds       rF   _assert_diff_lesszHandsTest._assert_diff_lessD   s)    "&&119=====rH   frameresultsidxc           	         |j         D ]F}t          j        ||t          j        t          j                    t          j                               Gt          j	        
                    t          j                    |                                                     d          d         d                    |          z             }t!          j        ||           d S )Nr;   r<   z_frame_{}.png)multi_hand_landmarks
mp_drawingdraw_landmarksmp_handsHAND_CONNECTIONSr    get_default_hand_landmarks_style"get_default_hand_connections_styler=   r>   r?   r@   rA   rB   rC   formatcv2imwrite)rD   rh   ri   rj   hand_landmarksr>   s         rF   	_annotatezHandsTest._annotateG   s    !6 ? ?
!:

9
;
;

;
=
=? ? ? ? 7<<+--twwyys/C/CB/G.=.D.DS.I.I0J K KDKerH   c           	      T   t          j                    5 }|                     t          d          5  |                    t          j        dt
          j                                      ddd                     d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz0Input image must contain three channel rgb data.r0   dtype      )	ro   HandsassertRaisesRegex
ValueErrorprocessrV   arangeuint8reshape)rD   r   s     rF   test_invalid_image_shapez"HandsTest.test_invalid_image_shapeQ   s=   			 FU!!
HJ J F Fbi"(333;;Aq!DDEEEF F F F F F F F F F F F F F FF F F F F F F F F F F F F F F F F Fs5   BA	B9BB			BB		BB!$B!c                 ^   t          j                    5 }t          j        g dt          j                  }|                    d           |                    |          }|                     |j                   |                     |j	                   d d d            d S # 1 swxY w Y   d S )N)d   r   r{   ry      )
ro   r}   rV   zerosr   fillr   assertIsNonerl   multi_handedness)rD   r   imageri   s       rF   test_blank_imagezHandsTest.test_blank_imageW   s    			 2Uh}}}BH555ejjoooe$$g
4555
01112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   BB""B&)B&)!static_image_mode_with_lite_modelTr      )video_mode_with_lite_modelFr   
   )!static_image_mode_with_full_modelT   r   )video_mode_with_full_modelFr   r   c                 J   t           j                            t           j                            t                    d          }t          j        |          }t          j        |d|d          5 }t          |          D ]}|
                    t          j        |t
          j                            }|                     |                                ||           d |j        D             }	g }
|j        \  }|j        D ]n}|                     |j        d           fd|j        D             }fd|j        D             }t)          j        ||f          }|
                    |           o|                     |	d           |                     |
d           t)          j        t)          j        |
          t)          j        t2                    z
            }|d	k    rt4          nt6          }t9          j        ||           	 d d d            d S # 1 swxY w Y   d S )
Nztestdata/hands.jpg         ?static_image_modemax_num_handsmodel_complexitymin_detection_confidencec                 2    g | ]}|j         d          j        S )r   )classificationlabel)rP   
handednesss     rF   rT   z.HandsTest.test_multi_hands.<locals>.<listcomp>o   s3     
 
 
 %a(.
 
 
rH      c                 $    g | ]}|j         z  S rK   )rM   )rP   rX   rR   s     rF   rT   z.HandsTest.test_multi_hands.<locals>.<listcomp>w        DDDXxzD DDDrH   c                 $    g | ]}|j         z  S rK   )rN   )rP   rX   rS   s     rF   rT   z.HandsTest.test_multi_hands.<locals>.<listcomp>x   r   rH   r   )r=   r>   r?   dirname__file__rt   imreadro   r}   ranger   cvtColorCOLOR_BGR2RGBrw   copyr   shaperl   	assertLenrX   rV   column_stackappendrc   rW   $EXPECTED_HAND_COORDINATES_PREDICTIONLITE_MODEL_DIFF_THRESHOLDFULL_MODEL_DIFF_THRESHOLDra   rb   )rD   r   r   
num_frames
image_pathr   r   rj   ri   r   multi_hand_coordinatesr[   	landmarksrM   rN   hand_coordinatesprediction_errordiff_thresholdrR   rS   s                     @@rF   test_multi_handszHandsTest.test_multi_hands_   s    bgooh779MNNJJz""E	+)!$	
& 
& 
& @ */z"" @ @#--UC4E F FGGuzz||Wc222
 
%6
 
 

 "$dA 5 	: 	:I
..+R
0
0
0DDDD1CDDD!DDDD1CDDD!_aV44

 
'
'(8
9
9
9
9z1%%%-q1116J-..J;<<=> > 7G!6K6K22Qj.????+@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   1FHHHr   r   r{   c                 j   t          j        |          }g }g }t          j        d||d          5 }		 |                                \  }
}|
sn't          j        |t           j                  }|j        }|	                    |          }t          j
        |||g          t          j        z  }t          j
        |||g          t          j        z  }|j        r5t          |j                  D ] \  }}|                     ||          }|||<   !|j        r4t          |j                  D ]\  }}|                     |          }|||<    |                    |           |                    |           B	 d d d            n# 1 swxY w Y   t          j        |          t          j        |          fS )NFr   r   T)r   )rt   VideoCapturero   r}   readr   r   r   r   rV   r   nanrl   	enumerater\   multi_hand_world_landmarksr_   r   array)rD   r   
video_pathr   num_landmarksnum_dimensions	video_caplandmarks_per_framew_landmarks_per_framer   successinput_frameframe_shaperesultframe_landmarksframe_w_landmarksrj   r   w_landmarkss                      rF   _process_videozHandsTest._process_video   s2   
  ,,I	#)!$	
& 
& 
& 8 */8(~~// 	
 l;0ABB!'[11(M$1>$C D DFHfMHm&3^&E F FHJO & 	- )&*E F F - -nc955iMMI#,OC  , 	1"+F,M"N"N 1 1c;==kJJK%0c""""?333$$%677738 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8> H())284I+J+JKKs   EFF	F)fullr   zasl_hand.full.npzc                 *   d}d}t           j                            t           j                            t                    d          }t           j                            t           j                            t                    d                    |                    }|                     ||          \  }}|                     |          }	t          j	        |	||           |                     |
                    dd                    }
t          |
d          5 }t          j        |d	                                          t          j        |d	                                          d
}|                    t          j        |dd                     ddd           n# 1 swxY w Y   t          j        |          d         }|j        |j        k    s(J d                    |j        |j                              |                     |dddf         |dddf         |           t          j        |          d         }|j        |j        k    s(J d                    |j        |j                              |                     |||           dS )zTests hand models on a video.   g?ztestdata/asl_hand.25fps.mp4ztestdata/{})predictionsw_predictionsz.npzz.jsonwr{   )r   predictions_worldr   ),z: )indent
separatorsNr   z1Unexpected shape of predictions: {} instead of {}.)rf   r   z7Unexpected shape of world predictions: {} instead of {})r=   r>   r?   r   r   rs   r   rG   rV   savezreplaceopenaroundtolistwritejsondumpsloadr   rg   )rD   r   expected_namer   world_diff_thresholdr   expected_pathactualactual_worldnpz_path	json_pathfl	dump_dataexpectedexpected_worlds                  rF   test_on_videozHandsTest.test_on_video   s    Nbgooh77;= =JGLL!:!:!.!5!5m!D!DF FM../?LLFL $$]33HHX6FFFF %%m&;&;FG&L&LMMI	i		 H61--4466!yq99@@BB i 	hhtz)A+FFFGGGH H H H H H H H H H H H H H H w}%%m4H<8>)));BBL(.	* 	* *)) 	sBQBw#rr'*n  F F F W]++O<N!5555AHH 4	6 	6 655 	n0D  F F F F Fs   A:F  F$'F$N)r   r   r{   )__name__
__module____qualname__rG   r\   r_   rg   rV   ndarrayr   intrw   r   r   r   named_parametersr   r   r   rK   rH   rF   r9   r9   6   s5       P P P; ; ;
; ; ;> > >RZ * 3    F F F2 2 2 "=!7272	4 4
@ @4 4
@@ $%#%$%'L 'L 'L 'LR "=!&( ((F (F( ((F (F (FrH   r9   __main__)__doc__r   r=   r@   typingr   absl.testingr   r   rt   numpyrV   numpy.testingtestingra   mediapipe.python.solutionsr   r   rm   r   ro   TEST_IMAGE_PATHr   r   r   TestCaser9   r   mainrK   rH   rF   <module>r      sU   2 1  				        ! ! ! ! ! ! & & & & & & 



           6 5 5 5 5 5 B B B B B B 8 8 8 8 8 8 8  *-rS"IRy*-sc3Z#s*-sc3Z#s*-sc3Z#s*-sc3Z#s*-sc3Z#s*-sc3Z#s)M +.sc3Z#s*-sc3Z#s*-sc2Yb	*-sc3Z#r*-rS#Jc
*-rS"ISz*,cRIBx)I(J $ `F `F `F `F `F& `F `F `FF z(-///// rH   