
    fPi                     P   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dS )*    N)Mapping)
build_sam2)SAM2Basereturnc                 L    | dv sJ | dk    rd}n| dk    rd}n| dk    rd}n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     /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/onnxruntime/transformers/models/sam2/sam2_utils.py_get_model_cfgr      sX    lllll&&&'			)	)	)'			-	-	-(		'	    cpudevicec                    t           j                            | d          }t           j                            | d          }t           j                            |           st	          |  d          t           j                            |          st	          | d          t           j                            |          st	          | d          t           j                            || d          }t           j                            |          st	          | d          | t
          j        vrt
          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#      sJ   gll8];;Ogll8^<<O7>>(## d8 b b bccc7>>/** k? i i ijjj7>>/** k? i i ijjjgll?z4F4F4FGGO7>>/** w? u u uvvvsx!!!z**IIvFFFJr   F c                 z   |dk    r&t           j                            | | d| d          S |dk    r&t           j                            | | d| d          S |dk    r&t           j                            | | d| d          S |dk    sJ t           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_multir$   )r   r   r   )
output_dirr   	componentmultimask_outputsuffixs        r   sam2_onnx_pathr3   6   s    O##w||J:(R(RV(R(R(RSSS	n	$	$w||J:(Q(QF(Q(Q(QRRR	&	&	&w||J:(S(Sf(S(S(STTTO++++w||:555EU9][]^djaqaqaqq
 
 	
r   
batch_sizeheightwidthc                     |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   )r4   r5   r6   s      r   encoder_shape_dictrD   D   sv    T>>etmmm-Smm+a/'Vq[%1*E'Vq[%1*E'flERKH	  r      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 )Nr8   rE   r:   r;   r<   r=   r>   r?      )rA   rB   rC   point_coordspoint_labelsinput_maskshas_input_masksoriginal_image_sizemasksiou_predictionslow_res_masksr   )rF   rG   rH   rI   rJ   r5   r6   s          r   decoder_shape_dictrU   N   s     FEFaK!<FaK!<Vr\5B;?#Z3#Z0"Av{EQJ?&< !si)>@TU&	2$i1eqjI  r   {Gzt?-C6?皙?nametensor1tensor2c           	      `   |j         |j         k    sJ |                                                                }|                                                                }t          j        ||z
            }||t          j        t          j        |          t          j        |                    z  |z   k                                                                    }	|                                }
|	|
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)rY   rZ   r[   atolrtolmismatch_percentage_toleranceabdifferencesmismatch_counttotal_elementsmismatch_percentager^   log_funcs                 r   compare_tensors_with_tolerancerv   f   s    =GM))))AA)AE""K!TEIeillEIaLL,Q,Q%QTX%XY^^``eeggNWWYYN)N:cA #@@F#):v||v{HH\(%   Mr   r8   c                 p    t          j        | d||t           j                                                  }|S )Nr9   )dtype)rc   randnfloat32r   )r4   image_heightimage_widthr@   s       r   random_sam2_input_imager}      s/    K
A|[VVVZZ\\ELr   Tc                 "   | rGt          j        d           t          j                                        t           j                   d S t          j        d           t          j                                        t           j                   d S )Nz8[%(filename)s:%(lineno)s - %(funcName)20s()] %(message)s)formatz[%(message)s)loggingbasicConfig	getLoggersetLevelINFOWARNING)verboses    r   setup_loggerr      s}     6#]^^^^$$W\22222>2222$$W_55555r   )r   )Fr$   )rE   r?   rE   )rV   rW   rX   )rE   r8   r8   )T)r   r   r   collections.abcr   rc   sam2.build_samr   sam2.modeling.sam2_baser   r   __name__ri   strr   r   r#   r3   intlistrD   dictrU   Tensorboolrv   r}   r   r   r   r   <module>r      s  
  				 



 # # # # # #  % % % % % % , , , , , ,		8	$	$
# 
 
 
 
 #2D QY    0
 
 
 
3  C GCQUVYQZND[        	
  
   8 
	"% 
\ \ 
   D RWR^    
6 6 6 6 6 6r   