Ë
    cQêj)  ã                   óp  — d dl Z d dlmZ d dlmZ d dlZd dl	Z	d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZdd	„Zdd
„Zd„ Z	 	 	 	 	 	 d d„Z	 	 	 	 	 	 d!dedee	j4                  z  de	j6                  dedededefd„Zdde	j:                  dddddfdededede	j6                  dededededefd„Zd"d„Z y)#é    N)Ú	Rectangle)ÚImage)ÚSAM2ImagePredictor)ÚSAM2ImageOnnxPredictor)Úload_sam2_modelFTc                 óv  — |rKt        j                  t         j                  j                  d«      t        j                  dg«      gd¬«      }nt        j                  g d¢«      }| j                  dd  \  }}| j                  t         j                  «      } | j                  ||d«      |j                  ddd«      z  }|redd l}|j                  | |j                  |j                  «      \  }	}
|	D �cg c]  }|j                  |d	d
¬«      ‘Œ }	}|j                  ||	ddd¬«      }|j                  |«       y c c}w )Né   ç333333ã?r   )Úaxis)g¾?gâ?g      ð?r
   éþÿÿÿé   éÿÿÿÿg{®Gáz„?T)ÚepsilonÚclosed)r   r   r   g      à?é   )Ú	thickness)ÚnpÚconcatenateÚrandomÚarrayÚshapeÚastypeÚuint8ÚreshapeÚcv2ÚfindContoursÚRETR_EXTERNALÚCHAIN_APPROX_NONEÚapproxPolyDPÚdrawContoursÚimshow)ÚmaskÚaxÚrandom_colorÚbordersÚcolorÚhÚwÚ
mask_imager   ÚcontoursÚ_Úcontours               ús/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/models/sam2/sam2_demo.pyÚ	show_maskr.      s  € ÙÜ—‘¤§	¡	× 0Ñ 0°Ó 3´R·X±X¸s¸e³_ÐEÈAÔN‰ä—‘Ò>Ó?ˆØ�:‰:�b�cˆ?�D€A€qØ�;‰;”r—x‘xÓ €DØ—‘˜a  AÓ&¨¯©°q¸!¸RÓ)@Ñ@€JÙÛà×&Ñ& t¨S×->Ñ->À×@UÑ@UÓV‰ˆ�!àX`ÖaÈW�C×$Ñ$ W°dÀ4Ð$ÕHÐaˆÐaØ×%Ñ% j°(¸BÀÐZ[Ð%Ó\ˆ
Ø‡I�IˆjÕùò bs   Ã1D6c           	      ó¼   — | |dk(     }| |dk(     }|j                  |d d …df   |d d …df   dd|dd¬«       |j                  |d d …df   |d d …df   dd|dd¬«       y )	Nr   r   ÚgreenÚ*Úwhiteg      ô?)r&   ÚmarkerÚsÚ	edgecolorÚ	linewidthÚred)Úscatter)ÚcoordsÚlabelsr#   Úmarker_sizeÚ
pos_pointsÚ
neg_pointss         r-   Úshow_pointsr>   &   sˆ   € Ø˜ !™Ñ$€JØ˜ !™Ñ$€JØ‡J�JØ’1�a�4Ñ˜*¢Q¨ TÑ*°'À#ÈÐ`gÐswð ô ð ‡J�JØ’1�a�4Ñ˜*¢Q¨ TÑ*°%ÀÀ{Ð^eÐquð õ ó    c           
      óˆ   — | d   | d   }}| d   | d   z
  | d   | d   z
  }}|j                  t        ||f||ddd¬«      «       y )Nr   r   r   r	   r0   )r   r   r   r   )r5   Ú	facecolorÚlw)Ú	add_patchr   )Úboxr#   Úx0Úy0r(   r'   s         r-   Úshow_boxrG   1   sT   € Ø�‰V�S˜‘Vˆ€BØˆq‰6�C˜‘F‰?˜C ™F S¨¡V™O€q€AØ‡L�L”˜B ˜8 Q¨°WÈÐYZÔ[Õ\r?   c	                 ó8  — t        t        ||d¬«      «      D �]  \  }	\  }
}t        j                  d¬«       t        j                  | «       t        |
t        j                  «       |¬«       |�#|€J ‚t        ||t        j                  «       «       |�t        |t        j                  «       «       t        |«      dkD  r!t        j                  d|	dz   › d|d	›�d
¬«       t        j                  d«       |rv|› d|	› d�}t        j                  j                  |«      rt        j                  |«       t        j                   |ddd¬«       t#        |t$        «      r|j'                  |«       t        j(                  d¬«       t        j*                  «        �Œ‚ y )NF©Ústrict©é
   rL   ©Úfigsize)r%   r   zMask z	, Score: z.3fé   ©ÚfontsizeÚoffr+   ú.pngÚpngÚtightr   )ÚformatÚbbox_inchesÚ
pad_inches)Úblock)Ú	enumerateÚzipÚpltÚfigurer!   r.   Úgcar>   rG   ÚlenÚtitler   ÚosÚpathÚexistsÚremoveÚsavefigÚ
isinstanceÚlistÚappendÚshowÚclose)ÚimageÚmasksÚscoresÚpoint_coordsÚ
box_coordsÚinput_labelsr%   Úoutput_image_file_prefixÚimage_filesÚir"   ÚscoreÚfilenames                r-   Ú
show_masksrv   7   s7  € ô &¤c¨%°ÀÔ&FÓGó Ñˆ‰=ˆD�%Ü�
‰
˜8Õ$Ü�
‰
�5ÔÜ�$œŸ™›	¨7Õ3ØÐ#ØÐ+Ð+Ð+Ü˜ l´C·G±G³IÔ>àÐ!Ü�Z¤§¡£Ô+äˆv‹;˜Š?Ü�I‰I˜˜a !™e˜W I¨e°C¨[Ð9ÀBÕGä�‰�ŒÙ#Ø2Ð3°1°Q°C°tÐ<ˆHÜ�w‰w�~‰~˜hÔ'Ü—	‘	˜(Ô#Ü�K‰K˜¨¸GÐPQÕRÜ˜+¤tÔ,Ø×"Ñ" 8Ô,Ü�‰�uÕÜ�	‰	Žñ/r?   Úsam2_hiera_largeÚtorchÚ Úsam2_dirÚdeviceÚdtypeÚimage_encoder_onnx_pathÚimage_decoder_onnx_pathÚimage_decoder_multi_onnx_pathÚproviderc	           	      ój   — t        | ||¬«      }	|dk(  rt        |	«      }
|
S t        |	||||||¬«      }
|
S )N)r{   rx   )r}   r~   r   r€   r{   Ú
onnx_dtype)r   r   r   )rz   r{   r|   Ú
model_typeÚenginer}   r~   r   r€   Ú
sam2_modelÚ	predictors              r-   Úget_predictorr‡   \   sU   € ô ! ¨:¸fÔE€JØ�ÒÜ& zÓ2ˆ	ð Ðô +ØØ$;Ø$;Ø*GØØØô
ˆ	ð Ðr?   rƒ   r„   Úuse_gpuÚenable_batchc	                 ó”	  — |r;t         j                  j                  «       sJ ‚dt        j                  «       v sJ ‚d}	nd}	t        j
                  |rdnd«      }
|ry|dk(  rtt         j                  j                  d«      j                  dk\  rHdt         j                  j                  j                  _
        dt         j                  j                  _
        t        j                  j                  d	«       t        j                   d
«      }t        j"                  |j%                  d«      «      }t'        | |
|||||||	¬«	      }|j)                  |«       d|› d�}t        j"                  ddgg«      }t        j"                  dg«      }|j+                  ||d¬«      \  }}}t        j,                  |«      d d d…   }||   }||   }||   }g }t/        |||||d|dz   |¬«       t        j"                  ddgddgg«      }t        j"                  ddg«      }|t        j0                  |«      d d …d d …f   }|j+                  |||d d d …d d …f   d¬«      \  }}}t/        ||||||dz   |¬«       t        j"                  ddgddgg«      }t        j"                  ddg«      }|t        j0                  |«      d d …d d …f   }|j+                  |||d d d …d d …f   d¬«      \  }}}t/        ||||||dz   |¬«       t        j"                  g d¢«      }|j+                  d d |d d d …f   d¬«      \  }}}t/        |||||dz   |¬ «       t        j"                  g d¢«      }t        j"                  d!d"gg«      }t        j"                  dg«      }|j+                  |||d¬«      \  }}}t/        |||||||d#z   |¬$«       |�rt        j"                  g d%¢g d¢g d&¢g d'¢g«      }|j+                  d d |d¬«      \  }}}t3        j4                  d(¬)«       t3        j6                  |«       |D ]1  }t9        |j;                  d«      t3        j<                  «       d¬*«       Œ3 |D ]   }t?        |t3        j<                  «       «       Œ" t3        j@                  d+«       t3        jB                  «        t3        jD                  |d,z   «       |jG                  |d,z   «       |S )-NÚCUDAExecutionProviderÚCPUExecutionProviderÚcudaÚcpurx   r   é   Tr	   z	truck.jpgÚRGB)r€   Ú
sam2_demo_r+   iô  éw  r   )rn   Úpoint_labelsÚmultimask_outputr   Ú	multimask)rn   rp   r%   rq   rr   ie  iq  F)rn   r“   Ú
mask_inputr”   Úmulti_points)rn   rp   rq   rr   Úbackground_point)i©  iX  i¼  ik  )rn   r“   rD   r”   rD   )ro   rq   rr   i?  éî  Úbox_and_point)ro   rn   rp   rq   rr   )éK   i  i½  iR  )i_  i&  ir  i   )iØ  i£  ix  r™   rK   rM   )r$   rR   zbatch_prompt.png)$rx   r�   Úis_availableÚonnxruntimeÚget_available_providersr{   Úget_device_propertiesÚmajorÚbackendsÚmatmulÚ
allow_tf32Úcudnnr   r   Úseedr   Úopenr   Úconvertr‡   Ú	set_imageÚpredictÚargsortrv   Úargmaxr\   r]   r!   r.   Úsqueezer^   rG   r   ri   re   rh   )rz   rƒ   r„   r|   r}   r~   r   rˆ   r‰   r€   r{   rk   r†   ÚprefixÚinput_pointÚinput_labelrl   rm   ÚlogitsÚ
sorted_indrr   r–   r+   Ú	input_boxÚinput_boxesr"   rD   s                              r-   Úrun_demor´   w   sÜ  € ñ Ü�z‰z×&Ñ&Ô(Ð(Ð(Ø&¬+×*MÑ*MÓ*OÑOÐOÐOØ*‰à)ˆä�\‰\¡G™&°Ó7€Fá�6˜WÒ$¬¯©×)IÑ)IÈ!Ó)L×)RÑ)RÐVWÒ)Wà04Œ�‰×Ñ×"Ñ"Ô-Ø*.Œ�‰×ÑÔ'ä‡I�I‡N�N�1ÔÜ�J‰J�{Ó#€EÜ�H‰H�U—]‘] 5Ó)Ó*€EäØØØØØØØØ%Øô
€Ið ×Ñ˜ÔØ˜&˜ Ð#€Fô —(‘(˜S #˜J˜<Ó(€KÜ—(‘(˜A˜3“-€KØ%×-Ñ-Ø Ø Øð .ó Ñ€Eˆ6�6ô —‘˜FÓ#¡D b DÑ)€JØ�*Ñ€EØ�JÑ€FØ�JÑ€Fà€KÜØØØØ Ø ØØ!'¨+Ñ!5Øõ	ô —(‘(˜S #˜J¨¨s¨Ð4Ó5€KÜ—(‘(˜A˜q˜6Ó"€KØœŸ	™	 &Ó)ª1ªaÐ/Ñ0€JØ ×(Ñ(Ø Ø Ø˜d¢A¢q˜jÑ)Øð	 )ó Ñ€Eˆ6�1ô ØØØØ Ø Ø!'¨.Ñ!8Øõô —(‘(˜S #˜J¨¨s¨Ð4Ó5€KÜ—(‘(˜A˜q˜6Ó"€KØœŸ	™	 &Ó)ª1ªaÐ/Ñ0€JØ ×(Ñ(Ø Ø Ø˜d¢A¢q˜jÑ)Øð	 )ó Ñ€Eˆ6�1ô ØØØØ Ø Ø!'Ð*<Ñ!<Øõô —‘Ò-Ó.€IØ ×(Ñ(ØØØ�dšA�gÑØð	 )ó Ñ€Eˆ6�1ô ØØØØØ!'¨%¡Øõô —‘Ò-Ó.€IÜ—(‘(˜S #˜J˜<Ó(€KÜ—(‘(˜A˜3“-€Kà%×-Ñ-Ø Ø ØØð	 .ó Ñ€Eˆ6�6ô ØØØØØ Ø Ø!'¨/Ñ!9Øõ	ò Ü—h‘hâ$Ú$Ú&Ú&ð	ó
ˆð %×,Ñ,ØØØØ"ð	 -ó 
Ñˆˆv�qô 	�
‰
˜8Õ$Ü�
‰
�5ÔØò 	EˆDÜ�d—l‘l 1“o¤s§w¡w£y¸tÖDð	Eàò 	%ˆCÜ�Sœ#Ÿ'™'›)Õ$ð	%ä�‰�ŒÜ�‰Œ
Ü�‰�FÐ/Ñ/Ô0Ø×Ñ˜6Ð$6Ñ6Ô7ØÐr?   c                 óÎ  — t        j                  dt        | «      d¬«      \  }}t        t	        | |d¬«      «      D �]a  \  }\  }}t        j                  |«      }t        j                  |«      }	|d|f   j                  |«       |d|f   j                  |j                  dd«      j                  d	d«      d
¬«       |d|f   j                  d«       |d|f   j                  |j                  d   |j                  d   z  «       |d|f   j                  |	«       |d|f   j                  |j                  dd«      j                  d	d«      d
¬«       |d|f   j                  d«       |d|f   j                  |	j                  d   |	j                  d   z  «       �Œd t        j                  «        t        j                  d|› d	�ddd¬«       t        j                  «        y )Nr   )g3333333@gš™™™™™%@)ÚnrowsÚncolsrN   FrI   r   r‘   ry   rS   rL   rP   rR   r   Ú	sam2_demorT   rU   iè  )rV   rW   Údpi)r\   Úsubplotsr_   rZ   r[   ÚmpimgÚimreadr!   Ú	set_titleÚreplacer   Ú
set_aspectr   Útight_layoutre   ri   )
Úleft_imagesÚright_imagesÚsuffixÚfigÚaxesrs   Úleft_img_pathÚright_img_pathÚleft_imgÚ	right_imgs
             r-   Úshow_all_imagesrÊ   .  s²  € ä—‘ 1¬C°Ó,<ÀnÔU�I€CˆÜ.7¼¸KÈÐ^cÔ8dÓ.eó GÑ*ˆÑ*ˆM˜>Ü—<‘< Ó.ˆÜ—L‘L Ó0ˆ	àˆQ�ˆT‰
×Ñ˜(Ô#ØˆQ�ˆT‰
×Ñ˜]×2Ñ2°<ÀÓD×LÑLÈVÐUWÓXÐceÐÔfØˆQ�ˆT‰
�‰˜ÔØˆQ�ˆT‰
×Ñ˜hŸn™n¨QÑ/°(·.±.ÀÑ2CÑCÔDàˆQ�ˆT‰
×Ñ˜)Ô$ØˆQ�ˆT‰
×Ñ˜^×3Ñ3°LÀ"ÓE×MÑMÈfÐVXÓYÐdfÐÔgØˆQ�ˆT‰
�‰˜ÔØˆQ�ˆT‰
×Ñ˜iŸo™o¨aÑ0°9·?±?À1Ñ3EÑEÖFðGô ×ÑÔÜ‡K�K�)˜F˜8 4Ð(°ÀGÐQUÕVÜ‡H�H…Jr?   )FT)r’   )NNNTNN)rw   rx   ry   ry   ry   r‹   )ry   )!ra   Úmatplotlib.imagerk   r»   Úmatplotlib.pyplotÚpyplotr\   Únumpyr   rx   Úmatplotlib.patchesr   ÚPILr   Úsam2.sam2_image_predictorr   Úsam2_image_onnx_predictorr   Ú
sam2_utilsr   r�   r.   r>   rG   rv   Ústrr{   r|   r‡   Úfloat32Úboolr´   rÊ   © r?   r-   ú<module>rØ      sG  ðó
 
å  Ý Û Û Ý (Ý Ý 8Ý <Ý &ã óó$ò]ð ØØØØ!Øó"ðR "ØØ#%Ø#%Ø)+Ø+ñØðà�%—,‘,Ñðð �;‰;ðð !ðð !ðð $'ðð óð: )ØØŸ™Ø#%Ø#%Ø)+ØØñtØðtàðtð ðtð �;‰;ð	tð
 !ðtð !ðtð $'ðtð ðtð ótônr?   