
    Bvh                     n   d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dlm	Z	  e j                  e      ZdefdZddeej                  z  de	fdZdd	Zd
edededeeee   f   fdZ	 	 	 ddedededededefdZ	 	 	 ddedej.                  dej.                  defdZddej.                  fdZddZy)     N)Mapping)
build_sam2)SAM2Basereturnc                 L    | dv sJ | dk(  rd}|S | dk(  rd}|S | dk(  rd}|S d}|S )	N)sam2_hiera_tinysam2_hiera_smallsam2_hiera_largesam2_hiera_base_plusr   zsam2_hiera_t.yamlr	   zsam2_hiera_s.yamlr   zsam2_hiera_b+.yamlzsam2_hiera_l.yaml )
model_type	model_cfgs     Y/RAG/venv/lib/python3.12/site-packages/onnxruntime/transformers/models/sam2/sam2_utils.py_get_model_cfgr      sd    llll&&'	  
)	)'	
 	 
-	-(	  (	    devicec                    t         j                  j                  | d      }t         j                  j                  | d      }t         j                  j                  |       st	        |  d      t         j                  j                  |      st	        | d      t         j                  j                  |      st	        | d      t         j                  j                  || d      }t         j                  j                  |      st	        | d      | t
        j                  vrt
        j                  j                  |        t        |      }t        |||      }|S )Ncheckpointssam2_configsz5 does not exist. Please specify --sam2_dir correctly.z.ptzA does not exist. Please download checkpoints under the directory.)r   )	ospathjoinexistsFileNotFoundErrorsysappendr   r   )sam2_dirr   r   checkpoints_dirsam2_config_dircheckpoint_pathr   
sam2_models           r   load_sam2_modelr"      s   ggll8];Oggll8^<O77>>(#8*,a bcc77>>/*?"33h ijj77>>/*?"33h ijjggll?zl#4FGO77>>/*?"33t uvvsxx!z*IIvFJr   c                 r   |dk(  r&t         j                  j                  | | d| d      S |dk(  r&t         j                  j                  | | d| d      S |dk(  r&t         j                  j                  | | d| d      S |dk(  sJ t         j                  j                  | | d	|rd
ndz   | dz         S )Nimage_encoder_image_encoderz.onnxmask_decoder_mask_decoderprompt_encoder_prompt_encoderimage_decoder_image_decoder_multi )r   r   r   )
output_dirr   	componentmultimask_outputsuffixs        r   sam2_onnx_pathr2   6   s    O#ww||J:,nVHE(RSS	n	$ww||J:,mF85(QRR	&	&ww||J:,ofXU(STTO+++ww||:,n5EU[]^djckkpaqq
 	
r   
batch_sizeheightwidthc                 v    |dk(  r|dk(  sJ d       | d||g| d|dz  |dz  g| d|dz  |dz  g| d|d	z  |d	z  gd
S )N   z$Only 1024x1024 images are supported.          @            )imageimage_features_0image_features_1image_embeddingsr   )r3   r4   r5   s      r   encoder_shape_dictrC   D   sm    T>etmS-SS+a/'Vq[%1*E'Vq[%1*E'flERKH	 r   original_image_heightoriginal_image_width
num_labels
max_points	num_masksc                     d}d}dd|dz  |dz  gdd|dz  |dz  gdd|dz  |dz  g||d	g||g|d|dz  |dz  g|gd	g||| |g||g|||dz  |dz  gd
S )Nr7      r9   r:   r;   r<   r=   r>      )r@   rA   rB   point_coordspoint_labelsinput_maskshas_input_masksoriginal_image_sizemasksiou_predictionslow_res_masksr   )rD   rE   rF   rG   rH   r4   r5   s          r   decoder_shape_dictrT   N   s     FEFaK!<FaK!<Vr\5B;?#Z3#Z0"Av{EQJ?&< !si)>@TU&	2$i1eqjI r   nametensor1tensor2c           	      H   |j                   |j                   k(  sJ |j                         j                         }|j                         j                         }t        j                  ||z
        }||t        j
                  t        j                  |      t        j                  |            z  |z   kD  j                         j                         }	|j                         }
|	|
z  dz  }||k  }|st        j                  nt        j                  } |d| ||	|
|rdnd|       |S )Nd   zR%s: mismatched elements percentage %.2f (%d/%d). Verification %s (threshold=%.2f).passedfailed)shapeclonefloattorchabsmaxsumitemnumelloggererrorinfo)rU   rV   rW   atolrtolmismatch_percentage_toleranceabdifferencesmismatch_counttotal_elementsmismatch_percentagerZ   log_funcs                 r   compare_tensors_with_tolerancerr   f   s     ==GMM)))AA))AE"K!TEIIeiilEIIaL,Q%QTX%XY^^`eegNWWYN)N:cA #@@F#)v||v{{H\% Mr   c                 r    t        j                  | d||t         j                        j                         }|S )Nr8   )dtype)r_   randnfloat32cpu)r3   image_heightimage_widthr?   s       r   random_sam2_input_imagerz      s*    KK
A|[VZZ\ELr   c                 &   | rHt        j                  d       t        j                         j                  t         j                         y t        j                  d       t        j                         j                  t         j
                         y )Nz8[%(filename)s:%(lineno)s - %(funcName)20s()] %(message)s)formatz[%(message)s)loggingbasicConfig	getLoggersetLevelINFOWARNING)verboses    r   setup_loggerr      sX    #]^$$W\\2>2$$W__5r   )rw   )Fr-   )rJ   r>   rJ   )g{Gzt?g-C6?g?)rJ   r7   r7   )T)r}   r   r   collections.abcr   r_   sam2.build_samr   sam2.modeling.sam2_baser   r   __name__re   strr   r   r"   r2   intlistrC   dictrT   Tensorboolrr   rz   r   r   r   r   <module>r      s*  
  	 
 #  % ,			8	$
# 
#2D QY 0
3  C GCQUVYQZND[    	
  
8 
	"%
\\ \\ 
DRWR^R^ 
6r   