
    g(                        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 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ej8                  f   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"y)$    N)Union)	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               c/var/www/openai/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
   r1   )r   r   r   r   )r6   	facecolorlw)	add_patchr   )boxr$   x0y0r)   r(   s         r.   show_boxrH   2   sT    VSVBq6CF?CFSVOqALLB8QWYZ[\r@   c	                 4   t        t        ||            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 )N
   rK   figsize)r&   r   zMask z	, Score: z.3f   fontsizeoffr,   .pngpngtightr   )formatbbox_inches
pad_inchesF)block)	enumeratezippltfigurer"   r/   gcar?   rH   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_masksru   8   s0    &c%&89=D%

8$

5$	73#+++lCGGI>!Z+v;?IIacU)E#;7"E#231QCt<Hww~~h'		(#KKGPQR+t,""8,u		/ :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)rz   rw   )r|   r}   r~   r   rz   
onnx_dtype)r   r   r   )ry   rz   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cpurw   r      Tr
   z	truck.jpgRGB)r   
sam2_demo_r,   i  w  r   )rm   point_labelsmultimask_outputr   	multimask)rm   ro   r&   rp   rq   ie  iq  F)rm   r   
mask_inputr   multi_points)rm   ro   rp   rq   background_point)i  iX  i  ik  )rm   r   rE   r   rE   )rn   rp   rq   i?    box_and_point)rn   rm   ro   rp   rq   )K   i  i  iR  )i_  i&  ir  i   )i  i  ix  r   rJ   rL   )r%   rQ   zbatch_prompt.png)$rw   r   is_availableonnxruntimeget_available_providersrz   get_device_propertiesmajorbackendsmatmul
allow_tf32cudnnr   r   seedr   openr   convertr   	set_imagepredictargsortru   argmaxr[   r\   r"   r/   squeezer]   rH   r   rh   rd   rg   )ry   r   r   r{   r|   r}   r~   r   r   r   rz   rj   r   prefixinput_pointinput_labelrk   rl   logits
sorted_indrq   r   r,   	input_boxinput_boxesr#   rE   s                              r.   run_demor   x   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 ]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ncolsrM   r   r   rx   rR   rK   rO   rQ   r   	sam2_demorS   rT   i  )rU   rV   dpi)r[   subplotsr^   rY   rZ   mpimgimreadr"   	set_titlereplacer   
set_aspectr   tight_layoutrd   rh   )
left_imagesright_imagessuffixfigaxesrr   left_img_pathright_img_pathleft_img	right_imgs
             r.   show_all_imagesr   /  s   1C,<nUIC.7K8V.W**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 /X KK)F84(GQUVHHJr@   )FT)r   )NNNTNN)rv   rw   rx   rx   rx   r   )rx   )#r`   typingr   matplotlib.imagerj   r   matplotlib.pyplotpyplotr[   numpyr   rw   matplotlib.patchesr   PILr   sam2.sam2_image_predictorr   sam2_image_onnx_predictorr   
sam2_utilsr   r   r/   r?   rH   ru   strrz   r{   r   float32boolr   r    r@   r.   <module>r      sO  
 
       (  8 < & $] !"R "#%#%)++#u||#$ ;; ! ! $' : )#%#%)+ttt t ;;	t
 !t !t $'t t tnr@   