
    h                        S SK r S SKrS SKrS SKJr  S SKrS SKJr  S SKJ	r	  \ R                  " \5      rS\4S jrSS\\R                  -  S\	4S jjrSS	 jrS
\S\S\S\\\\   4   4S jr   SS\S\S\S\S\S\4S jjr   SS\S\R.                  S\R.                  S\4S jjrSS\R.                  4S jjrSS jrg)     N)Mapping)
build_sam2)SAM2Basereturnc                 V    U S;   d   eU S:X  a  SnU$ U S:X  a  SnU$ U S:X  a  SnU$ SnU$ )	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     i/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/transformers/models/sam2/sam2_utils.py_get_model_cfgr      sd    llll&&'	  
)	)'	
 	 
-	-(	  (	    devicec                    [         R                  R                  U S5      n[         R                  R                  U S5      n[         R                  R                  U 5      (       d  [	        U  S35      e[         R                  R                  U5      (       d  [	        U S35      e[         R                  R                  U5      (       d  [	        U S35      e[         R                  R                  X1 S35      n[         R                  R                  U5      (       d  [	        U S35      eU [
        R                  ;  a  [
        R                  R                  U 5        [        U5      n[        XeUS9nU$ )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?l#4FGO77>>/**?"33t uvvsxx!z*IIvFJr   c                 |   US:X  a%  [         R                  R                  X SU S35      $ US:X  a%  [         R                  R                  X SU S35      $ US:X  a%  [         R                  R                  X SU S35      $ US:X  d   e[         R                  R                  X S	3U(       a  S
OS-   U S3-   5      $ )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                 x    US:X  a  US:X  d   S5       eU SX/U SUS-  US-  /U SUS-  US-  /U SUS	-  US	-  /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   sk    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                     SnSnSSUS-  US-  /SSUS-  US-  /SSUS-  US-  /X#S	/X#/USUS-  US-  /U/S	/X$X/X$/X$US-  US-  /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;?#3#0"Av{EQJ?&< !s)>U&2$1eqjI r   nametensor1tensor2c           	      ^   UR                   UR                   :X  d   eUR                  5       R                  5       nUR                  5       R                  5       n[        R                  " Xg-
  5      nX[        R
                  " [        R                  " U5      [        R                  " U5      5      -  U-   :  R                  5       R                  5       n	UR                  5       n
X-  S-  nX:  nU(       d  [        R                  O[        R                  nU" SU UU	U
U(       a  SOSU5        U$ )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))AE"K!EIIeiilEIIaL,Q%QTX%XY^^`eegNWWYN):cA @F#)v||v{{H\% Mr   c                 l    [         R                  " U SX[         R                  S9R                  5       nU$ )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                 ,   U (       aG  [         R                  " SS9  [         R                  " 5       R                  [         R                  5        g [         R                  " SS9  [         R                  " 5       R                  [         R
                  5        g )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   