
    9i$m                        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r	S SK
Js  Jr  S SKJr  S SKJr  S SKJr  S SKJr  \R.                  " 5       r " S S5      rS rS)S	 jrS
 rS rS rS rS r  S*S jr S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+ S+S jr,S r-S r.S,S jr/S-S jr0S  r1S! r2S"/ S#Q4S$ jr3S% r4SS/ S&S4S' jr5  S.S( jr6g)/    N)Image)
OutputKeys)
load_image)loggerc                   .    \ rS rSrSrSS jrS rS rSrg)	InputPadder   z4Pads images such that dimensions are divisible by 8 c                 &   USS  u  U l         U l        U R                   S-  S-   S-  U R                   -
  S-  nU R                  S-  S-   S-  U R                  -
  S-  nUS:X  a  US-  XDS-  -
  US-  X3S-  -
  /U l        g US-  XDS-  -
  SU/U l        g )N      sintel   r   )htwd_pad)selfdimsmodepad_htpad_wds        _/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/utils/cv/image_utils.py__init__InputPadder.__init__   s    9GGqLA%*TWW49GGqLA%*TWW498!Vk16Q;1$DI
  1f{&:AvFDI    c           	      l    U Vs/ s H"  n[         R                  " X R                  SS9PM$     sn$ s  snf )N	replicate)r   )Fpadr   )r   inputsxs      r   r   InputPadder.pad#   s)    ?EFv!a5vFFFs   )1c                     UR                   SS  u  p#U R                  S   X R                  S   -
  U R                  S   X0R                  S   -
  /nUSUS   US   2US   US   24   $ )Nr   r      r   r   .)shaper   )r   r!   r   r   cs        r   unpadInputPadder.unpad&   sq    YYq\2		!,diilB1<MNad1Q4i1ad*++r   )r   r   r   N)r   )	__name__
__module____qualname____firstlineno____doc__r   r   r'   __static_attributes__ r   r   r   r      s    ?
GG,r   r   c                    X R                  5       -
  U R                  5       U R                  5       -
  S-   -  n U S-  R                  [        R                  5      n [
        R                  " U [
        R                  5      n U $ )ztto convert a np.array with shape(h, w) to cv2 img

Args:
    img_array (np.array): input data

Returns:
    cv2 img
h㈵>   )minmaxastypenpuint8cv2applyColorMapCOLORMAP_JET)	img_arrays    r   numpy_to_cv2imgr<   ,   sf     ]]_,)--/)D02IS((2I!!)S-=-=>Ir   c                    / SQn/ SQn/ SQn/ SQn/ SQn/ SQn	UR                   S   S:X  a  Un
UnUnOUR                   S   S	:X  a  Un
UnU	n[        [        W
5      5       H  nX   nX:X  a  M  X-   U:  d	  US
   U:  a  M!  UW;   a  X;   a  SnOUW;   a  X;   a  SnOSn[        R                  " U [        XS4   5      [        XS
4   5      4[        X   S   5      [        XS
4   5      4US5        M     [        UR                   S   5       HC  nX-   U:  a  M  [        R                  " U [        XS4   5      [        XS
4   5      4SSS5        ME     g )N)r   r   r   r   r   r   r            r   r>   r?               )r   r$   r>   r@   	   rA   rC      )r      r?   r   
   rB   rD      )r   r   r   r   r$   r   r>   r?   rD   r   rE   rD   rA   rB   r   )r   r$   rG   r   rE   rH   )r>   r?   r@   rA   rB   rC   r      rF   r   r   r2   r   r2   r   r   r   r2   r2   r$   r>   r   r   r2   )r%   rangelenr8   lineintcircle)imagenp_kpsscore	thresholdlst_parent_ids_17lst_left_ids_17lst_right_ids_17lst_parent_ids_15lst_left_ids_15lst_right_ids_15lst_parent_idslst_left_idslst_right_idsipidcolors                   r   draw_jointsre   <   sm   O1O3I)O,||A"*&(	aB	*&(3~&'8Hy E!Hy$8!4E-C$8E!EVqD\*C!t,=>fk!n%s6q&>':;UA	G ($ 6<<?#8i

53vd|,c&A,.?@!	$ $r   c           	          [         R                  " U [        US   5      [        US   5      4[        US   5      [        US   5      4SS5        g )Nr   r   r   r$   rN   )r8   	rectanglerS   )rU   boxs     r   draw_boxri   h   sC    MM%#c!f+s3q6{3s1v;CF,k1>r   c                 j    U H,  n[         R                  " XS   US   4US   US   4SS5        M.     U $ )Nr   r   r   r$   rL   )r8   rg   )rU   bboxesbboxs      r   "realtime_object_detection_bbox_visrm   m   sB    e1gtAw/$q'471C!1	&  Lr   c           
      P   [         R                  " U [        US   5      [        US   5      4[        US   5      [        US   5      4SS5        / SQn[        R                  R                  SS5      [        R                  R                  SS5      [        R                  R                  SS5      4n[        US   S-   5      [        US   S	-   5      4n[        U5       HD  u  pgX6   U-   n[         R                  " X US   US   US	-  -   4[         R                  S
US5        MF     g )Nr   r   r   r$   rN   )zgender      : zage         : zorient      : zhat         : zglass       : zhand_bag    : zshoulder_bag: zback_pack   : zupper_wear  : zlower_wear  : zupper_color : zlower_color : r2   r>   r	         ?)	r8   rg   rS   r6   randomrandint	enumerateputTextFONT_HERSHEY_SIMPLEX)	rU   rh   labelstitleclrpointidxlbszs	            r   draw_attributer|   t   s   MM%#c!f+s3q6{3s1v;CF,k1>E 99Q$bii&7&73&?99Q$&C Q!_c#a&2+./EV$Z"_ETU1XuQx#(/B$C,,c3	; %r   c           	      n   [         R                  " U [        R                     5      n[         R                  " U [        R                     5      n[         R                  " U [        R
                     5      n[        U5      [        U5      :X  a  [        U5      [        U5      :X  d   e[        R                  " US5      n[        [        U5      5       H^  n[        U[         R                  " XF   5      5        [        U[         R                  " X&   5      [         R                  " X6   5      5        M`     U$ NrO   )r6   arrayr   	KEYPOINTSSCORESBOXESrQ   r8   imreadrP   ri   re   )outputoriginal_imageposesscoresboxesrU   rb   s          r   draw_keypointsr      s    HHVJ0012EXXfZ../0FHHVJ,,-.Eu:V$Us5z)AAAJJ~r*E3u:*+E288EH-rxx	/BC  Lr   c                    [         R                  " U [        R                     5      n[         R                  " U [        R                     5      n[        U5      [        U5      :X  d   e[        R                  " US5      n[        [        U5      5       H(  n[        U[         R                  " X5   5      X%   5        M*     U$ r~   )
r6   r   r   LABELSr   rQ   r8   r   rP   r|   )r   r   ru   r   rU   rb   s         r   draw_pedestrian_attributer      s    XXfZ../0FHHVJ,,-.Ev;#e*$$$JJ~r*E3u:ubhhux0&)< Lr   c                   ^ / SQn/ SQn/ SQn/ SQn/ SQn	/ SQn
/ SQn/ SQn/ S	Qn[         R                  " U 5      n[        [        U5      5       H%  n[	        U[
        R                  " X/   5      5        M'     [         R                  " US TTS
9nU4S jn[        [        U5      5       GH0  nX   nU" UUU5        U" UUU5        U" UUU5        U" UUU5        U" U	UU5        U" U
UU5        U" UUU5        U" UUU5        U" UUU5        [        U5      n[        U5       H  n[        UU   S   5      n[        UU   S   5      n[         R                  " U[        U5      [        UT-  5      [        UT-  5      4[         R                  SSS5        [         R                  " U[        UT-  5      [        UT-  5      4SS[         R                  5        M     GM3     Ub  [         R                  " UU5        U$ )N)!r   r   r   r$   rG   r>   r?   r@   r   rE   rH   rA   rB   rC   rD   rF   rI   rJ         r	                                        )
!   "   #   $   %   &   '   (   )   r   )
*   +   ,   -   .   /   0   1   2   r   )	B   C   D   E   F   G   H   I   r   )	K   L   M   N   O   P   Q   R   r   )3   4   5   6   )7   8   9   :   ;   <   =   >   ?   @   A   )T   U   V   W   X   Y   Z   [   \   ]   ^   _   r   )	`   a   b   c   d   e   f   g   r   )dsizefxfyc           	        > [        [        U 5      S-
  5       Hq  nX   nXS-      n[        X$   S   T-  5      [        X$   S   T-  5      4n[        X%   S   T-  5      [        X%   S   T-  5      4n[        R                  " XUSSS9  Ms     g )Nr   r   rN   r   )	thickness)rP   rQ   rS   r8   rR   )	point_indexrU   rx   rb   	cur_index
next_indexcur_ptnext_ptscales	           r   	draw_line)draw_106face_keypoints.<locals>.draw_line   s    s;'!+,A#I$U+J%*1-56%*1-568F5,Q/%785,Q/%78:GHHUG[AF -r   r   r   ro   rK   r   )r8   r   rP   rQ   ri   r6   r   resizerS   rs   strrt   rT   FILLEDimwrite)in_path	keypointsr   r   	save_pathface_contour_point_indexleft_eye_brow_point_indexright_eye_brow_point_indexleft_eye_point_indexright_eye_point_indexnose_bridge_point_indexnose_contour_point_indexmouth_outer_point_indexmouth_inter_point_indeximgrb   rU   r   pointssizer!   ys      `                  r   draw_106face_keypointsr     s   
  !I!I?@.K G
**W
C3u:bhhux()  JJs$5U;EG 3y>"*E6:+UF;,eV<&v6'7)5&9*E6:)5&9)5&96{tAF1IaL!AF1IaL!AKKs1vAIAI'G00#{AGJJus1u9~s1u9~>;zz#  #, Iu%Lr   c                    [         R                  " U[        R                     5      n[         R                  " U[        R                     5      n[
        R                  " U 5      nUc
   SU  35       e[        [        U5      5       Hg  nX%   R                  [         R                  5      nUu  pxpX5   n[
        R                  " XGU4X4SS5        [
        R                  " UUS Xz4SSSSSS	9  Mi     [        S
[        U5       S35        U$ )NCan't read img: rL   r   .2fr         ?rK   r   r   lineTypeFound  faces)r6   r   r   r   r   r8   r   rP   rQ   r5   int32rg   rs   print)img_pathdetection_resultrk   r   r   rb   rl   x1y1x2y2rW   s               r    draw_face_detection_no_lm_resultr     s    XX&z'7'789FXX&z'8'89:F
**X
C?9.xj99?3v;y)	c8bX{A>SkRH	   
F3v;-v
&'Jr   c                 R   U[         R                     nU[         R                     nU[        R                  " U5         n[
        R                  " U 5      nUc
   SU  35       e[
        R                  " USR                  U5      SSSSSSS9  [        SR                  U5      5        U$ )	Nr  zfacial expression: {}rH   rH   r   r  rK   r   r  )
r   r   r   r6   argmaxr8   r   rs   formatr  )r  facial_expression_resultr   ru   labelr   s         r   draw_facial_expression_resultr     s    %j&7&78F%j&7&78F299V$%E
**X
C?9.xj99?KK&&u-x	[ 

!
(
(
/0Jr   c                 L   U[         R                     nU[         R                     nUS   [        R                  " US   5         nUS   [        R                  " US   5         n[
        R                  " U 5      nUc
   SU  35       e[
        R                  " USR                  U5      SSSSSSS	9  [
        R                  " US
R                  U5      SSSSSSS	9  [        R                  SR                  U5      5        [        R                  S
R                  U5      5        U$ )Nr   r   r  zface gender: {}r  r  rK   r   r  zface age interval: {})rH   r   rL   )r   r   r   r6   r  r8   r   rs   r  r   info)r  face_attribute_resultr   ru   label_gender	label_ager   s          r   draw_face_attribute_resultr     s   ":#4#45F":#4#45F!9RYYvay12Lq	"))F1I./I
**X
C?9.xj99?KK  .	[ KK&&y18	[ KK!((67
KK'..y9:Jr   c                    [         R                  " U[        R                     5      n[         R                  " U[        R                     5      n[         R                  " U[        R
                     5      n[        R                  " U 5      nUc
   SU  35       e[        [        U5      5       H  nX&   R                  [         R                  5      nX6   R                  SS5      R                  [         R                  5      nXF   n	Uu  pp[        R                  " XZU4X4SS5        U H&  n[        R                  " U[        U5      SSS5        M(     [        R                   " UU	S X4SSS	SS
S9  M     [#        S[        U5       S35        U$ )Nr  rO   r   rL   r   rN   r  r  rK   r   r  r	  r
  )r6   r   r   r   r   r   r8   r   rP   rQ   r5   r  reshaperg   rT   tuplers   r  )r  r  rk   kpssr   r   rb   rl   kpsrW   r  r  r  r  kps                  r   draw_face_detection_resultr'    sM   XX&z'7'789F88$Z%9%9:;DXX&z'8'89:F
**X
C?9.xj99?3v;y)goob!$++BHH5	c8bX{A>BJJsE"Iq+q9 SkRH	   
F3v;-v
&'Jr   c                    S n[         R                  " U[        R                     5      n[         R                  " U[        R                     5      n[         R                  " U[        R
                     5      n/ n/ SQn[        R                  " U 5      nXh/-  nUc
   SU  35       e[        [        U5      5       GH@  n	X9   R                  [         R                  5      n
XI   R                  SS5      R                  [         R                  5      nUS   S   US   S   -
  S-  US   S   US   S   -
  S-  -   nUS   S   US   S   -
  S-  US   S   US   S   -
  S-  -   nX:  a  S	OS
nU" XU5      nXo/-  nXY   nU
u  nnnn[        R                  " UUU4UU4SS5        [        U5       H*  u  nn[        R                  " U[!        U5      SUU   SS9  M,     [        R"                  " UUS UU4SSSSSS9  GMC     U$ )Nc                 X   SnUS:  a  Un[        XB-  5      nOUn[        XR-  5      n[        R                  " US   US   US   US   /5      n[        R                  " SUS-
  /SS/US-
  S/US-
  US-
  //5      n[        R                  " Xg5      n[        R
                  " XXT45      n	U	$ )Ni  r   r   r   r$   )rS   r6   float32r8   getPerspectiveTransformwarpPerspective)
src_imgr%  ratio
short_sizeobj_hobj_w	input_pts
output_ptsMobj_imgs
             r   warp_img,draw_card_detection_result.<locals>.warp_img:  s    
19E&EE&EJJAAAA?@	ZZ!UQY!Q%!)Q"'!)UQY!7!9 :
''	>%%g5.Ar   )rL   rK   rN   rM   r  rO   r   r   r$   r   gq=
ףp?gɝ3 ?rL   rG   rH   rd   r   r  r  rK   r   r  )r6   r   r   r   r   r   r8   r   rP   rQ   r5   r  r"  rg   rr   rT   r#  rs   )r  r  r6  rk   r$  r   img_listver_colr   rb   rl   r%  _w_hr.  card_imgrW   r  r  r  r  kr&  s                          r   draw_card_detection_resultr?  8  s    XX&z'7'789F88$Z%9%9:;DXX&z'8'89:FHDG
**X
CH?9.xj99?3v;y)goob!$++BHH5!fQi#a&)#a'3q6!9s1vay+@1*DD!fQi#a&)#a'3q6!9s1vay+@1*DDhCe,J	BBcB8b"X{A>s^EArJJsE"Iq
bI $SkRH	  ( Or   c           	      *   [        U 5      n[        R                  " [        R                  " U5      [        R
                  5      n[        R                  " U[        US   5      [        US   5      4[        US   5      [        US   5      4SS5        U$ )Nr   r   r   r$   rK   )r   r8   cvtColorr6   asarrayCOLOR_RGB2BGRrg   rS   )image_inrh   rU   r   s       r   created_boxed_imagerE  h  sq    x E
,,rzz%(#*;*;
<CMM#CFSQ[1CAKSV3Mq"Jr   c                 F   [         R                  " U 5      n[        [        U5      5       H  nX   nUR	                  5       u  pgUSL a  [        U S5      eUS:X  am  UR                  S   UR                  S   4n[         R                  " SSSS5      n	[         R                  " X)UR                  [         R                  5      US	5      n
[         R                  " XuS   US   4US
   US   4SS5        W
R                  U5        M     W
R                    UR                  5         g )NF( can not be correctly decoded by OpenCV.r   r   r4  JPGTr   r$   rK   r>   )r8   VideoCapturerP   rQ   read	Exceptionr%   VideoWriter_fourccVideoWritergetCAP_PROP_FPSrg   writerelease)video_in_pathrk   video_save_pathcaprb   rh   successframer   fourccvideo_writers              r   show_video_tracking_resultr[  p  s   


=
)C3v;ieMFH H6KKNEKKN3D++Cc3?F???+.7733C3C+Dd+/1L 	e!fc!f-AA/?	5!   KKMr   c                    / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQS	.nS
SK J n  S
S Kn[        R                  " U 5      nU" [	        U5      S9 nUR                  SR                  U5      5        [        [	        U5      5       GH  n	X   R                  [        5      n
X)   nUR                  5       u  pUSL a  [        U S5      eU	S
:X  am  UR                  S   UR                  S
   4n[        R                  " SSSS5      n[        R                  " X?UR                  [        R                   5      US5      nSnSnSnUR                  u  nnn["        R$                  " UR                  5      R                  ["        R&                  5      n[)        X5       H  u  nn[        R*                  " UUS
   US   4US   US   4UU   S5        [        R,                  " UUUS
   US   [        UU-  5      -
  4[        R.                  [1        UU5      U-  UR3                  [1        UU5      U-  5      UU   S9  [        R*                  " UUS
   US   4US   US   4UU   SS9nM     [        R4                  " USUSS
5      nWR7                  U5        UR9                  S5        GM     S S S 5        WR:                    UR;                  5         g ! , (       d  f       N+= f)N)   r   r   )r]  r]  r   )r   r   r   )r   r]  r]  )r   r]  r   )   r]  r   )r   r   r]  )r^  r   r]  )personbicyclecar
motorcyclebustruckztraffic lightz	stop signr   )tqdm)totalzWriting results to video: {}FrG  r   r4  rH  rI  rJ  TgMbP?{Gz?r   r$   )fontFace	fontScaler   rd   rO   r8  r  g?)re  mathr8   rK  rQ   set_descriptionr  rP   r5   rS   rL  rM  r%   rN  rO  rP  rQ  r6   zerosr7   ziprg   rs   FONT_HERSHEY_TRIPLEXr3   ceiladdWeightedrR  updaterS  )rT  bboxes_listlabels_listrU  PALETTEre  rj  rV  pbarrb   rk   ru   rW  rX  r   rY  rZ  
FONT_SCALETHICKNESS_SCALETEXT_Y_OFFSET_SCALEHW_
zeros_maskrl   ls                             r   "show_video_object_detection_resultr~    s     #%"	G 


=
)C	C$	%*11/B	Ds;'(A ^**3/F ^F XXZNG% JL LAvAA7//S#sC"/2wws7G7G/H$/3 5 J"O"&kkGAq!5;;077AJv.aed1gtAw%7$q'479K%aj!-Qa3/BQ/F+G!GH 55!!Qi*4"iiAq	O(CD!!*& !]]a$q' 2T!Wd1g4F!!* "
 / OOE2z3BEu%KKNI ) 
&P KKMS 
&	%s   IK
Kc                    [         R                  " U S   R                  S   U S   R                  S   S/5      nSSKJn  U" SS5      nSSKJn  [        / SQ5      n[        U 5       Hd  u  pgX6   n[        U5      U;   a  U" U5      n[        U5      U;   a  M  UR                  [        U5      5        UR                  [        5      nXU'   Mf     U$ )	Nr   r   r$   get_palettecoco   )_get_bias_color)r   r   r   )r6   rl  r%    mmdet.core.visualization.paletter  mmdet.core.visualization.imager  setrr   r#  addr5   bool)	masksdraw_imgr  mask_paletter  taken_colorsrb   mask
color_masks	            r   panoptic_seg_masks_to_imager    s    xxq*E!HNN1,=qABH<vs+L>y>LU#!_
J</(4J J</z*+{{4 # $ Or   c                     SSK Jn  U" SS5      n[        R                  " U S   R                  S   U S   R                  S   S/5      n[        U 5       H"  u  pEX$   nUR                  [        5      nXcU'   M$     U$ )Nr   r  r  r  r   r$   )r  r  r6   rl  r%   rr   r5   r  )r  r  r  r  rb   r  r  s          r   semantic_seg_masks_to_imager    st    <vs+Lxxq*E!HNN1,=qABHU#!_
{{4 # $ Or   c                 2   U[         R                     n[        R                  " U 5      n[	        [        U5      5       H  nX5   nUR                  5       u  pxUSL a  [        U S5      eUS:X  am  UR                  S   UR                  S   4n	[        R                  " SSSS5      n
[        R                  " X*UR                  [        R                  5      U	S	5      nUS:X  d  M  WR                  U5        M     WR                  5         UR                  5         g )
NFrG  r   r   r4  rH  rI  rJ  T)r   OUTPUTr8   rK  rP   rQ   rL  rM  r%   rN  rO  rP  rQ  rR  rS  )rT  resultrU  frame_indexesrV  rb   ry   rW  rX  r   rY  rZ  s               r   show_video_summarization_resultr    s    :,,-M


=
)C3}%&eMFH H6KKNEKKN3D++Cc3?F???+.7733C3C+Dd+/1L !8u% ' KKMr   c                    U[         R                     nU[         R                     nU[         R                     n[        R
                  " U 5      nUc
   SU  35       e[        X4U5       H  u  pxn	[        R                  " U[        U	S   5      [        U	S   5      4[        U	S   5      [        U	S   5      4SS5        [        R                  " UUS [        U	S   5      [        U	S   5      4SSS	SS
S9  [        R                  " UU[        U	S   5      [        U	S   5      4SSS	SS
S9  M     Ub  [        R                  " X&5        U$ )Nr  r   r   r   r$   rN   r  r  rK   r   r  )r   r   r   r   r8   r   rm  rg   rS   rs   r   )
r  r  r   r   ru   rk   r   rW   r  rh   s
             r   'show_image_object_detection_auto_resultr    s>    j//0Fj//0Fj../F
**X
C?9.xj99?"66:scCAKSV53q6{CAK0+q	BSkSQ[#c!f+6	 	CAKSV-	  ;$ I#Jr   c                 (   [         R                  " S5      nU" U R                  5       U -
  U R                  5       -  5      S-  R                  [        R
                  5      S S 2S S 2S S24   n[        R                  " U[        R                  5      nU$ )Nplasma   r$   )	pltget_cmapr4   r5   r6   r7   r8   rA  rC  )depthcolormapdepth_colors      r   depth_to_colorr    sw    ||H%H	u			+-/345;VBHH5EaBQBhPK,,{C,=,=>Kr   c                     Sn SnSnSnSnSnX-   U-   U-   U-   U-   n[         R                  " US45      nSnSUSU 2S4'   [         R                  " S[         R                  " SU 5      -  U -  5      USU 2S	4'   X-   nS[         R                  " S[         R                  " SU5      -  U-  5      -
  XxX-   2S4'   SXxX-   2S	4'   X-   nSXxX-   2S	4'   [         R                  " S[         R                  " SU5      -  U-  5      XxX-   2S
4'   X-   nS[         R                  " S[         R                  " U5      -  U-  5      -
  XxX-   2S	4'   SXxX-   2S
4'   X-   nSXxX-   2S
4'   [         R                  " S[         R                  " SU5      -  U-  5      XxX-   2S4'   X-   nS[         R                  " S[         R                  " U5      -  U-  5      -
  XxX-   2S
4'   SXxX-   2S4'   U$ )a}  
Generates a color wheel for optical flow visualization as presented in:
    Baker et al. "A Database and Evaluation Methodology for Optical Flow" (ICCV, 2007)
    URL: http://vision.middlebury.edu/flow/flowEval-iccv07.pdf

Code follows the original C++ source code of Daniel Scharstein.
Code follows the the Matlab source code of Deqing Sun.

Returns:
    np.ndarray: Color wheel
rF   r?   rG   rA   rC   r$   r   r2   r   r   )r6   rl  floorarange)	RYYGGCCBBMMRncols
colorwheelcols	            r   make_colorwheelr    s    
B	
B	
B	B	B	
BGbL2"R'E5!*%J
C JqtQw((31b)9#9B#>?JqtQw
(C"%ryyB7G1G"1L(M"MJ38|Q"%J38|Q
(C"%J38|Q"$((31b1A+AB+F"GJ38|Q
(C"%ryy}1Dr1I(J"JJ38|Q"%J38|Q
(C"%J38|Q"$((31b1A+AB+F"GJ38|Q
(C"%ryy}1Dr1I(J"JJ38|Q"%J38|Qr   c                 h   [         R                  " U R                  S   U R                  S   S4[         R                  5      n[	        5       nUR                  S   n[         R
                  " [         R                  " U 5      [         R                  " U5      -   5      n[         R                  " U* U * 5      [         R                  -  nUS-   S-  US-
  -  n[         R                  " U5      R                  [         R                  5      n	U	S-   n
SXU:H  '   X-
  n[        UR                  S   5       H~  nUSS2U4   nX   S-  nX   S-  nSU-
  U-  X-  -   nUS:*  nSUU   SUU   -
  -  -
  UU'   UU)    S-  UU) '   U(       a  SU-
  OUn[         R                  " SU-  5      USS2SS2U4'   M     U$ )	a  
Applies the flow color wheel to (possibly clipped) flow components u and v.

According to the C++ source code of Daniel Scharstein
According to the Matlab source code of Deqing Sun

Args:
    u (np.ndarray): Input horizontal flow of shape [H,W]
    v (np.ndarray): Input vertical flow of shape [H,W]
    convert_to_bgr (bool, optional): Convert output image to BGR. Defaults to False.

Returns:
    np.ndarray: Flow visualization image of shape [H,W,3]
r   r   r$   r   Ng     o@g      ?r2   )r6   rl  r%   r7   r  sqrtsquarearctan2pir  r5   r  rP   )uvconvert_to_bgr
flow_imager  r  radafkk0k1frb   tmpcol0col1r  ry   ch_idxs                      r   flow_uv_to_colorsr  P  s    1771:qwwqz15rxx@J "JQE
''"))A,1-
.C


A2rRUU"A
a%1		"B	"		RXX	&B	aBBU{O
A:##A&'Aww1unqx'axs3x1s3x<00CI$SD	(Qa#%88C#I#6
1a<  ( r   c                    U R                   S:X  d   S5       eU R                  S   S:X  d   S5       eUb  [        R                  " U SU5      n U SS2SS2S4   nU SS2SS2S4   n[        R                  " [        R
                  " U5      [        R
                  " U5      -   5      n[        R                  " U5      nSnX6U-   -  nXFU-   -  n[        X4U5      $ )	aY  
Expects a two dimensional flow image of shape.

Args:
    flow_uv (np.ndarray): Flow UV image of shape [H,W,2]
    clip_flow (float, optional): Clip maximum of flow values. Defaults to None.
    convert_to_bgr (bool, optional): Convert output image to BGR. Defaults to False.

Returns:
    np.ndarray: Flow visualization image of shape [H,W,3]
r$   z%input flow must have three dimensionsr   z"input flow must have shape [H,W,2]Nr   r   r1   )ndimr%   r6   clipr  r  r4   r  )flow_uv	clip_flowr  r  r  r  rad_maxepsilons           r   flow_to_imager  w  s     <<1EEE==q F"FF '''1i01aA1aA
''"))A,1-
.CffSkGG	wA	wAQ>22r   c                     U S   R                  SSS5      R                  5       R                  5       n [        U 5      nU$ )Nr   r   r   )permutecpunumpyr  )flow
flow_colors     r   flow_to_colorr    s:    7??1a#'')//1Dt$Jr   c                 h   U S   R                   u  p#n[        R                  " U[        R                  " S6 SX245      n[	        U 5       HV  u  pgUR                  [        R                  " UR                  [        R                  5      [        R                  5      5        MX     UR                  5         g )Nr   MP4Vr   )r%   r8   rO  rN  rr   rR  rA  r5   r6   r7   rC  rS  )depthsrU  heightwidthlayersoutrb   r   s           r   "show_video_depth_estimation_resultr    s|    "1IOOF6
///3+A+A6+JB /+Cf%		#,,szz"((3S5F5FGH &KKMr   z
result.jpg)r   r   r   c           
         UR                  [        R                  5      nUS   (       ah  U Hb  n[        US   5      [        US   5      4[        US   5      [        US   5      4pv[        R
                  " XU/ SQS[        R                  S9  Md     UR                  [        R                  5      n[        R                  " US   R                  S   US   R                  S   S4[        R                  S9n	US   (       a  / SQXS   S:H  '   US   (       a  / S	QXS   S:H  '   U	n
[        R                  " U
S5      nUS:g  nX   S
-  X   S
-  -   X'   Ub#  [        R                  " X S S 2S S 2S S S24   5        U $ )Nr   r   r   r$   )r2   r2   r   r  )dtyperK   rL   ro   rO   )rP  r   r   rS   r8   rg   LINE_AAMASKSr6   rl  r%   r7   meanr   )r   resultsout_fileif_drawrk   r!   c1c2r  
color_area	color_segr  msk_idxs                r   $show_image_driving_perception_resultr    sR    [[))*FqzA!A$iQqT+c!A$iQqT-CMM]a#++O 
 [[))*F6!9??1-vayq/A1E "*J qz%0
!9>"qz%0
!9>"IA&JAoG<#%	(:S(@@CLH!Q"*o.Jr   c                     / n[        U R                  S   5       H=  n[        R                  " X   5      nUR	                  U5        UR                  U5        M?     U$ )Nr   )rP   r%   r   	fromarray
putpaletteappend)r  palette	vis_masksr  img_Es        r   masks_visualizationr    sR    I5;;q>")! # r   r   c
                    UR                   S   UR                   S   :X  d'   SUR                   S    SUR                   S    35       e[        R                  " SSSUS9u  pUS   R                  U SS	9  US   R                  USS	9  [	        S5       Hy  nX   R                  5       R                  / 5        X   R                  5       R                  / 5        X   R                  R                  5        H  nUR                  S
5        M     M{     [        R                  " SS9  UbK  Uc   eUS   R                  US S 2S4   US S 2S4   SSS9  US   R                  US S 2S4   US S 2S4   SSS9  UR                   S   S:w  GaS  UR                   S   S:w  Ga?  U
R                  R                  5         U
R                  R!                  5       nUR#                  US   R$                  R#                  U5      5      nUR#                  US   R$                  R#                  U5      5      n[	        ['        U5      5       Vs/ s HF  n[(        R*                  R-                  XS4   UUS4   4XS4   UUS4   4U
R                  XL   SS9PMH     snU
l        US   R                  US S 2S4   US S 2S4   USS9  US   R                  US S 2S4   US S 2S4   USS9  U S S2S S24   R/                  5       S:  a  SOSnU
R1                  SSSR3                  U5      U
R4                  S   R6                  SSSUS9  U	(       a5  [        R8                  " [;        U	5      SSS9  [        R<                  " 5         g U
$ s  snf )Nr   zmkpts0: z v.s. mkpts1: r   r   )rH   r?   )figsizedpigray)cmapF)r   w)r&   s)	transformr&   	linewidthrG   r      r>  rg  gGz?
rF   topleft)r  fontsizevahard   tight)bbox_inches
pad_inches)r%   r  subplotsimshowrP   	get_yaxis	set_ticks	get_xaxisspinesvaluesset_visibletight_layoutscattercanvasdrawtransFigureinvertedr  	transDatarQ   
matplotliblinesLine2Dr  textjoinaxes	transAxessavefigr   close)img0img1mkpts0mkpts1rd   kpts0kpts1r  r  pathfigr  rb   spiner  fkpts0fkpts1	txt_colors                     r   make_matching_figurer(    s_    <<?fll	  Hv||A'~fll1o5FGH Q7<ICGNN4fN%GNN4fN%1X%%b)%%b)W^^**,Ee$ - 
    QadU1a4[C1=QadU1a4[C1= ||A!Q1 4

oo..0&&tAw'8'8'B'B6'JK&&tAw'8'8'B'B6'JK ;@F:L

 ;MQ	 ##VqD\6!Q$<$@%+qD\6!Q$<$@.1oo&+h./	 $ 1 ;M
	 	Qq!tfQTleqAQq!tfQTleqA DSD$3$J',,.4#IHH		$((1+''   CI7qA		
9
s   =AM3c           	      ^   [        S[        U5       S35        [        R                  " [	        U 5      5      n[        R                  " [	        U5      5      n[
        R                  " U5      n	USR                  [        U5      5      /n
[        XxX#XS9nUR                  [	        U5      SSS9  g )Nr	  z matcheszMatches: {})r  i,  r  )r  r  )
r  rQ   r8   r   r   cmjetr  r(  r  )	img_name0	img_name1r   r!  confoutput_filenamemethodr  r  rd   r  r#  s               r   match_pair_visualizationr1    s     
F3u:,h
'( ::c)n%D::c)n%D FF4LESZ(D t5
JC KKO$#7KCr   )g?)g      @N)N)F)NF)zquadtree_match.pngQuadTreeAttention)7osr8   r  matplotlib.cmr*  matplotlib.pyplotpyplotr  r  r6   torch.nn.functionalnn
functionalr   PILr   modelscope.outputsr   modelscope.preprocessors.imager   modelscope.utilsr   logging
get_loggerr   r<   re   ri   rm   r|   r   r   r  r  r  r   r'  r?  rE  r[  r~  r  r  r  r  r  r  r  r  r  r  r  r  r(  r1  r/   r   r   <module>r@     s   
 
        ) 5 .				, ,0 )$X>
;&	 "%%)	>B*"62-`*9x&
. 7;@/d$N34 3?1:<&  $# ">L .B$7Dr   