o
    Ďi8                     @   s  d Z ddlZddlZddlZddlZddlmZ ddlZee	 Z
e
jd Zeeejvr6ejee eejee ZddlmZ ddlmZmZmZmZmZ ddlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ e/ d	ed
 ed dddddddddddddddddddddddddfddZ0dd Z1dd Z2e3dkre2  dS dS )a  
Run YOLOv5 detection inference on images, videos, directories, globs, YouTube, webcam, streams, etc.

Usage - sources:
    $ yolov5 detect --weights yolov5s.pt --source 0                               # webcam
                                                     img.jpg                         # image
                                                     vid.mp4                         # video
                                                     screen                          # screenshot
                                                     path/                           # directory
                                                     list.txt                        # list of images
                                                     list.streams                    # list of streams
                                                     'path/*.jpg'                    # glob
                                                     'https://youtu.be/Zgi9g1ksQHc'  # YouTube
                                                     'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

Usage - formats:
    $ yolov5 detect --weights yolov5s.pt                 # PyTorch
                                 yolov5s.torchscript        # TorchScript
                                 yolov5s.onnx               # ONNX Runtime or OpenCV DNN with --dnn
                                 yolov5s_openvino_model     # OpenVINO
                                 yolov5s.engine             # TensorRT
                                 yolov5s.mlmodel            # CoreML (macOS-only)
                                 yolov5s_saved_model        # TensorFlow SavedModel
                                 yolov5s.pb                 # TensorFlow GraphDef
                                 yolov5s.tflite             # TensorFlow Lite
                                 yolov5s_edgetpu.tflite     # TensorFlow Edge TPU
                                 yolov5s_paddle_model       # PaddlePaddle
    N)Path)DetectMultiBackend)IMG_FORMATSVID_FORMATS
LoadImagesLoadScreenshotsLoadStreams)LOGGERProfile
check_filecheck_img_sizecheck_imshowcheck_requirementscolorstrcv2increment_pathnon_max_suppression
print_argsscale_boxesstrip_optimizer	xyxy2xywh)	Annotatorcolorssave_one_box)select_devicesmart_inference_mode
yolov5s.ptdata/imagesdata/coco128.yaml      ??   Fruns/detectexp      c           I         s  t |}| o|d }t|jdd  tt v }| d}| p.|dp.|o.| }| d} |r>|r>t	|}|d u rI|d u rId}n|d urO|}t
|trX||g}tt|| |d}!|
rh|!d n|!jd	d	d
 t|}t| ||||d}"|"j|"j|"j}#}$}%t||#d}d}&|rtd	d}	t|||#|%|d}'t|'}&n| rt|||#|%d}'n	t|||#|%|d}'d g|& d g|& }(})|"j|%s|"jrdn|&dg|R d dg t t t f }*}+|'D ]\},}-}.}/}0|+d - t|-|"j}-|"j r|-! n|-" }-|-d }-t|-j#dkr|-d  }-W d    n	1 s"w   Y  |+d  |r:t|!t|,j$ d	dnd}|"|-||d}1W d    n	1 sNw   Y  |+d  t%|1|||||d}1W d    n	1 smw   Y  t&|1D ]\}2}3 d7  |r|,|2 |.|2 ' |'j(}4}5}6|0|2 d7 }0n|,|.' t)|'dd}4}5}6t|4}4t |!|4j* }7t |!d |4j$ |'j+dkrdnd|6  }8|0d|-j#dd   7 }0t,|5j#g d }9|r|5' n|5}:t-|5|t |$d };t|3rt.|-j#dd  |3d d d d!f |5j#/ |3d d d d!f< |3d d d"f 0 D ]#}<|3d d d"f |<k1 }=|0|= d#|$t|<  d$|=dk  d%7 }0qt2|3D ]^ }>}?}@|
rt3t,|>4dd!|9 4d&5 }A|rj|@g|A|?R n|@g|AR }Bt6|8 dd'}C|C7d(t|B 8 |B d)  W d    n	1 sw   Y  |s|s|	rt|@}<|rd n|r|$|< n	|$|<  d#|?d*}D|;j9|>|Dt:|<d	d+ |rt;|>|:|!d, |$|<  |4j$ d- d	d. qD|;< }5|	rt=> d/kr|4|*vr|*?|4 t@At |4t@jBt@jCB  t@Dt |4|5j#d |5j#d  t@Et |4|5 t@Fd |r|'j+dkr0t@G|7|5 qv|(|2 |7kr|7|(|2< t
|)|2 t@jHrJ|)|2 I  |/rd|/Jt@jK}Et|/Jt@jL}Ft|/Jt@jM}Gnd0|5j#d |5j#d }E}F}Gt t|7Nd1}7t@H|7t@jOd2 |E|F|Gf|)|2< |)|2 7|5 qvtPQ|0 t|3rdnd3 |+d jRd4 d5d6 qtS fd7d8|+D }HtPQd9ddg|R  |H  |
s|r|
rd)ttT|!Ud: d;|!d  nd}0tPQd<tVd=|! |0  |rtW| d  d S d S )>Nz.txtr&   )zrtsp://zrtmp://zhttp://zhttps://z.streamsscreen  )exist_oklabelsT)parentsr)   )devicednndatafp16)s)warn)img_sizestrideauto
vid_stride)r2   r3   r4   r%   )imgszr      )mkdirF)augment	visualize   )max_detz: frameimager"   _z%gx%g )r&   r   r&   r   )
line_widthexample       r0   z, az%g 
z.2f)colorcropsz.jpg)fileBGRLinux   z.mp4mp4vz(no detections),      @@z.1fmsc                 3   s    | ]
}|j   d  V  qdS )rO   N)t).0xseen I/home/jeff/fluffinator/venv/lib/python3.10/site-packages/yolov5/detect.py	<genexpr>   s    zrun.<locals>.<genexpr>zKSpeed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape zlabels/*.txtz labels saved to zResults saved to bold)Xstrendswithr   suffixr   r   lower
startswith	isnumericr   
isinstanceintr   r8   r   r   r3   namesptr   r   r   lenr   r   warmuptritonr
   torch
from_numpytor,   r/   halffloatshapestemr   	enumeratecopycountgetattrnamemodetensorr   r   rounduniquesumreversedr   viewtolistopenwriterstrip	box_labelr   r   resultplatformsystemappendr   namedWindowWINDOW_NORMALWINDOW_KEEPRATIOresizeWindowimshowwaitKeyimwriteVideoWriterreleasegetCAP_PROP_FPSCAP_PROP_FRAME_WIDTHCAP_PROP_FRAME_HEIGHTwith_suffixVideoWriter_fourccr	   infodttuplelistglobr   r   )Iweightssourcer.   r6   img
conf_thres	iou_thresr<   r,   view_imgsave_txt	save_conf	save_cropnosaveclassesagnostic_nmsr9   r:   updateprojectrr   r)   line_thicknesshide_labels	hide_confrj   r-   r5   save_imgis_fileis_urlwebcam
screenshotsave_dirmodelr3   rb   rc   bsdatasetvid_path
vid_writerwindowsr   pathimim0svid_capr0   predidetpim0r=   	save_pathtxt_pathgnimc	annotatorcnxyxyconfclsxywhlineflabelfpswhrQ   rV   rT   rW   run5   s   


$

 
,
<,$" ,(

4,r   c               	   C   s  t  } | jddtddd | jdttd dd	 | jd
ttd dd	 | jddddtdgdd | jdtddd	 | jdtddd	 | jdtddd	 | jdddd | jdd d!d" | jd#d d$d" | jd%d d&d" | jd'd d(d" | jd)d d*d" | jd+dtd,d- | jd.d d/d" | jd0d d1d" | jd2d d3d" | jd4d d5d" | jd6d7d8d | jd9d:d8d | jd;d d<d" | jd=d>td?d@ | jdAdBd dCdD | jdEdBd dFdD | jdGd dHd" | jdId dJd" | jdKtdLdMd	 |  }| jt	|jdLkrdNndL9  _t
t| |S )ONz	--weights+r   zmodel path or triton URL)nargstypedefaulthelpz--sourcer   z"file/dir/URL/glob/screen/0(webcam))r   r   r   z--datar   z(optional) dataset.yaml pathz--imgszz--imgz
--img-sizer(   zinference size h,wz--conf-thresr   zconfidence thresholdz--iou-thresr    zNMS IoU thresholdz	--max-detr!   zmaximum detections per imagez--devicer"   z%cuda device, i.e. 0 or 0,1,2,3 or cpu)r   r   z
--view-img
store_truezshow results)actionr   z
--save-txtzsave results to *.txtz--save-confz%save confidences in --save-txt labelsz--save-cropzsave cropped prediction boxesz--nosavezdo not save images/videosz	--classesz0filter by class: --classes 0, or --classes 0 2 3)r   r   r   z--agnostic-nmszclass-agnostic NMSz	--augmentzaugmented inferencez--visualizezvisualize featuresz--updatezupdate all modelsz	--projectr#   zsave results to project/namez--namer$   z
--exist-okz*existing project/name ok, do not incrementz--line-thicknessr%   zbounding box thickness (pixels))r   r   r   z--hide-labelsFzhide labels)r   r   r   z--hide-confzhide confidencesz--halfz!use FP16 half-precision inferencez--dnnz!use OpenCV DNN for ONNX inferencez--vid-strider&   zvideo frame-rate strider;   )argparseArgumentParseradd_argumentrZ   ROOTra   rk   
parse_argsr6   rd   r   vars)parseroptrV   rV   rW   	parse_opt   s@   "r   c                  C   s&   t  } tdd tdi t|  d S )N)tensorboardthop)excluderV   )r   r   r   r   )r   rV   rV   rW   main  s   
r   __main__)4__doc__r   osr   syspathlibr   rg   __file__resolveFILEr+   r   rZ   r   r   relpathcwdyolov5.models.commonr   yolov5.utils.dataloadersr   r   r   r   r   yolov5.utils.generalr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   yolov5.utils.plotsr   r   r   yolov5.utils.torch_utilsr   r   r   r   r   __name__rV   rV   rV   rW   <module>   sj   
@ /#
