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_smallZ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	   i/home/kim/smarthome/.venv/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 )NZcheckpointsZ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   )Zsam2_dirr
   r   Zcheckpoints_dirZsam2_config_dirZcheckpoint_pathr   Z
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 )NZimage_encoderZ_image_encoderz.onnxZmask_decoderZ_mask_decoderZprompt_encoderZ_prompt_encoderZimage_decoderZ_image_decoderZ_multir   )r   r   r   )
output_dirr
   	componentZ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   r   r   r	   r	   r   encoder_shape_dictD   s   
r,      r'   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 )Nr    r-   r"   r#   r$   r%   r&   r'      )r)   r*   r+   Zpoint_coordsZpoint_labelsZinput_masksZhas_input_masksZoriginal_image_sizeZmasksZiou_predictionsZlow_res_masksr	   )r.   r/   r0   r1   r2   r   r   r	   r	   r   decoder_shape_dictN   s   
r4   {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itemZnumelloggererrorinfo)r8   r9   r:   ZatolZrtolZmismatch_percentage_toleranceabZdifferencesZmismatch_countZtotal_elementsZmismatch_percentager<   Zlog_funcr	   r	   r   compare_tensors_with_tolerancef   s&   ,

rK   r    c                 C   s   t j| d||t jd }|S )Nr!   )Zdtype)rA   ZrandnZfloat32r   )r   Zimage_heightZimage_widthr(   r	   r	   r   random_sam2_input_image   s   rL   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
   rU   )r   )Fr   )r-   r'   r-   )r5   r6   r7   )r-   r    r    )T)rN   r   r   collections.abcr   rA   Zsam2.build_samr   Zsam2.modeling.sam2_baser   rP   __name__rF   strr   r   r   r   intlistr,   dictr4   ZTensorboolrK   rL   rU   r	   r	   r	   r   <module>   sT   

&

"