
    Bvh(                     p   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	j4                  z  de	j6                  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	j6                  dededededefdZd"dZ y)#    N)	Rectangle)Image)SAM2ImagePredictor)SAM2ImageOnnxPredictor)load_sam2_modelFTc                 v   |rKt        j                  t         j                  j                  d      t        j                  dg      gd      }nt        j                  g d      }| j                  dd  \  }}| j                  t         j                        } | j                  ||d      |j                  ddd      z  }|redd l}|j                  | |j                  |j                        \  }	}
|	D cg c]  }|j                  |d	d
       }	}|j                  ||	ddd      }|j                  |       y c c}w )N   333333?r   )axis)g?g?g      ?r
      g{Gz?T)epsilonclosed)r   r   r   g      ?   )	thickness)npconcatenaterandomarrayshapeastypeuint8reshapecv2findContoursRETR_EXTERNALCHAIN_APPROX_NONEapproxPolyDPdrawContoursimshow)maskaxrandom_colorborderscolorhw
mask_imager   contours_contours               X/RAG/venv/lib/python3.12/site-packages/onnxruntime/transformers/models/sam2/sam2_demo.py	show_maskr.      s   		 0 0 3RXXse_EAN>?::bc?DAq;;rxx DaA&q!R)@@J&&tS->->@U@UV!X`aX`WC$$Wd4$HX`a%%j(BZ[%\
IIj bs   1D6c           	          | |dk(     }| |dk(     }|j                  |d d df   |d d df   dd|dd       |j                  |d d df   |d d df   dd|dd       y )	Nr   r   green*whiteg      ?)r&   markers	edgecolor	linewidthred)scatter)coordslabelsr#   marker_size
pos_points
neg_pointss         r-   show_pointsr>   &   s    !$J!$JJJ1a4*QT*'#`gsw   JJ1a4*QT*%{^equ      c           
          | d   | d   }}| d   | d   z
  | d   | d   z
  }}|j                  t        ||f||ddd             y )Nr   r   r   r	   r0   )r   r   r   r   )r5   	facecolorlw)	add_patchr   )boxr#   x0y0r(   r'   s         r-   show_boxrG   1   sT    VSVBq6CF?CFSVOqALLB8QWYZ[\r?   c	                 8   t        t        ||d            D ]  \  }	\  }
}t        j                  d       t        j                  |        t        |
t        j                         |       |#|J t        ||t        j                                |t        |t        j                                t        |      dkD  r!t        j                  d|	dz    d|d	d
       t        j                  d       |rv| d|	 d}t        j                  j                  |      rt        j                  |       t        j                   |ddd       t#        |t$              r|j'                  |       t        j(                  d       t        j*                           y )NFstrict
   rL   figsize)r%   r   zMask z	, Score: z.3f   fontsizeoffr+   .pngpngtightr   )formatbbox_inches
pad_inches)block)	enumeratezippltfigurer!   r.   gcar>   rG   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_masksrv   7   s3    &c%&FG=D%

8$

5$	73#+++lCGGI>!Z+v;?IIa!eWIeC[9BG#231QCt<Hww~~h'		(#KKGPQR+t,""8,u		/ Hr?   sam2_hiera_largetorch sam2_dirdevicedtypeimage_encoder_onnx_pathimage_decoder_onnx_pathimage_decoder_multi_onnx_pathproviderc	           	      j    t        | ||      }	|dk(  rt        |	      }
|
S t        |	||||||      }
|
S )N)r{   rx   )r}   r~   r   r   r{   
onnx_dtype)r   r   r   )rz   r{   r|   
model_typeenginer}   r~   r   r   
sam2_model	predictors              r-   get_predictorr   \   sU     !:fEJ&z2	  +$;$;*G
	 r?   r   r   use_gpuenable_batchc	                 	   |r;t         j                  j                         sJ dt        j                         v sJ d}	nd}	t        j
                  |rdnd      }
|ry|dk(  rtt         j                  j                  d      j                  dk\  rHdt         j                  j                  j                  _
        dt         j                  j                  _
        t        j                  j                  d	       t        j                   d
      }t        j"                  |j%                  d            }t'        | |
|||||||		      }|j)                  |       d| d}t        j"                  ddgg      }t        j"                  dg      }|j+                  ||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        j0                  |      d d d d f   }|j+                  |||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        j0                  |      d d d d f   }|j+                  |||d d d d d f   d      \  }}}t/        ||||||dz   |       t        j"                  g d      }|j+                  d d |d d d f   d      \  }}}t/        |||||dz   |        t        j"                  g d      }t        j"                  d!d"gg      }t        j"                  dg      }|j+                  |||d      \  }}}t/        |||||||d#z   |$       |rt        j"                  g d%g dg d&g d'g      }|j+                  d d |d      \  }}}t3        j4                  d()       t3        j6                  |       |D ]1  }t9        |j;                  d      t3        j<                         d*       3 |D ]   }t?        |t3        j<                                " t3        j@                  d+       t3        jB                          t3        jD                  |d,z          |jG                  |d,z          |S )-NCUDAExecutionProviderCPUExecutionProvidercudacpurx   r      Tr	   z	truck.jpgRGB)r   
sam2_demo_r+   i  w  r   )rn   point_labelsmultimask_outputr   	multimask)rn   rp   r%   rq   rr   ie  iq  F)rn   r   
mask_inputr   multi_points)rn   rp   rq   rr   background_point)i  iX  i  ik  )rn   r   rD   r   rD   )ro   rq   rr   i?    box_and_point)ro   rn   rp   rq   rr   )K   i  i  iR  )i_  i&  ir  i   )i  i  ix  r   rK   rM   )r$   rR   zbatch_prompt.png)$rx   r   is_availableonnxruntimeget_available_providersr{   get_device_propertiesmajorbackendsmatmul
allow_tf32cudnnr   r   seedr   openr   convertr   	set_imagepredictargsortrv   argmaxr\   r]   r!   r.   squeezer^   rG   r   ri   re   rh   )rz   r   r   r|   r}   r~   r   r   r   r   r{   rk   r   prefixinput_pointinput_labelrl   rm   logits
sorted_indrr   r   r+   	input_boxinput_boxesr"   rD   s                              r-   run_demor   w   s    zz&&(((&+*M*M*OOOO*)\\G&7F6W$)I)I!)L)R)RVW)W04""-*.'IINN1JJ{#EHHU]]5)*E%
I &#F ((S#J<(K((A3-K%--   . E66 F#DbD)J*EJFJFK  !'+!5	 ((S#Js45K((Aq6"K		&)1a/0J ((  dAqj)	 ) E61   !'.!8 ((S#Js45K((Aq6"K		&)1a/0J ((  dAqj)	 ) E61   !'*<!< -.I ((dAg	 ) E61 !'% -.I((S#J<(K((A3-K%--  	 . E66   !'/!9	 hh$$&&	
 %,,"	 - 
vq 	

8$

5Ddll1oswwytD CS#'')$ 
F//06$667r?   c                    t        j                  dt        |       d      \  }}t        t	        | |d            D ]a  \  }\  }}t        j                  |      }t        j                  |      }	|d|f   j                  |       |d|f   j                  |j                  dd      j                  d	d      d
       |d|f   j                  d       |d|f   j                  |j                  d   |j                  d   z         |d|f   j                  |	       |d|f   j                  |j                  dd      j                  d	d      d
       |d|f   j                  d       |d|f   j                  |	j                  d   |	j                  d   z         d t        j                          t        j                  d| d	ddd       t        j                          y )Nr   )g3333333@g%@)nrowsncolsrN   FrI   r   r   ry   rS   rL   rP   rR   r   	sam2_demorT   rU   i  )rV   rW   dpi)r\   subplotsr_   rZ   r[   mpimgimreadr!   	set_titlereplacer   
set_aspectr   tight_layoutre   ri   )
left_imagesright_imagessuffixfigaxesrs   left_img_pathright_img_pathleft_img	right_imgs
             r-   show_all_imagesr   .  s   1C,<nUIC.7K^c8d.e**M><<.LL0	QT
(#QT
]22<DLLVUWXcefQT
QT
hnnQ/(..2CCDQT
)$QT
^33L"EMMfVXYdfgQT
QT
iooa09??13EEF /f KK)F84(GQUVHHJr?   )FT)r   )NNNTNN)rw   rx   ry   ry   ry   r   )ry   )!ra   matplotlib.imagerk   r   matplotlib.pyplotpyplotr\   numpyr   rx   matplotlib.patchesr   PILr   sam2.sam2_image_predictorr   sam2_image_onnx_predictorr   
sam2_utilsr   r   r.   r>   rG   rv   strr{   r|   r   float32boolr   r    r?   r-   <module>r      sG  
 
      (  8 < & $] !"R "#%#%)++%,, ;; ! ! $' : )#%#%)+ttt t ;;	t
 !t !t $'t t tnr?   