a
    yf                     @   sx   d dl mZ d dlZd dlmZmZ d dlmZmZ ed d dl	m
Z
mZ G dd dZed	krtd
ddZeeZdS )    )defaultdictN)check_imshowcheck_requirements)	Annotatorcolorszshapely>=2.0.0)PointPolygonc                   @   s*   e Zd ZdZdddZdd Zd	d
 ZdS )QueueManagerzOA class to manage the queue in a real-time video stream based on object tracks.N   Fc                 C   st   |dur|ng d| _ t| j dkr.t| j n
tg d| _|| _|| _|| _d| _tt	| _
|| _tdd| _dS )au  
        Initializes the QueueManager with specified parameters for tracking and counting objects.

        Args:
            names (dict): A dictionary mapping class IDs to class names.
            reg_pts (list of tuples, optional): Points defining the counting region polygon. Defaults to a predefined
                rectangle.
            line_thickness (int, optional): Thickness of the annotation lines. Defaults to 2.
            view_img (bool, optional): Whether to display the image frames. Defaults to False.
            draw_tracks (bool, optional): Whether to draw tracks of the objects. Defaults to False.
        N))   <   )r     )`  r   )r   r      r   T)warn)reg_ptslenr   counting_regiontfview_imgnamescountsr   listtrack_historydraw_tracksr   	env_check)selfr   r   line_thicknessr   r    r   b/var/www/html/django/DPS/env/lib/python3.9/site-packages/ultralytics/solutions/queue_management.py__init__   s    "
zQueueManager.__init__c                 C   s  t || j| j}d| _|d jjdurz|d jj }|d jj 	 }|d jj
  	 }t|||D ]\}}}	|j|| j|	 tt
|dd | j| }
|
t|d |d  d t|d |d  d f t|
dkr|
d | jr|j|
tt
|d| jd	 t| j| dkr8| j| d
 nd}t| jdkrp| jt|
d }|durp|rp|  jd7  _qpdt| j }|dur|j|| jddd | jr| jr|j| j| jd dd t d| t!dd@ t"dkrdS dS )zEExtracts and processes tracks for queue management in a video stream.r   NT)labelcolorr
      r      )r"   Ztrack_thicknesszQueue Counts : )   r   r'   )h         )ZpointsZregion_colorZ	txt_color)r   Z	thicknessr"   z Ultralytics YOLOv8 Queue Managerr'   q)#r   r   r   r   boxesidZxyxycpuclstolistintzipZ	box_labelr   r   appendfloatr   popr   Zdraw_centroid_and_tracksr   r   r   containsr   strZqueue_counts_displayr   r   Zdraw_regioncv2ZimshowZwaitKeyord)r   tracksim0Z	annotatorr,   ZclssZ	track_idsboxZtrack_idr/   Z
track_lineZprev_positionZ	is_insider!   r   r   r   extract_and_process_tracks;   sH     
6
&
z'QueueManager.extract_and_process_tracksc                 C   s   |  || |S )z
        Main function to start the queue management process.

        Args:
            im0 (ndarray): Current frame from the video stream.
            tracks (list): List of tracks obtained from the object tracking process.
        )r=   )r   r;   r:   r   r   r   process_queueq   s    zQueueManager.process_queue)Nr
   FF)__name__
__module____qualname____doc__r    r=   r>   r   r   r   r   r	      s       
)6r	   __main__Zpersoncar)r   r#   )collectionsr   r8   Zultralytics.utils.checksr   r   Zultralytics.utils.plottingr   r   Zshapely.geometryr   r   r	   r?   Zclasses_namesZqueue_managerr   r   r   r   <module>   s   n
