Ë
    Fêñi3  ã                   ó(  — d dl Z d dl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 g ej                  _         G d„ d«      Zed	k(  rDd dlZ eej(                  «      Zed
kD  rej(                  d
   ndZ ee¬«      j/                  «        yy)é    N)ÚAny)ÚYOLO)ÚLOGGER)Úcheck_requirements)ÚGITHUB_ASSETS_STEMSc                   óP   — e Zd ZdZdeddfd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
dd„Zy)Ú	Inferencea  A class to perform object detection, image classification, image segmentation and pose estimation inference.

    This class provides functionalities for loading models, configuring settings, uploading video files, and performing
    real-time inference using Streamlit and Ultralytics YOLO models.

    Attributes:
        st (module): Streamlit module for UI creation.
        temp_dict (dict): Temporary dictionary to store the model path and other configuration.
        model_path (str): Path to the loaded model.
        model (YOLO): The YOLO model instance.
        source (str): Selected video source (webcam or video file).
        enable_trk (bool): Enable tracking option.
        conf (float): Confidence threshold for detection.
        iou (float): IoU threshold for non-maximum suppression.
        org_frame (Any): Container for the original frame to be displayed.
        ann_frame (Any): Container for the annotated frame to be displayed.
        vid_file_name (str | int): Name of the uploaded video file or webcam index.
        selected_ind (list[int]): List of selected class indices for detection.

    Methods:
        web_ui: Set up the Streamlit web interface with custom HTML elements.
        sidebar: Configure the Streamlit sidebar for model and inference settings.
        source_upload: Handle video file uploads through the Streamlit interface.
        configure: Configure the model and load selected classes for inference.
        inference: Perform real-time object detection inference.

    Examples:
        Create an Inference instance with a custom model
        >>> inf = Inference(model="path/to/model.pt")
        >>> inf.inference()

        Create an Inference instance with default settings
        >>> inf = Inference()
        >>> inf.inference()
    ÚkwargsÚreturnNc                 ój  — t        d«       ddl}|| _        d| _        g | _        d| _        d| _        d| _        d| _        d| _	        d| _
        g | _        d| _        ddi|¥| _        d| _        | j                  d   �| j                  d   | _        t        j                   d| j                  › �«       y)	zÈInitialize the Inference class, checking Streamlit requirements and setting up the model path.

        Args:
            **kwargs (Any): Additional keyword arguments for model configuration.
        zstreamlit>=1.29.0r   NFg      Ð?gÍÌÌÌÌÌÜ?Úmodelu   Ultralytics Solutions: âœ… )r   Ú	streamlitÚstÚsourceÚimg_file_namesÚ
enable_trkÚconfÚiouÚ	org_frameÚ	ann_frameÚvid_file_nameÚselected_indr   Ú	temp_dictÚ
model_pathr   Úinfo)Úselfr
   r   s      úk/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/ultralytics/solutions/streamlit_inference.pyÚ__init__zInference.__init__7   s°   € ô 	Ð.Ô/ÛàˆŒØˆŒØ ˆÔØˆŒØˆŒ	ØˆŒØˆŒØˆŒØ!ˆÔØ')ˆÔØˆŒ
à! 4Ð2¨6Ð2ˆŒØˆŒØ�>‰>˜'Ñ"Ð.Ø"Ÿn™n¨WÑ5ˆDŒOä�‰Ð1°$·.±.Ð1AÐBÕCó    c                 óø   — d}d}d}| j                   j                  dd¬«       | j                   j                  |d¬«       | j                   j                  |d¬«       | j                   j                  |d¬«       y	)
z=Set up the Streamlit web interface with custom HTML elements.z-<style>MainMenu {visibility: hidden;}</style>zÆ<div><h1 style="color:#111F68; text-align:center; font-size:40px; margin-top:-50px;
        font-family: 'Archivo', sans-serif; margin-bottom:20px;">Ultralytics YOLO Streamlit Application</h1></div>u	  <div><h5 style="color:#042AFF; text-align:center; font-family: 'Archivo', sans-serif;
        margin-top:-15px; margin-bottom:50px;">Experience real-time object detection on your webcam, videos, and images
        with the power of Ultralytics YOLO! ðŸš€</h5></div>zUltralytics Streamlit AppÚwide)Ú
page_titleÚlayoutT)Úunsafe_allow_htmlN)r   Úset_page_configÚmarkdown)r   Úmenu_style_cfgÚmain_title_cfgÚsub_title_cfgs       r   Úweb_uizInference.web_uiS   su   € àLˆðvˆð?ˆð
 	�‰×ÑÐ+FÈvÐÔVØ�‰×Ñ˜¸4ÐÔ@Ø�‰×Ñ˜¸4ÐÔ@Ø�‰×Ñ˜¸$ÐÕ?r   c           	      óf  — | j                   j                  5  d}| j                   j                  |d¬«       ddd«       | j                   j                  j                  d«       | j                   j                  j	                  dd«      | _        | j
                  dv r.| j                   j                  j                  d	d
«      dk(  | _        t        | j                   j                  j                  ddd| j                  d«      «      | _
        t        | j                   j                  j                  ddd| j                  d«      «      | _        | j
                  dk7  rI| j                   j                  d«      \  }}|j                  «       | _        |j                  «       | _        yy# 1 sw Y   �ŒqxY w)zAConfigure the Streamlit sidebar for model and inference settings.z`https://raw.githubusercontent.com/ultralytics/assets/main/logo/Ultralytics_Logotype_Original.svgéú   )ÚwidthNzUser ConfigurationÚSource)ÚwebcamÚvideoÚimage)r/   r0   zEnable Tracking)ÚYesÚNor2   zConfidence Thresholdg        g      ð?g{®Gáz„?zIoU Thresholdr1   é   )r   Úsidebarr1   ÚtitleÚ	selectboxr   Úradior   ÚfloatÚsliderr   r   ÚcolumnsÚemptyr   r   )r   ÚlogoÚcol1Úcol2s       r   r5   zInference.sidebarf   sE  € à�W‰W�_‰_ñ 	+ØuˆDØ�G‰G�M‰M˜$ cˆMÔ*÷	+ð 	�‰�‰×ÑÐ2Ô3Ø—g‘g—o‘o×/Ñ/ØØ(ó
ˆŒð �;‰;Ð-Ñ-Ø"Ÿg™gŸo™o×3Ñ3Ð4EÀ}ÓUÐY^Ñ^ˆDŒOÜØ�G‰G�O‰O×"Ñ"Ð#9¸3ÀÀTÇYÁYÐPTÓUó
ˆŒ	ô ˜Ÿ™Ÿ™×/Ñ/°ÀÀcÈ4Ï8É8ÐUYÓZÓ[ˆŒà�;‰;˜'Ò!ØŸ™Ÿ™¨Ó+‰JˆD�$Ø!ŸZ™Z›\ˆDŒNØ!ŸZ™Z›\ˆD�Nð "÷!	+ñ 	+ús   — F&Æ&F0c                 óT  — ddl m}m} d| _        | j                  dk(  r‰| j
                  j                  j                  d|¬«      }|�_t        j                  |j                  «       «      }t        dd	«      5 }|j                  |j                  «       «       ddd«       d| _        yy| j                  d
k(  rd| _        y| j                  dk(  rÃddl}| j
                  j                  j                  d|d¬«      x}r”|D ]Ž  }|j                  dd|j                  j!                  d«      d   › �¬«      5 }	|	j                  |j                  «       «       | j"                  j%                  |	j                  |j                  dœ«       ddd«       Œ� yyy# 1 sw Y   ŒüxY w# 1 sw Y   Œ©xY w)z:Handle video file uploads through the Streamlit interface.r   )ÚIMG_FORMATSÚVID_FORMATSÚ r0   zUpload Video File)ÚtypeNzultralytics.mp4Úwbr/   r1   zUpload Image FilesT)rD   Úaccept_multiple_filesFú.éÿÿÿÿ)ÚdeleteÚsuffix)ÚpathÚname)Úultralytics.data.utilsrA   rB   r   r   r   r5   Úfile_uploaderÚioÚBytesIOÚreadÚopenÚwriteÚtempfileÚNamedTemporaryFilerL   Úsplitr   Úappend)
r   rA   rB   Úvid_fileÚgÚoutrT   ÚimgfilesÚimgfileÚtfs
             r   Úsource_uploadzInference.source_upload}   sˆ  € çCàˆÔØ�;‰;˜'Ò!Ø—w‘w—‘×4Ñ4Ð5HÈ{Ð4Ó[ˆHØÐ#Ü—J‘J˜xŸ}™}›Ó/�ÜÐ+¨TÓ2ð (°cØ—I‘I˜aŸf™f›hÔ'÷(à%6�Õ"ð	 $ð
 �[‰[˜HÒ$Ø!"ˆDÕØ�[‰[˜GÒ#ÛàŸ7™7Ÿ?™?×8Ñ8Ø$¨;Èdð 9ó ð ˆxð ð  (ò \�GØ!×4Ñ4¸EÈAÈgÏlÉl×N`ÑN`ÐadÓNeÐfhÑNiÐMjÐJkÐ4Ólð \ÐprØŸ™ §¡£Ô0Ø×+Ñ+×2Ñ2¸B¿G¹GÈWÏ\É\Ñ3ZÔ[÷\ð \ñ\ðð $÷(ð (ú÷\ð \ús   Á7 FÄ3AFÆFÆF'	c           	      óô  ‡‡‡‡	— g d¢g d¢cŠŠt        t        D �‡cg c],  Št        ˆfd„‰D «       «      rd‰vr‰j                  dd«      ‘Œ. c}ˆˆfd„¬«      }| j                  r|j                  d	| j                  «       | j                  j                  j                  d
|«      Š	| j                  j                  d«      5  ‰	j                  d«      st        ˆ	fd„dD «       «      r‰	}n‰	j                  «       › d�}t        |«      | _        t        | j                  j                  j!                  «       «      }ddd«       | j                  j#                  d«       | j                  j                  j%                  d|dd ¬«      }|D �cg c]  }|j'                  |«      ‘Œ c}| _        t+        | j(                  t        «      st        | j(                  «      | _        yyc c}w # 1 sw Y   Œ®xY wc c}w )z<Configure the model and load selected classes for inference.)Úyolo26nÚyolo26sÚyolo26mÚyolo26lÚyolo26x)rC   z-segz-posez-obbz-clsc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w©N)Ú
startswith)Ú.0ÚbÚxs     €r   ú	<genexpr>z&Inference.configure.<locals>.<genexpr>ž   s   øè ø€ Ò6¨1�q—|‘| A—Ñ6ùs   ƒÚ	grayscaleÚyolor   c                 ó”   •— ‰j                  | d d j                  «       «      ‰j                  | dd  j                  «       xs d«      fS )Né   rC   )ÚindexÚlower)rj   ÚM_ORDÚT_ORDs    €€r   ú<lambda>z%Inference.configure.<locals>.<lambda>    s<   ø€ ˜5Ÿ;™; q¨¨! u§{¡{£}Ó5°u·{±{À1ÀQÀRÀ5Ç;Á;Ã=ÒCVÐTVÓ7WÐX€ r   )Úkeyr   ÚModelzModel is downloading...)ú.ptz.onnxz.torchscriptz
.mlpackagez.enginec              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrf   © )rh   ÚfmtÚselected_models     €r   rk   z&Inference.configure.<locals>.<genexpr>§   s   øè ø€ ò iØ*-��~Ô%ñiùs   ƒ)Úopenvino_modelÚ
rknn_modelrw   NzModel loaded successfully!ÚClassesé   )Údefault)Úsortedr   ÚanyÚreplacer   Úinsertr   r5   r7   ÚspinnerÚendswithrq   r   r   ÚlistÚnamesÚvaluesÚsuccessÚmultiselectrp   r   Ú
isinstance)
r   rj   Úavailable_modelsr   Úclass_namesÚselected_classesÚoptionrr   rs   r{   s
    `     @@@r   Ú	configurezInference.configure–   sµ  û€ ò OÒPuˆˆˆuÜ!ô -÷àÜÓ6°Ô6Ô6¸;ÈaÑ;Oð —	‘	˜& &Õ)òô
 Yô
Ðð �?Š?Ø×#Ñ# A t§¡Ô7ØŸ™Ÿ™×2Ñ2°7Ð<LÓMˆà�W‰W�_‰_Ð6Ó7ñ 	:Ø×&Ñ&Ð'`ÔaÔehó iØ1Qôiô fð ,‘
à .× 4Ñ 4Ó 6Ð7°sÐ;�
Ü˜jÓ)ˆDŒJÜ˜tŸz™z×/Ñ/×6Ñ6Ó8Ó9ˆK÷	:ð 	�‰�‰Ð4Ô5ð  Ÿ7™7Ÿ?™?×6Ñ6°yÀ+ÐWbÐceÐdeÐWfÐ6ÓgÐØEUÖV¸6˜[×.Ñ.¨vÕ6ÒVˆÔä˜$×+Ñ+¬TÔ2Ü $ T×%6Ñ%6Ó 7ˆDÕð 3ùò5÷	:ð 	:üò Ws   œ1G$ÃA9G)ÆG5Ç)G2c                 óÆ  — | j                   D �])  }|d   }t        j                  |«      }|�ï| j                  j	                  d|d   › �«       | j                  j                  d«      \  }}|5  | j                  j                  |dd¬«       ddd«       | j                  || j                  | j                  | j                  ¬	«      }|d
   j                  «       }|5  | j                  j                  |dd¬«       ddd«       	 t        j                  |«       �Œ| j                  j                  d«       �Œ, y# 1 sw Y   Œ¯xY w# 1 sw Y   ŒLxY w# t        $ r Y �ŒRw xY w)z%Perform inference on uploaded images.rK   Nz#### Processed: rL   r4   ÚBGRzOriginal Image©ÚchannelsÚcaption©r   r   Úclassesr   zPredicted Imagez"Could not load the uploaded image.)r   Úcv2Úimreadr   r&   r;   r1   r   r   r   r   ÚplotÚosÚunlinkÚFileNotFoundErrorÚerror)r   Úimg_infoÚimg_pathr1   r>   r?   ÚresultsÚannotated_images           r   Úimage_inferencezInference.image_inference¸   s?  € à×+Ñ+ó 	DˆHØ Ñ'ˆHÜ—J‘J˜xÓ(ˆEØÐ Ø—‘× Ñ Ð#3°H¸VÑ4DÐ3EÐ!FÔGØ!ŸW™WŸ_™_¨QÓ/‘
��dØñ SØ—G‘G—M‘M %°%ÐAQ�MÔR÷SàŸ*™* U°·±ÀÇÁÐRV×RcÑRc˜*Ód�Ø")¨!¡*§/¡/Ó"3�Øñ ^Ø—G‘G—M‘M /¸EÐK\�MÔ]÷^ðÜ—I‘I˜hÖ'ð —‘—‘ÐBÖCñ#	D÷Sð Sú÷^ð ^ûô )ò Úðús*   Á.D;ÃEÄEÄ;E	ÅE	Å	E ÅE c                 ó$  — | j                  «        | j                  «        | j                  «        | j                  «        | j                  j                  j                  d«      �r| j                  dk(  r9| j                  r| j                  «        y| j                  j                  d«       y| j                  j                  j                  d«      }t        j                  | j                  «      }|j                  «       s| j                  j                  d«       y|j                  «       �r=|j                  «       \  }}|s| j                  j!                  d«       �n| j"                  r?| j$                  j'                  || j(                  | j*                  | j,                  d¬	«      }n3| j%                  || j(                  | j*                  | j,                  ¬
«      }|d   j/                  «       }|r*|j1                  «        | j                  j3                  «        | j4                  j7                  |dd¬«       | j8                  j7                  |dd¬«       |j                  «       r�Œ=|j1                  «        t        j:                  «        y)zEPerform real-time object detection inference on video or webcam feed.ÚStartr1   z1Please upload an image file to perform inference.NÚStopz&Could not open webcam or video source.zQFailed to read frame from webcam. Please verify the webcam is connected properly.T)r   r   r˜   Úpersistr—   r   r“   zOriginal Framer”   zPredicted Frame)r*   r5   r^   r‘   r   Úbuttonr   r   r¤   r   r™   ÚVideoCapturer   ÚisOpenedrŸ   rQ   Úwarningr   r   Útrackr   r   r   r›   ÚreleaseÚstopr   r1   r   ÚdestroyAllWindows)r   Ústop_buttonÚcaprŠ   Úframer¢   Úannotated_frames          r   Ú	inferencezInference.inferenceÍ   sØ  € à�‰ŒØ�‰ŒØ×ÑÔØ�‰Ôà�7‰7�?‰?×!Ñ! 'Õ*Ø�{‰{˜gÒ%Ø×&Ò&Ø×(Ñ(Ô*ð ð —G‘G—L‘LÐ!TÔUØàŸ'™'Ÿ/™/×0Ñ0°Ó8ˆKÜ×"Ñ" 4×#5Ñ#5Ó6ˆCØ—<‘<”>Ø—‘—‘ÐFÔGØà—,‘,•.Ø!$§¡£‘�˜ÙØ—G‘G—O‘OÐ$wÔxÙð —?’?Ø"Ÿj™j×.Ñ.Ø D§I¡I°4·8±8ÀT×EVÑEVÐ`dð /ó ‘Gð #Ÿj™j¨°T·Y±YÀDÇHÁHÐVZ×VgÑVg˜jÓh�Gà")¨!¡*§/¡/Ó"3�áØ—K‘K”MØ—G‘G—L‘L”Nà—‘×$Ñ$ U°UÐDTÐ$ÔUØ—‘×$Ñ$ _¸uÐN_Ð$Ô`ð+ —,‘,–.ð. �K‰KŒMÜ×ÑÕr   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r*   r5   r^   r‘   r¤   rµ   ry   r   r   r	   r	      s@   „ ñ"ðHD ð D¨ó Dó8@ó&*ó.\ó2 8óDDô*- r   r	   Ú__main__é   )r   )rO   rœ   Útypingr   r™   ÚtorchÚultralyticsr   Úultralytics.utilsr   Úultralytics.utils.checksr   Úultralytics.utils.downloadsr   r˜   Ú__path__r	   r¶   ÚsysÚlenÚargvÚargsr   rµ   ry   r   r   ú<module>rÇ      s‚   ðó 
Û 	Ý ã 
Û å Ý $Ý 7Ý ;à€‡�Ô ÷h ñ h ðV ˆzÒÛñ ˆs�x‰x‹=€DØ !š8ˆC�H‰H�QŠK¨€Eá�EÔ×$Ñ$Õ&ð r   