
    fPi)                     J   d dl 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 dlmZ d dlZd d	Zd!dZd Z	 	 	 	 	 	 d"dZ	 	 	 	 	 	 d#dedee	j        z  de	j        dedededefdZdde	j        dddddfdededede	j        dededededefdZd$dZ dS )%    N)	Rectangle)Image)SAM2ImagePredictor)SAM2ImageOnnxPredictor)load_sam2_modelFTc                 X  
 |rIt          j        t           j                            d          t          j        dg          gd          }nt          j        g d          }| j        dd          \  }}|                     t           j                  } |                     ||d          |                    ddd          z  }|rPdd l

	                    | 
j
        
j                  \  }}	
fd	|D             }
                    ||dd
d          }|                    |           d S )N   333333?r   )axis)g?g?g      ?r
      c                 @    g | ]}                     |d d          S )g{Gz?T)epsilonclosed)approxPolyDP).0contourcv2s     /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/onnxruntime/transformers/models/sam2/sam2_demo.py
<listcomp>zshow_mask.<locals>.<listcomp>!   s.    aaaWC$$Wd4$HHaaa    )r   r   r   g      ?   )	thickness)npconcatenaterandomarrayshapeastypeuint8reshaper   findContoursRETR_EXTERNALCHAIN_APPROX_NONEdrawContoursimshow)maskaxrandom_colorborderscolorhw
mask_imagecontours_r   s             @r   	show_maskr2      s+    @	 0 0 3 3RXse__EANNN>>>??:bcc?DAq;;rx  DaA&&q!R)@)@@J ]


&&tS->@UVV!aaaaX`aaa%%j(BZ[%\\
IIjr   w  c           	          | |dk             }| |dk             }|                     |d d df         |d d df         dd|dd           |                     |d d df         |d d df         dd|dd           d S )	Nr   r   green*whiteg      ?)r,   markers	edgecolor	linewidthred)scatter)coordslabelsr)   marker_size
pos_points
neg_pointss         r   show_pointsrC   &   s    !$J!$JJJ111a4*QQQT*'#`gsw     JJ111a4*QQQT*%{^equ      r   c           
          | d         | d         }}| d         | d         z
  | d         | d         z
  }}|                     t          ||f||ddd                     d S )Nr   r   r   r	   r5   )r   r   r   r   )r:   	facecolorlw)	add_patchr   )boxr)   x0y0r.   r-   s         r   show_boxrK   1   sf    VSVBq6CF?CFSVOqALLB8QWYZ[[[\\\\\r   c	                 d   t          t          ||d                    D ]\  }	\  }
}t          j        d           t          j        |            t          |
t          j                    |           |&|J t          ||t          j                               |!t          |t          j                               t          |          dk    r t          j
        d|	dz    d|d	d
           t          j        d           |r}| d|	 d}t          j                            |          rt          j        |           t          j        |ddd           t#          |t$                    r|                    |           t          j        d           t          j                     d S )NFstrict
   rP   figsize)r+   r   zMask z	, Score: z.3f   fontsizeoffr1   .pngpngtightr   )formatbbox_inches
pad_inches)block)	enumeratezippltfigurer'   r2   gcarC   rK   lentitler   ospathexistsremovesavefig
isinstancelistappendshowclose)imagemasksscorespoint_coords
box_coordsinput_labelsr+   output_image_file_prefiximage_filesir(   scorefilenames                r   
show_masksrz   7   s    &c%&F&F&FGG  =D%
8$$$$
5$		73333#+++lCGII>>>!Z+++v;;??I9a!e99e999BGGGG# 	-2<<Q<<<Hw~~h'' $	(###KGPQRRRR+t,, -""8,,,u	/ r   sam2_hiera_largetorch CUDAExecutionProvidersam2_dirdevicedtypeimage_encoder_onnx_pathimage_decoder_onnx_pathimage_decoder_multi_onnx_pathproviderc	           	          t          | ||          }	|dk    rt          |	          }
nt          |	||||||          }
|
S )N)r   r|   )r   r   r   r   r   
onnx_dtype)r   r   r   )r   r   r   
model_typeenginer   r   r   r   
sam2_model	predictors              r   get_predictorr   \   sc     !:fEEEJ&z22		*$;$;*G
 
 
	 r   r   r   use_gpuenable_batchc	                 	   |r:t           j                                        sJ dt          j                    v sJ d}	nd}	t          j        |rdnd          }
|r_|dk    rYt           j                            d          j        dk    r1dt           j        j        j	        _
        dt           j        j        _
        t          j                            d	           t          j        d
          }t          j        |                    d                    }t'          | |
|||||||		  	        }|                    |           d| d}t          j        ddgg          }t          j        dg          }|                    ||d          \  }}}t          j        |          d d d         }||         }||         }||         }g }t/          |||||d|dz   |           t          j        ddgddgg          }t          j        ddg          }|t          j        |          d d d d f         }|                    |||d d d d d f         d          \  }}}t/          ||||||dz   |           t          j        ddgddgg          }t          j        ddg          }|t          j        |          d d d d f         }|                    |||d d d d d f         d          \  }}}t/          ||||||dz   |           t          j        g d          }|                    d d |d d d f         d          \  }}}t/          |||||dz   |            t          j        g d          }t          j        d!d"gg          }t          j        dg          }|                    |||d          \  }}}t/          |||||||d#z   |$           |rt          j        g d%g dg d&g d'g          }|                    d d |d          \  }}}t3          j        d()           t3          j        |           |D ]8}t9          |                    d          t3          j                    d*           9|D ]#}t?          |t3          j                               $t3          j         d+           t3          j!                     t3          j"        |d,z              |#                    |d,z              |S )-Nr~   CPUExecutionProvidercudacpur|   r      Tr	   z	truck.jpgRGB)r   
sam2_demo_r1   i  r3   r   )rr   point_labelsmultimask_outputr   	multimask)rr   rt   r+   ru   rv   ie  iq  F)rr   r   
mask_inputr   multi_points)rr   rt   ru   rv   background_point)i  iX  i  ik  )rr   r   rH   r   rH   )rs   ru   rv   i?    box_and_point)rs   rr   rt   ru   rv   )K   i  i  iR  )i_  i&  ir  i   )i  i  ix  r   rO   rQ   )r*   rV   zbatch_prompt.png)$r|   r   is_availableonnxruntimeget_available_providersr   get_device_propertiesmajorbackendsmatmul
allow_tf32cudnnr   r   seedr   openr   convertr   	set_imagepredictargsortrz   argmaxr`   ra   r'   r2   squeezerb   rK   r   rm   ri   rl   )r   r   r   r   r   r   r   r   r   r   r   ro   r   prefixinput_pointinput_labelrp   rq   logits
sorted_indrv   r   r1   	input_boxinput_boxesr(   rH   s                              r   run_demor   w   s     *z&&(((((&+*M*O*OOOOO*)\G6&&77F /6W$$)I)I!)L)L)RVW)W)W04"-*.'INN1J{##EHU]]5))**E%
 
 
I #&###F (S#J<((K(A3--K%--   .  E66 F##DDbD)J*EJFJFK  !'+!5	 	 	 	 (S#Js455K(Aq6""K	&))111aaa/0J ((  dAAAqqqj)	 )  E61   !'.!8    (S#Js455K(Aq6""K	&))111aaa/0J ((  dAAAqqqj)	 )  E61   !'*<!<    ---..I ((dAAAg	 )  E61 !'%    ---..I(S#J<((K(A3--K%--  	 .  E66   !'/!9	 	 	 	  8h$$$$$$&&&&&&	
 
 %,,"	 - 
 
vq 	
8$$$$
5 	E 	EDdll1ooswyytDDDDD 	% 	%CS#'))$$$$


F//0006$66777r   c                 X   t          j        dt          |           d          \  }}t          t	          | |d                    D ]\  }\  }}t          j        |          }t          j        |          }	|d|f                             |           |d|f                             |	                    dd          	                    d	d          d
           |d|f         
                    d           |d|f                             |j        d         |j        d         z             |d|f                             |	           |d|f                             |	                    dd          	                    d	d          d
           |d|f         
                    d           |d|f                             |	j        d         |	j        d         z             t          j                     t          j        d| d	ddd           t          j                     d S )Nr   )g3333333@g%@)nrowsncolsrR   FrM   r   r   r}   rW   rP   rT   rV   r   	sam2_demorX   rY   i  )rZ   r[   dpi)r`   subplotsrc   r^   r_   mpimgimreadr'   	set_titlereplacer   
set_aspectr   tight_layoutri   rm   )
left_imagesright_imagessuffixfigaxesrw   left_img_pathright_img_pathleft_img	right_imgs
             r   show_all_imagesr   .  s   1C,<,<nUUUIC.7K^c8d8d8d.e.e G G**M><..L00	QT
(###QT
]22<DDLLVUWXXcefffQT
QT
hnQ/(.2CCDDDQT
)$$$QT
^33L"EEMMfVXYYdfgggQT
QT
ioa09?13EEFFFFK(F(((GQUVVVVHJJJJJr   )FT)r3   )NNNTNN)r{   r|   r}   r}   r}   r~   )r}   )!re   matplotlib.imagero   r   matplotlib.pyplotpyplotr`   numpyr   r|   matplotlib.patchesr   PILr   sam2.sam2_image_predictorr   sam2_image_onnx_predictorr   
sam2_utilsr   r   r2   rC   rK   rz   strr   r   r   float32boolr   r    r   r   <module>r      sD  
 
			                        ( ( ( ( ( (       8 8 8 8 8 8 < < < < < < & & & & & &       $   ] ] ] !" " " "R "#%#%)++ %, ; ! ! $'    : )#%#%)+t ttt t ;	t
 !t !t $'t t t t t tn     r   