
    g                     z   d dl Z d dlZd dlZd dlmZmZ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ej"                  f   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j0                  dej0                  defdZddej0                  fdZddZy)     N)ListMappingUnion)
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     d/var/www/openai/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_pathr4   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   )r5   r6   r7   s      r   encoder_shape_dictrE   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 )Nr9      r;   r<   r=   r>   r?   r@      )rB   rC   rD   point_coordspoint_labelsinput_maskshas_input_masksoriginal_image_sizemasksiou_predictionslow_res_masksr   )rF   rG   rH   rI   rJ   r6   r7   s          r   decoder_shape_dictrV   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)rW   rX   rY   atolrtolmismatch_percentage_toleranceabdifferencesmismatch_counttotal_elementsmismatch_percentager\   log_funcs                 r   compare_tensors_with_tolerancert   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 )Nr:   )dtype)ra   randnfloat32cpu)r5   image_heightimage_widthrA   s       r   random_sam2_input_imager|      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   )ry   )Fr/   )rL   r@   rL   )g{Gzt?g-C6?g?)rL   r9   r9   )T)r   r   r   typingr   r   r   ra   sam2.build_samr   sam2.modeling.sam2_baser   r   __name__rg   strr   r   r$   r4   intrE   dictrV   Tensorboolrt   r|   r   r   r   r   <module>r      s2  
  	 
 ' '  % ,			8	$
# 
%U\\8I2J W_ 0
3  C GCQUVYQZND[    	
  
8 
	"%
\\ \\ 
DRWR^R^ 
6r   