Ë
    cQêj�  ã                   ón  — 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y) é    N)ÚMapping)Ú
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     út/home/oem/CyberBrain26-unified/.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  € Ü—g‘g—l‘l 8¨]Ó;€OÜ—g‘g—l‘l 8¨^Ó<€OÜ�7‰7�>‰>˜(Ô#Ü 8 *Ð,aÐ bÓcÐcä�7‰7�>‰>˜/Ô*Ü ?Ð"3Ð3hÐ iÓjÐjä�7‰7�>‰>˜/Ô*Ü ?Ð"3Ð3hÐ iÓjÐjä—g‘g—l‘l ?°z°lÀ#Ð4FÓG€OÜ�7‰7�>‰>˜/Ô*Ü ?Ð"3Ð3tÐ uÓvÐvà”s—x‘xÑÜ�‰�‰˜Ô!ä˜zÓ*€IÜ˜I ¸vÔF€JØÐ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_pathr2   6   sÊ   € Ø�OÒ#Ü�w‰w�|‰|˜J¨:¨,°nÀVÀHÈEÐ(RÓSÐSØ	�nÒ	$Ü�w‰w�|‰|˜J¨:¨,°mÀFÀ8È5Ð(QÓRÐRØ	Ð&Ò	&Ü�w‰w�|‰|˜J¨:¨,°oÀfÀXÈUÐ(SÓTÐTà˜OÒ+Ð+Ð+Ü�w‰w�|‰|Ø˜:˜, nÐ5ÑEU¹Ð[]Ñ^ÐdjÐckÐkpÐaqÑ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   )r3   r4   r5   s      r   Úencoder_shape_dictrC   D   sm   € Ø�TŠ>˜e tšmÐSÐ-SÓSÐ+à˜a ¨Ð/Ø'¨¨V°q©[¸%À1¹*ÐEØ'¨¨V°q©[¸%À1¹*ÐEØ'¨¨f¸©l¸EÀR¹KÐ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 )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à  F¨a¡K°¸!±Ð<Ø  F¨a¡K°¸!±Ð<Ø  V¨r¡\°5¸B±;Ð?Ø# Z°Ð3Ø# ZÐ0Ø" A v°¡{°E¸Q±JÐ?Ø&˜<Ø !˜sØ˜iÐ)>Ð@TÐUØ&¨	Ð2Ø$ i°¸1±¸eÀq¹jÐ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 )Néd   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õ   € ð �=‰=˜GŸM™MÒ)Ð)Ð)Ø�‰‹×ÑÓ€AØ�‰‹×ÑÓ€Aä—)‘)˜A ™EÓ"€KØ! T¬E¯I©I´e·i±iÀ³lÄEÇIÁIÈaÃLÓ,QÑ%QÐTXÑ%XÑY×^Ñ^Ó`×eÑeÓg€Nà—W‘W“Y€NØ)¨NÑ:¸cÑAÐà Ð#@Ñ@€Fá#)Œv�|Š|¬v¯{©{€HÙØ\ØØØØÙ‰ Ø%ôð €Mr   c                 ór   — t        j                  | d||t         j                  ¬«      j                  «       }|S )Nr8   )Údtype)r_   ÚrandnÚfloat32Úcpu)r3   Úimage_heightÚimage_widthr?   s       r   Úrandom_sam2_input_imagerz   ˆ   s*   € Ü�K‰K˜
 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   )rw   )Fr-   )rJ   r>   rJ   )g{®Gázt?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ð ÀGÈCÐQUÐVYÑQZÈNÑD[ó ð ØØñØðàðð ðð ð	ð
 ðð 
óð8 
Ø	Ø"%ñØ
ðà�\‰\ðð �\‰\ðð 
óñDÐRW×R^ÑR^ó ô
6r   