o
    ٷi                     @   s  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 
eZdefddZd,d	eejB de	fd
dZd-ddZdedededeeee f fddZ			d.dedededededefddZ			 d/d!ed"ejd#ejdefd$d%Zd0dejfd'd(Zd1d*d+ZdS )2    N)Mapping)
build_sam2)SAM2Basereturnc                 C   sD   | 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_cfgr
   r
   c/home/ubuntu/.local/lib/python3.10/site-packages/onnxruntime/transformers/models/sam2/sam2_utils.py_get_model_cfg   s   r   cpudevicec                 C   s   t j| d}t j| d}t j| st|  dt j|s(t| dt j|s5t| dt j|| d}t j|sLt| d| tjvrWtj|  t|}t|||d}|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_modelr
   r
   r   load_sam2_model   s    
r   F c                 C   s   |dkrt j| | d| dS |dkr"t j| | d| dS |dkr3t j| | d| dS |dks9J t j| | d	|rEd
nd | d 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suffixr
   r
   r   sam2_onnx_path6   s    r.   
batch_sizeheightwidthc                 C   s^   |dkr|dksJ d| d||g| d|d |d g| d|d |d g| d|d	 |d	 gd
S )N   z$Only 1024x1024 images are supported.          @            )imageimage_features_0image_features_1image_embeddingsr
   )r/   r0   r1   r
   r
   r   encoder_shape_dictD   s   
r>      r9   original_image_heightoriginal_image_width
num_labels
max_points	num_masksc                 C   s   d}d}dd|d |d gdd|d |d gdd|d |d g||d	g||g|d|d |d g|gd	g||| |g||g|||d |d gd
S )Nr2   r?   r4   r5   r6   r7   r8   r9      )r;   r<   r=   point_coordspoint_labelsinput_maskshas_input_masksoriginal_image_sizemasksiou_predictionslow_res_masksr
   )r@   rA   rB   rC   rD   r0   r1   r
   r
   r   decoder_shape_dictN   s   
rN   {Gzt?-C6?皙?nametensor1tensor2c                 C   s   |j |j ksJ |  }|  }t|| }||tt|t| | k  }	| }
|	|
 d }||k }|sDt	j
nt	j}|d| ||	|
|rQd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)rR   rS   rT   atolrtolmismatch_percentage_toleranceabdifferencesmismatch_counttotal_elementsmismatch_percentagerV   log_funcr
   r
   r   compare_tensors_with_tolerancef   s&   ,

rn   r2   c                 C   s   t j| d||t jd }|S )Nr3   )dtype)r[   randnfloat32r   )r/   image_heightimage_widthr:   r
   r
   r   random_sam2_input_image   s   rt   Tc                 C   sD   | rt jdd t  t j d S t jdd t  t j d S )Nz8[%(filename)s:%(lineno)s - %(funcName)20s()] %(message)s)formatz[%(message)s)loggingbasicConfig	getLoggersetLevelINFOWARNING)verboser
   r
   r   setup_logger   s
   r}   )r   )Fr    )r?   r9   r?   )rO   rP   rQ   )r?   r2   r2   )T)rv   r   r   collections.abcr   r[   sam2.build_samr   sam2.modeling.sam2_baser   rx   __name__ra   strr   r   r   r.   intlistr>   dictrN   Tensorboolrn   rt   r}   r
   r
   r
   r   <module>   sT   

&

"