
    FPh#                        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
mZ d dlmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZmZ d dlmZ d	d
lmZ d	dlm Z   G d de
jB                        Z" G d d      Z#d Z$ddZ%ddZ&d Z'ddZ(y)    N)Path)Image)
dataloaderdistributed)LOADERS
LoadImagesLoadPilAndNumpyLoadScreenshotsLoadStreams
LoadTensorSourceTypesautocast_list)IMG_FORMATSVID_FORMATS)RANKcolorstr)
check_file   )YOLODataset)
PIN_MEMORYc                   4     e Zd ZdZ fdZd Zd Zd Z xZS )InfiniteDataLoaderzV
    Dataloader that reuses workers.

    Uses same syntax as vanilla DataLoader.
    c                     t        |   |i | t        j                  | dt	        | j
                               t         |          | _        y)zFDataloader that infinitely recycles workers, inherits from DataLoader.batch_samplerN)super__init__object__setattr___RepeatSamplerr   __iter__iterator)selfargskwargs	__class__s      aC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\ultralytics/data/build.pyr   zInfiniteDataLoader.__init__   sA    $)&)4.ASAS2TU(*    c                 @    t        | j                  j                        S )z2Returns the length of the batch sampler's sampler.)lenr   samplerr"   s    r&   __len__zInfiniteDataLoader.__len__#   s    4%%--..r'   c              #   l   K   t        t        |             D ]  }t        | j                          yw)z,Creates a sampler that repeats indefinitely.N)ranger)   nextr!   )r"   _s     r&   r    zInfiniteDataLoader.__iter__'   s(     s4y!At}}%% "s   24c                 .    | j                         | _        y)zt
        Reset iterator.

        This is useful when we want to modify settings of dataset while training.
        N)_get_iteratorr!   r+   s    r&   resetzInfiniteDataLoader.reset,   s     **,r'   )	__name__
__module____qualname____doc__r   r,   r    r3   __classcell__)r%   s   @r&   r   r      s    +/&
-r'   r   c                       e Zd ZdZd Zd Zy)r   zl
    Sampler that repeats forever.

    Args:
        sampler (Dataset.sampler): The sampler to repeat.
    c                     || _         y)z@Initializes an object that repeats a given sampler indefinitely.N)r*   )r"   r*   s     r&   r   z_RepeatSampler.__init__=   s	    r'   c              #   L   K   	 t        | j                        E d{    7 w)z4Iterates over the 'sampler' and yields its contents.N)iterr*   r+   s    r&   r    z_RepeatSampler.__iter__A   s#     DLL))) )s   $"$N)r4   r5   r6   r7   r   r     r'   r&   r   r   5   s    *r'   r   c                     t        j                         dz  }t        j                  j	                  |       t        j                  |       y)z\Set dataloader worker seed https://pytorch.org/docs/stable/notes/randomness.html#dataloader.l        N)torchinitial_seednprandomseed)	worker_idworker_seeds     r&   seed_workerrF   G   s1    $$&0KIINN;
KKr'   c           	         t        di d|d| j                  d|d|dk(  d| d| j                  xs |d| j                  xs d	d
| j                  xs ddt        |      d|dk(  rdnddt        | d      d| j                  dk(  d| j                  dk(  d| j                  d|d|dk(  r| j                  S dS )zBuild YOLO Dataset.img_pathimgsz
batch_sizeaugmenttrainhyprectcacheN
single_clsFstridepadg        g      ?prefixz: use_segmentssegmentuse_keypointsposeclassesdatafractiong      ?r=   )
r   rI   rN   rO   rP   intr   taskrX   rZ   )cfgrH   batchrY   moderN   rQ   s          r&   build_yolo_datasetr`   N   s    ;;ii; ; 	;
 ; XX; ii4; >>*U; 6{; 7?C; 4&$; XX*; hh&(; ; ;  "&!; ;  7:!; ;r'   c                    t        |t        |             }t        j                  j	                         }t        t        j                         t        |d      z  |dkD  r|nd|g      }|dk(  rdnt        j                  | |      }t        j                         }|j                  dt        z          t        | ||xr |du ||t        t        | dd      t         |	      S )	zJReturn an InfiniteDataLoader or DataLoader for training or validation set.r   r   N)shufflel   UU*UU* 
collate_fn)	datasetrJ   rc   num_workersr*   
pin_memoryrd   worker_init_fn	generator)minr)   r?   cudadevice_countos	cpu_countmaxr   DistributedSampler	Generatormanual_seedr   r   r   getattrrF   )	re   r^   workersrc   rankndnwr*   ri   s	            r&   build_dataloaderrx   c   s    s7|$E		 	 	"B	bllnB
*UQYEAwO	PBbjdk&D&DWV]&^G!I-45g).&-&A'T/*,&-)3)0,)M-8(13 3r'   c                    d\  }}}}}t        | t        t        t        f      rt        |       } t        |       j                  dd t
        t        z   v }| j                         j                  d      }| j                         xs | j                  d      xs |xr | }| j                         dk(  }|r|rt        |       } nt        | t              rd}nyt        | t        t        f      rt        |       } d}nUt        | t         j                   t"        j$                  f      rd}n(t        | t&        j(                        rd}nt+        d      | |||||fS )	z7Check source type and return corresponding flag values.)FFFFFr   N)zhttps://zhttp://zrtsp://zrtmp://ztcp://z.streamsscreenTzZUnsupported image type. For supported types see https://docs.ultralytics.com/modes/predict)
isinstancestrr[   r   suffixr   r   lower
startswith	isnumericendswithr   r   listtupler   r   rA   ndarrayr?   Tensor	TypeError)sourcewebcam
screenshotfrom_img	in_memorytensoris_fileis_urls           r&   check_sourcer   v   s&   6W3FJ)V&3T*+Vv,%%ab)kK.GH**+bc!!#^vz'B^vG]V]R]\\^x/
g'F	FG	$		FT5M	*v&	FU[["**5	6	FELL	)tuu6:xFBBr'   c                 "   t        |       \  } }}}}}|r| j                  nt        ||||      }	|rt        |       }
nE|r| }
n@|rt	        | |||      }
n.|rt        | |      }
n|rt        | |      }
nt        | ||      }
t        |
d|	       |
S )a1  
    Loads an inference source for object detection and applies necessary transformations.

    Args:
        source (str, Path, Tensor, PIL.Image, np.ndarray): The input source for inference.
        imgsz (int, optional): The size of the image for inference. Default is 640.
        vid_stride (int, optional): The frame interval for video sources. Default is 1.
        buffer (bool, optional): Determined whether stream frames will be buffered. Default is False.

    Returns:
        dataset (Dataset): A dataset object for the specified input source.
    )rI   
vid_stridebuffer)rI   )rI   r   source_type)	r   r   r   r   r   r
   r	   r   setattr)r   rI   r   r   r   r   r   r   r   r   re   s              r&   load_inference_sourcer      s     ?K6>R;FFJ)V(1&$${6:W_ag7hK V$		fEjQWX	!&6	!&6V5ZH G]K0Nr'   )rL   F    )Trb   )Ni  r   F))rm   rB   pathlibr   numpyrA   r?   PILr   torch.utils.datar   r   ultralytics.data.loadersr   r   r	   r
   r   r   r   r   ultralytics.data.utilsr   r   ultralytics.utilsr   r   ultralytics.utils.checksr   re   r   utilsr   
DataLoaderr   r   rF   r`   rx   r   r   r=   r'   r&   <module>r      ss    
      4B B B ; , /   -.. ->* *$;*3&C4!r'   