diff --git a/DesignDoc.docx b/DesignDoc.docx new file mode 100644 index 0000000..96d1d11 Binary files /dev/null and b/DesignDoc.docx differ diff --git a/README.md b/README.md index b786a4b..fc55377 100644 --- a/README.md +++ b/README.md @@ -2,29 +2,112 @@ -# final-project -## [National Action Council for Minorities in Engineering(NACME)](https://www.nacme.org) Google Applied Machine Learning Intensive (AMLI) at the `PARTICIPATING_UNIVERSITY` +# AMLI Student Detection, Tracking & Counting +## [National Action Council for Minorities in Engineering(NACME)](https://www.nacme.org) Google Applied Machine Learning Intensive (AMLI) at the `University of Arkansas` Developed by: -- [member1](https://github.com/cbaker6) - `STUDENTS_UNIVERSITY` -- [member2](https://github.com/cbaker6) - `STUDENTS_UNIVERSITY` -- [member3](https://github.com/cbaker6) - `STUDENTS_UNIVERSITY` -- [member4](https://github.com/cbaker6) - `STUDENTS_UNIVERSITY` +- [Ellion Dison](https://github.com/ecdison) - `University of Arkansas` +- [Yasser Hassan](https://github.com/Yasserjr11) - `Virginia Tech` +- [Gabriel Young](https://github.com/gabrielyoung02) - `University of Arkansas` ## Description +The goal of this project is to detect and count the number of students in a classroom. To accomplish this, we used object tracking implemented with YOLOv4, DeepSort, and TensorFlow. YOLOv4 is a state-of-the-art algorithm that uses deep convolutional neural networks to perform object detections. The YOLO algorithm works by dividing the image into N grids, each having an equal dimensional region of SxS. Each of these N grids is responsible for the detection and localization of the object it contains. We can take the output of YOLOv4 feed these object detections into Deep SORT (Simple Online and Realtime Tracking with a Deep Association Metric) in order to create a highly accurate object tracker. +## Demo of tracker on humans +

+ +## Demo Colab +Open In Colab + +## Tutorials + +* [Yolov5 training (link to external repository)](https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data)  +* [Deep appearance descriptor training (link to external repository)](https://kaiyangzhou.github.io/deep-person-reid/user_guide.html)  ## Usage instructions -1. Fork this repo -2. Change directories into your project -3. On the command line, type `pip3 install requirements.txt` -4. .... +1. Clone the repository recursively: + +`git clone --recurse-submodules https://github.com/mikel-brostrom/Yolov5_StrongSORT_OSNet.git` + +If you already cloned and forgot to use `--recurse-submodules` you can run `git submodule update --init` + +2. Make sure that you fulfill all the requirements: Python 3.8 or later with all [requirements.txt](https://github.com/Applied-Machine-Learning-2022/final-project-yeg-ua/blob/main/requirements.txt) dependencies installed, including torch>=1.7. To install, run: + +`pip install -r requirements.txt` + +3. Make sure you replace the old track.py file with this [track.py](https://github.com/Applied-Machine-Learning-2022/final-project-yeg-ua/blob/main/track.py) after cloning the repository above. + +## Tracking sources + +Tracking can be run on most video formats + +```bash +$ python track.py --source 0 # webcam + img.jpg # image + vid.mp4 # video + path/ # directory + path/*.jpg # glob + 'https://youtu.be/Zgi9g1ksQHc' # YouTube + 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream +``` + + +## Select object detection and ReID model + +### Yolov5 + +There is a clear trade-off between model inference speed and accuracy. In order to make it possible to fulfill your inference speed/accuracy needs +you can select a Yolov5 family model for automatic download + +```bash + + +$ python track.py --source 0 --yolo-weights yolov5n.pt --img 640 + yolov5s.pt + yolov5m.pt + yolov5l.pt + yolov5x.pt --img 1280 + ... +``` + +### StrongSORT + +The above applies to StrongSORT models as well. Choose a ReID model based on your needs from this ReID [model zoo](https://kaiyangzhou.github.io/deep-person-reid/MODEL_ZOO) + +```bash + + +$ python track.py --source 0 --strong-sort-weights osnet_x0_25_market1501.pt + osnet_x0_5_market1501.pt + osnet_x0_75_msmt17.pt + osnet_x1_0_msmt17.pt + ... +``` + +## Filter tracked classes + +By default the tracker tracks all MS COCO classes. + +If you only want to track persons I recommend you to get [these weights](https://drive.google.com/file/d/1gglIwqxaH2iTvy6lZlXuAcMpd_U0GCUb/view?usp=sharing) for increased performance + +```bash +python track.py --source 0 --yolo-weights yolov5/weights/crowdhuman_yolov5m.pt --classes 0 # tracks persons, only! +``` +## MOT compliant results + +Can be saved to your experiment folder `runs/track/_/` by + +```bash +python track.py --source ... --save-txt +``` + + diff --git a/YEG Ethical considerations.docx b/YEG Ethical considerations.docx new file mode 100644 index 0000000..9249fa5 Binary files /dev/null and b/YEG Ethical considerations.docx differ diff --git a/Yolov5_DeepSort_Pytorch.ipynb b/Yolov5_DeepSort_Pytorch.ipynb new file mode 100644 index 0000000..1fe37d1 --- /dev/null +++ b/Yolov5_DeepSort_Pytorch.ipynb @@ -0,0 +1,599 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Yolov5 DeepSort Pytorch tutorial.ipynb", + "provenance": [], + "collapsed_sections": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU", + "gpuClass": "standard" + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AIGuIpRFAo18" + }, + "source": [ + "# Setup\n", + "\n", + "Clone repo, install dependencies and check PyTorch and GPU." + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "taGCP-gCgqX8", + "outputId": "ac882c35-7689-4f76-c690-962b4dc6e397" + }, + "source": [ + "!git clone --recurse-submodules https://github.com/mikel-brostrom/Yolov5_StrongSORT_OSNet.git # clone repo\n", + "%pip install -qr /content/requirements.txt # install dependencies\n", + "\n", + "import torch\n", + "from IPython.display import Image, clear_output # to display images\n", + "\n", + "clear_output()\n", + "print(f\"Setup complete. Using torch {torch.__version__} ({torch.cuda.get_device_properties(0).name if torch.cuda.is_available() else 'CPU'})\")" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Setup complete. Using torch 1.12.0+cu113 (Tesla T4)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1JQRVPMtA9Cr" + }, + "source": [ + "# Download data\n", + "\n", + "Get test video from repo and extract the first 2 seconds of it " + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4Acf_nRZ7yS6", + "outputId": "1e7c0beb-e685-41c5-e754-15f2cd6d8822" + }, + "source": [ + "%cd /content/Yolov5_StrongSORT_OSNet\n", + "\n", + "# get yolov5m model trained on the crowd-human dataset\n", + "!wget -nc https://github.com/mikel-brostrom/Yolov5_StrongSORT_OSNet/releases/download/v.2.0/crowdhuman_yolov5m.pt -O /content/Yolov5_StrongSORT_OSNet/yolov5/crowdhuman_yolov5m.pt\n", + "\n", + "# get the test video from the repo\n", + "!wget -nc https://github.com/Applied-Machine-Learning-2022/final-project-yeg-ua/raw/main/palace.mp4\n", + "\n", + "# copy video into another file\n", + "!ffmpeg -i palace.mp4 -c copy out.mp4" + ], + "execution_count": 19, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "/content/Yolov5_StrongSORT_OSNet\n", + "File ‘/content/Yolov5_StrongSORT_OSNet/yolov5/crowdhuman_yolov5m.pt’ already there; not retrieving.\n", + "--2022-07-30 02:29:28-- https://github.com/Applied-Machine-Learning-2022/final-project-yeg-ua/raw/main/palace.mp4\n", + "Resolving github.com (github.com)... 20.205.243.166\n", + "Connecting to github.com (github.com)|20.205.243.166|:443... connected.\n", + "HTTP request sent, awaiting response... 302 Found\n", + "Location: https://raw.githubusercontent.com/Applied-Machine-Learning-2022/final-project-yeg-ua/main/palace.mp4 [following]\n", + "--2022-07-30 02:29:28-- https://raw.githubusercontent.com/Applied-Machine-Learning-2022/final-project-yeg-ua/main/palace.mp4\n", + "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n", + "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 5909113 (5.6M) [application/octet-stream]\n", + "Saving to: ‘palace.mp4’\n", + "\n", + "palace.mp4 100%[===================>] 5.63M --.-KB/s in 0.02s \n", + "\n", + "2022-07-30 02:29:30 (300 MB/s) - ‘palace.mp4’ saved [5909113/5909113]\n", + "\n", + "ffmpeg version 3.4.11-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers\n", + " built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)\n", + " configuration: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared\n", + " libavutil 55. 78.100 / 55. 78.100\n", + " libavcodec 57.107.100 / 57.107.100\n", + " libavformat 57. 83.100 / 57. 83.100\n", + " libavdevice 57. 10.100 / 57. 10.100\n", + " libavfilter 6.107.100 / 6.107.100\n", + " libavresample 3. 7. 0 / 3. 7. 0\n", + " libswscale 4. 8.100 / 4. 8.100\n", + " libswresample 2. 9.100 / 2. 9.100\n", + " libpostproc 54. 7.100 / 54. 7.100\n", + "Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'palace.mp4':\n", + " Metadata:\n", + " major_brand : qt \n", + " minor_version : 0\n", + " compatible_brands: qt \n", + " creation_time : 2021-09-15T11:42:11.000000Z\n", + " com.apple.quicktime.software: {\"TEEditor\":\"0\"},{\"isFastImport\":\"0\"},{\"transType\":\"2\"},{\"source\":\"0\"}\n", + " com.apple.quicktime.copyright: 092f6a15fcac456ce7c736de12809a25\n", + " Duration: 00:00:10.97, start: -0.001451, bitrate: 4310 kb/s\n", + " Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 98 kb/s (default)\n", + " Metadata:\n", + " creation_time : 2021-09-15T11:42:11.000000Z\n", + " handler_name : Core Media Data Handler\n", + " Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 4207 kb/s, 30 fps, 30 tbr, 600 tbn, 1200 tbc (default)\n", + " Metadata:\n", + " creation_time : 2021-09-15T11:42:11.000000Z\n", + " handler_name : Core Media Data Handler\n", + " encoder : H.264\n", + "Output #0, mp4, to 'out.mp4':\n", + " Metadata:\n", + " major_brand : qt \n", + " minor_version : 0\n", + " compatible_brands: qt \n", + " com.apple.quicktime.copyright: 092f6a15fcac456ce7c736de12809a25\n", + " com.apple.quicktime.software: {\"TEEditor\":\"0\"},{\"isFastImport\":\"0\"},{\"transType\":\"2\"},{\"source\":\"0\"}\n", + " encoder : Lavf57.83.100\n", + " Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, q=2-31, 4207 kb/s, 30 fps, 30 tbr, 19200 tbn, 600 tbc (default)\n", + " Metadata:\n", + " creation_time : 2021-09-15T11:42:11.000000Z\n", + " handler_name : Core Media Data Handler\n", + " encoder : H.264\n", + " Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 98 kb/s (default)\n", + " Metadata:\n", + " creation_time : 2021-09-15T11:42:11.000000Z\n", + " handler_name : Core Media Data Handler\n", + "Stream mapping:\n", + " Stream #0:1 -> #0:0 (copy)\n", + " Stream #0:0 -> #0:1 (copy)\n", + "Press [q] to stop, [?] for help\n", + "frame= 329 fps=0.0 q=-1.0 Lsize= 5775kB time=00:00:10.93 bitrate=4326.7kbits/s speed=1.23e+03x \n", + "video:5632kB audio:133kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.180591%\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oqIP5shr9HQd" + }, + "source": [ + "## Run inference on video\n", + "\n", + "The ``cv2.imshow()`` and ``cv.imshow()`` functions from the [opencv-python](https://github.com/skvark/opencv-python) package are incompatible with Jupyter notebook; see https://github.com/jupyter/notebook/issues/3935. \n", + "\n", + "Hence we chose to save it to file in this notebook. Locally you can use the ``--show-vid`` flag in order visualize the tracking in real-time" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4yEraJfKhBku", + "outputId": "695487e5-86dc-4671-bbef-3adaaa046ad4" + }, + "source": [ + "!python track.py --yolo-weights /content/Yolov5_StrongSORT_OSNet/yolov5/crowdhuman_yolov5m.pt --classes 0 --strong-sort-weights osnet_x0_25_msmt17.pt --source out.mp4 --save-vid" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "strong_sort/deep/reid/torchreid/metrics/rank.py:12: UserWarning: Cython evaluation (very fast so highly recommended) is unavailable, now use python evaluation.\n", + " 'Cython evaluation (very fast so highly recommended) is '\n", + "\u001b[34m\u001b[1mtrack: \u001b[0myolo_weights=['/content/Yolov5_StrongSORT_OSNet/yolov5/crowdhuman_yolov5m.pt'], strong_sort_weights=osnet_x0_25_msmt17.pt, config_strongsort=strong_sort/configs/strong_sort.yaml, source=out.mp4, imgsz=[640, 640], conf_thres=0.5, iou_thres=0.5, max_det=1000, device=, show_vid=False, save_txt=False, save_conf=False, save_crop=False, save_vid=True, nosave=False, classes=[0], agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/track, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, hide_class=False, half=False, dnn=False\n", + "YOLOv5 🚀 2022-7-30 Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla T4, 15110MiB)\n", + "\n", + "Fusing layers... \n", + "Model summary: 308 layers, 21041679 parameters, 0 gradients\n", + "Downloading...\n", + "From: https://drive.google.com/uc?id=1Kkx2zW89jq_NETu4u42CFZTMVD5Hwm6e\n", + "To: /content/Yolov5_StrongSORT_OSNet/osnet_x0_25_msmt17.pt\n", + "100% 9.34M/9.34M [00:00<00:00, 158MB/s]\n", + "Model: osnet_x0_25\n", + "- params: 203,568\n", + "- flops: 82,316,000\n", + "Successfully loaded pretrained weights from \"osnet_x0_25_msmt17.pt\"\n", + "** The following layers are discarded due to unmatched keys or layer size: ['classifier.weight', 'classifier.bias']\n", + "video 1/1 (1/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.069s)\n", + "video 1/1 (2/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (3/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (4/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (5/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (6/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.071s)\n", + "video 1/1 (7/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (8/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (9/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (10/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (11/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (12/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.053s)\n", + "video 1/1 (13/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (14/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.053s)\n", + "video 1/1 (15/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (16/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (17/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (18/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (19/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (20/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (21/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (22/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (23/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (24/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (25/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (26/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (27/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (28/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (29/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (30/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (31/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (32/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (33/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (34/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (35/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (36/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (37/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (38/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (39/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (40/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.069s)\n", + "video 1/1 (41/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.078s)\n", + "video 1/1 (42/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.090s)\n", + "video 1/1 (43/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.084s)\n", + "video 1/1 (44/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.081s)\n", + "video 1/1 (45/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.093s)\n", + "video 1/1 (46/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.088s)\n", + "video 1/1 (47/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.089s)\n", + "video 1/1 (48/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.086s)\n", + "video 1/1 (49/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.089s)\n", + "video 1/1 (50/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.085s)\n", + "video 1/1 (51/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.025s), StrongSORT:(0.088s)\n", + "video 1/1 (52/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.024s), StrongSORT:(0.084s)\n", + "video 1/1 (53/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (54/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (55/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (56/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (57/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (58/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (59/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (60/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (61/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (62/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (63/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (64/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (65/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (66/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (67/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (68/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (69/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.071s)\n", + "video 1/1 (70/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (71/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (72/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (73/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (74/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (75/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (76/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (77/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (78/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (79/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.071s)\n", + "video 1/1 (80/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (81/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.053s)\n", + "video 1/1 (82/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (83/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (84/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (85/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (86/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (87/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (88/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (89/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (90/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (91/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (92/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (93/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (94/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (95/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.067s)\n", + "video 1/1 (96/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (97/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.071s)\n", + "video 1/1 (98/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (99/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (100/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (101/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (102/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (103/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (104/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (105/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (106/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.067s)\n", + "video 1/1 (107/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (108/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (109/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (110/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 22 persons, Done. YOLO:(0.023s), StrongSORT:(0.071s)\n", + "video 1/1 (111/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 22 persons, Done. YOLO:(0.023s), StrongSORT:(0.075s)\n", + "video 1/1 (112/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 21 persons, Done. YOLO:(0.023s), StrongSORT:(0.070s)\n", + "video 1/1 (113/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (114/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (115/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 21 persons, Done. YOLO:(0.023s), StrongSORT:(0.067s)\n", + "video 1/1 (116/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (117/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (118/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (119/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (120/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 21 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (121/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (122/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (123/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (124/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (125/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (126/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (127/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 21 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (128/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (129/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (130/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (131/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (132/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (133/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (134/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (135/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.071s)\n", + "video 1/1 (136/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (137/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (138/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (139/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (140/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (141/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (142/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (143/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (144/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (145/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (146/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (147/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (148/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (149/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (150/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (151/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (152/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (153/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (154/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (155/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (156/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (157/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.069s)\n", + "video 1/1 (158/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (159/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (160/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 13 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (161/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.053s)\n", + "video 1/1 (162/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.053s)\n", + "video 1/1 (163/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (164/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (165/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (166/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (167/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (168/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (169/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (170/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (171/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (172/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (173/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (174/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (175/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (176/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (177/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (178/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (179/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (180/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (181/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (182/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (183/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (184/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (185/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (186/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (187/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (188/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (189/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (190/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (191/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (192/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (193/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (194/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (195/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (196/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (197/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (198/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (199/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (200/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (201/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (202/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (203/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (204/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (205/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (206/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (207/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (208/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (209/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (210/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (211/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (212/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (213/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (214/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 21 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (215/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (216/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 21 persons, Done. YOLO:(0.023s), StrongSORT:(0.067s)\n", + "video 1/1 (217/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 21 persons, Done. YOLO:(0.023s), StrongSORT:(0.069s)\n", + "video 1/1 (218/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (219/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.064s)\n", + "video 1/1 (220/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (221/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (222/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (223/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (224/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (225/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (226/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (227/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (228/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 21 persons, Done. YOLO:(0.023s), StrongSORT:(0.071s)\n", + "video 1/1 (229/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (230/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (231/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (232/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (233/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (234/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.072s)\n", + "video 1/1 (235/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.074s)\n", + "video 1/1 (236/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.072s)\n", + "video 1/1 (237/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.067s)\n", + "video 1/1 (238/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.069s)\n", + "video 1/1 (239/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (240/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (241/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (242/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.069s)\n", + "video 1/1 (243/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.067s)\n", + "video 1/1 (244/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 20 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (245/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.070s)\n", + "video 1/1 (246/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (247/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (248/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.078s)\n", + "video 1/1 (249/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (250/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (251/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.071s)\n", + "video 1/1 (252/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (253/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (254/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (255/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (256/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (257/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (258/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (259/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.069s)\n", + "video 1/1 (260/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (261/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (262/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (263/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (264/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (265/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.072s)\n", + "video 1/1 (266/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (267/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (268/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (269/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (270/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 13 persons, Done. YOLO:(0.023s), StrongSORT:(0.052s)\n", + "video 1/1 (271/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (272/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (273/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (274/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (275/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (276/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (277/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (278/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (279/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (280/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (281/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (282/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (283/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (284/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (285/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (286/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (287/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (288/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (289/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (290/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.065s)\n", + "video 1/1 (291/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.066s)\n", + "video 1/1 (292/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 21 persons, Done. YOLO:(0.023s), StrongSORT:(0.078s)\n", + "video 1/1 (293/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 21 persons, Done. YOLO:(0.023s), StrongSORT:(0.072s)\n", + "video 1/1 (294/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.070s)\n", + "video 1/1 (295/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (296/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (297/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.063s)\n", + "video 1/1 (298/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (299/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (300/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (301/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 13 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (302/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.068s)\n", + "video 1/1 (303/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 11 persons, Done. YOLO:(0.023s), StrongSORT:(0.053s)\n", + "video 1/1 (304/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 13 persons, Done. YOLO:(0.023s), StrongSORT:(0.055s)\n", + "video 1/1 (305/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 12 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (306/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 12 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (307/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (308/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (309/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 12 persons, Done. YOLO:(0.023s), StrongSORT:(0.053s)\n", + "video 1/1 (310/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 12 persons, Done. YOLO:(0.023s), StrongSORT:(0.052s)\n", + "video 1/1 (311/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 13 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (312/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (313/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (314/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "video 1/1 (315/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.060s)\n", + "video 1/1 (316/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 18 persons, Done. YOLO:(0.023s), StrongSORT:(0.061s)\n", + "video 1/1 (317/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 19 persons, Done. YOLO:(0.023s), StrongSORT:(0.067s)\n", + "video 1/1 (318/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (319/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (320/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 17 persons, Done. YOLO:(0.023s), StrongSORT:(0.069s)\n", + "video 1/1 (321/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.059s)\n", + "video 1/1 (322/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (323/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (324/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 14 persons, Done. YOLO:(0.023s), StrongSORT:(0.054s)\n", + "video 1/1 (325/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 12 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (326/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 13 persons, Done. YOLO:(0.023s), StrongSORT:(0.057s)\n", + "video 1/1 (327/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 15 persons, Done. YOLO:(0.023s), StrongSORT:(0.056s)\n", + "video 1/1 (328/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.058s)\n", + "video 1/1 (329/329) /content/Yolov5_StrongSORT_OSNet/out.mp4: 384x640 16 persons, Done. YOLO:(0.023s), StrongSORT:(0.062s)\n", + "Speed: 0.4ms pre-process, 22.8ms inference, 1.2ms NMS, 61.9ms strong sort update per image at shape (1, 3, 640, 640)\n", + "Results saved to \u001b[1mruns/track/exp3\u001b[0m\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vd-CFrVGBoEU" + }, + "source": [ + "# Show results" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-ObuFb7dBwxK" + }, + "source": [ + "from IPython.display import HTML\n", + "from base64 import b64encode\n", + " \n", + "def show_video(video_path, video_width = 600):\n", + " \n", + " video_file = open(video_path, \"r+b\").read()\n", + " \n", + " video_url = f\"data:video/mp4;base64,{b64encode(video_file).decode()}\"\n", + " return HTML(f\"\"\"\"\"\")\n", + " \n", + "show_video('/content/Yolov5_StrongSORT_OSNet/runs/track/exp3/out.mp4')" + ], + "execution_count": 21, + "outputs": [] + } + ] +} \ No newline at end of file diff --git a/palace-test.gif b/palace-test.gif new file mode 100644 index 0000000..c9153c8 Binary files /dev/null and b/palace-test.gif differ diff --git a/palace.mp4 b/palace.mp4 new file mode 100644 index 0000000..db93ce2 Binary files /dev/null and b/palace.mp4 differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..52efeb3 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,60 @@ +absl-py==1.2.0 +beautifulsoup4==4.11.1 +cachetools==5.2.0 +certifi==2022.6.15 +charset-normalizer==2.1.0 +colorama==0.4.5 +cycler==0.11.0 +Cython==0.29.30 +easydict==1.9 +filelock==3.7.1 +flake8==4.0.1 +fonttools==4.34.4 +future==0.18.2 +gdown==4.5.1 +google-auth==2.9.1 +google-auth-oauthlib==0.4.6 +grpcio==1.47.0 +h5py==3.7.0 +idna==3.3 +imageio==2.20.0 +isort==4.3.21 +kiwisolver==1.4.4 +Markdown==3.4.1 +MarkupSafe==2.1.1 +matplotlib==3.5.2 +mccabe==0.6.1 +numpy==1.23.1 +oauthlib==3.2.0 +opencv-python==4.6.0.66 +packaging==21.3 +pandas==1.4.3 +Pillow==9.2.0 +protobuf==3.19.4 +pyasn1==0.4.8 +pyasn1-modules==0.2.8 +pycodestyle==2.8.0 +pyflakes==2.4.0 +pyparsing==3.0.9 +PySocks==1.7.1 +python-dateutil==2.8.2 +pytz==2022.1 +PyYAML==6.0 +requests==2.28.1 +requests-oauthlib==1.3.1 +rsa==4.9 +scipy==1.8.1 +seaborn==0.11.2 +six==1.16.0 +soupsieve==2.3.2.post1 +tb-nightly==2.10.0a20220726 +tensorboard-data-server==0.6.1 +tensorboard-plugin-wit==1.8.1 +torch==1.12.0 +torchvision==0.13.0 +tqdm==4.64.0 +typing_extensions==4.3.0 +urllib3==1.26.11 +Werkzeug==2.2.0 +yacs==0.1.8 +yapf==0.32.0 diff --git a/track.py b/track.py new file mode 100644 index 0000000..a24b969 --- /dev/null +++ b/track.py @@ -0,0 +1,332 @@ +import argparse + +import os +# limit the number of cpus used by high performance libraries +os.environ["OMP_NUM_THREADS"] = "1" +os.environ["OPENBLAS_NUM_THREADS"] = "1" +os.environ["MKL_NUM_THREADS"] = "1" +os.environ["VECLIB_MAXIMUM_THREADS"] = "1" +os.environ["NUMEXPR_NUM_THREADS"] = "1" + +import sys +import numpy as np +from pathlib import Path +import matplotlib.pyplot as plt +import torch +import torch.backends.cudnn as cudnn + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[0] # yolov5 strongsort root directory +WEIGHTS = ROOT / 'weights' + +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +if str(ROOT / 'yolov5') not in sys.path: + sys.path.append(str(ROOT / 'yolov5')) # add yolov5 ROOT to PATH +if str(ROOT / 'strong_sort') not in sys.path: + sys.path.append(str(ROOT / 'strong_sort')) # add strong_sort ROOT to PATH +ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +import logging +from yolov5.models.common import DetectMultiBackend +from yolov5.utils.dataloaders import VID_FORMATS, LoadImages, LoadStreams +from yolov5.utils.general import (LOGGER, check_img_size, non_max_suppression, scale_coords, check_requirements, cv2, + check_imshow, xyxy2xywh, increment_path, strip_optimizer, colorstr, print_args, check_file) +from yolov5.utils.torch_utils import select_device, time_sync +from yolov5.utils.plots import Annotator, colors, save_one_box +from strong_sort.utils.parser import get_config +from strong_sort.strong_sort import StrongSORT + +# remove duplicated stream handler to avoid duplicated logging +logging.getLogger().removeHandler(logging.getLogger().handlers[0]) + +@torch.no_grad() +def run( + source='0', + yolo_weights=WEIGHTS / 'yolov5m.pt', # model.pt path(s), + strong_sort_weights=WEIGHTS / 'osnet_x0_25_msmt17.pt', # model.pt path, + config_strongsort=ROOT / 'strong_sort/configs/strong_sort.yaml', + imgsz=(256, 256), # inference size (height, width) + conf_thres=0.5, # confidence threshold + iou_thres=0.45, # NMS IOU threshold + max_det=1000, # maximum detections per image + device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu + show_vid=False, # show results + save_txt=False, # save results to *.txt + save_conf=False, # save confidences in --save-txt labels + save_crop=False, # save cropped prediction boxes + save_vid=False, # save confidences in --save-txt labels + nosave=False, # do not save images/videos + classes=None, # filter by class: --class 0, or --class 0 2 3 + agnostic_nms=False, # class-agnostic NMS + augment=False, # augmented inference + visualize=False, # visualize features + update=False, # update all models + project=ROOT / 'runs/track', # save results to project/name + name='exp', # save results to project/name + exist_ok=False, # existing project/name ok, do not increment + line_thickness=3, # bounding box thickness (pixels) + hide_labels=False, # hide labels + hide_conf=False, # hide confidences + hide_class=False, # hide IDs + half=False, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference +): + + source = str(source) + save_img = not nosave and not source.endswith('.txt') # save inference images + is_file = Path(source).suffix[1:] in (VID_FORMATS) + is_url = source.lower().startswith(('rtsp://', 'rtmp://', 'http://', 'https://')) + webcam = source.isnumeric() or source.endswith('.txt') or (is_url and not is_file) + if is_url and is_file: + source = check_file(source) # download + + # Directories + if not isinstance(yolo_weights, list): # single yolo model + exp_name = yolo_weights.stem + elif type(yolo_weights) is list and len(yolo_weights) == 1: # single models after --yolo_weights + exp_name = Path(yolo_weights[0]).stem + else: # multiple models after --yolo_weights + exp_name = 'ensemble' + exp_name = name if name else exp_name + "_" + strong_sort_weights.stem + save_dir = increment_path(Path(project) / exp_name, exist_ok=exist_ok) # increment run + (save_dir / 'tracks' if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir + + # Load model + device = select_device(device) + model = DetectMultiBackend(yolo_weights, device=device, dnn=dnn, data=None, fp16=half) + stride, names, pt = model.stride, model.names, model.pt + imgsz = check_img_size(imgsz, s=stride) # check image size + + # Dataloader + if webcam: + show_vid = check_imshow() + cudnn.benchmark = True # set True to speed up constant image size inference + dataset = LoadStreams(source, img_size=imgsz, stride=stride, auto=pt) + nr_sources = len(dataset) + else: + dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt) + nr_sources = 1 + vid_path, vid_writer, txt_path = [None] * nr_sources, [None] * nr_sources, [None] * nr_sources + + # initialize StrongSORT + cfg = get_config() + cfg.merge_from_file(opt.config_strongsort) + + # Create as many strong sort instances as there are video sources + strongsort_list = [] + for i in range(nr_sources): + strongsort_list.append( + StrongSORT( + strong_sort_weights, + device, + max_dist=cfg.STRONGSORT.MAX_DIST, + max_iou_distance=cfg.STRONGSORT.MAX_IOU_DISTANCE, + max_age=cfg.STRONGSORT.MAX_AGE, + n_init=cfg.STRONGSORT.N_INIT, + nn_budget=cfg.STRONGSORT.NN_BUDGET, + mc_lambda=cfg.STRONGSORT.MC_LAMBDA, + ema_alpha=cfg.STRONGSORT.EMA_ALPHA, + + ) + ) + outputs = [None] * nr_sources + + # Run tracking + model.warmup(imgsz=(1 if pt else nr_sources, 3, *imgsz)) # warmup + dt, seen = [0.0, 0.0, 0.0, 0.0], 0 + curr_frames, prev_frames = [None] * nr_sources, [None] * nr_sources + for frame_idx, (path, im, im0s, vid_cap, s) in enumerate(dataset): + t1 = time_sync() + im = torch.from_numpy(im).to(device) + im = im.half() if half else im.float() # uint8 to fp16/32 + im /= 255.0 # 0 - 255 to 0.0 - 1.0 + if len(im.shape) == 3: + im = im[None] # expand for batch dim + t2 = time_sync() + dt[0] += t2 - t1 + + # Inference + visualize = increment_path(save_dir / Path(path[0]).stem, mkdir=True) if visualize else False + pred = model(im, augment=augment, visualize=visualize) + t3 = time_sync() + dt[1] += t3 - t2 + + # Apply NMS + pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det) + dt[2] += time_sync() - t3 + + # Process detections + for i, det in enumerate(pred): # detections per image + seen += 1 + if webcam: # nr_sources >= 1 + p, im0, _ = path[i], im0s[i].copy(), dataset.count + p = Path(p) # to Path + s += f'{i}: ' + txt_file_name = p.name + save_path = str(save_dir / p.name) # im.jpg, vid.mp4, ... + else: + p, im0, _ = path, im0s.copy(), getattr(dataset, 'frame', 0) + p = Path(p) # to Path + # video file + if source.endswith(VID_FORMATS): + txt_file_name = p.stem + save_path = str(save_dir / p.name) # im.jpg, vid.mp4, ... + # folder with imgs + else: + txt_file_name = p.parent.name # get folder name containing current img + save_path = str(save_dir / p.parent.name) # im.jpg, vid.mp4, ... + curr_frames[i] = im0 + + txt_path = str(save_dir / 'tracks' / txt_file_name) # im.txt + s += '%gx%g ' % im.shape[2:] # print string + imc = im0.copy() if save_crop else im0 # for save_crop + + annotator = Annotator(im0, line_width=2, pil=not ascii) + if cfg.STRONGSORT.ECC: # camera motion compensation + strongsort_list[i].tracker.camera_update(prev_frames[i], curr_frames[i]) + + if det is not None and len(det): + # Rescale boxes from img_size to im0 size + det[:, :4] = scale_coords(im.shape[2:], det[:, :4], im0.shape).round() + + # Print results + for c in det[:, -1].unique(): + n = (det[:, -1] == c).sum() # detections per class + cv2.putText(im0, "Objects being tracked: {}".format(n), (5, 35), + cv2.FONT_HERSHEY_COMPLEX_SMALL, 1.5, (0,0,0), 2) + s += f"{n} {names[int(c)]}{'s' * (n > 1)}, " # add to string + + xywhs = xyxy2xywh(det[:, 0:4]) + confs = det[:, 4] + clss = det[:, 5] + + # pass detections to strongsort + t4 = time_sync() + outputs[i] = strongsort_list[i].update(xywhs.cpu(), confs.cpu(), clss.cpu(), im0) + t5 = time_sync() + dt[3] += t5 - t4 + + # draw boxes for visualization + if len(outputs[i]) > 0: + for j, (output, conf) in enumerate(zip(outputs[i], confs)): + + bboxes = output[0:4] + id = output[4] + cls = output[5] + + if save_txt: + # to MOT format + bbox_left = output[0] + bbox_top = output[1] + bbox_w = output[2] - output[0] + bbox_h = output[3] - output[1] + # Write MOT compliant results to file + with open(txt_path + '.txt', 'a') as f: + f.write(('%g ' * 10 + '\n') % (frame_idx + 1, id, bbox_left, # MOT format + bbox_top, bbox_w, bbox_h, -1, -1, -1, i)) + + # initialize color map + cmap = plt.get_cmap('tab20b') + colors = [cmap(i)[:3] for i in np.linspace(0, 1, 20)] + + if save_vid or save_crop or show_vid: # Add bbox to image + c = int(cls) # integer class + id = int(id) # integer id + # count + # count_obj(id) + color = colors[id % len(colors)] + color = [i * 255 for i in color] + label = None if hide_labels else (f'{id} {names[c]}' if hide_conf else \ + (f'{id} {conf:.2f}' if hide_class else f'{id} {names[c]} {conf:.2f}')) + annotator.box_label(bboxes, label, color=color) + if save_crop: + txt_file_name = txt_file_name if (isinstance(path, list) and len(path) > 1) else '' + save_one_box(bboxes, imc, file=save_dir / 'crops' / txt_file_name / names[c] / f'{id}' / f'{p.stem}.jpg', BGR=True) + + LOGGER.info(f'{s}Done. YOLO:({t3 - t2:.3f}s), StrongSORT:({t5 - t4:.3f}s)') + + else: + strongsort_list[i].increment_ages() + LOGGER.info('No detections') + + # Stream results + im0 = annotator.result() + if show_vid: + cv2.imshow(str(p), im0) + cv2.waitKey(1) # 1 millisecond + + # Save results (image with detections) + if save_vid: + if vid_path[i] != save_path: # new video + vid_path[i] = save_path + if isinstance(vid_writer[i], cv2.VideoWriter): + vid_writer[i].release() # release previous video writer + if vid_cap: # video + fps = vid_cap.get(cv2.CAP_PROP_FPS) + w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + else: # stream + fps, w, h = 30, im0.shape[1], im0.shape[0] + save_path = str(Path(save_path).with_suffix('.mp4')) # force *.mp4 suffix on results videos + vid_writer[i] = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h)) + vid_writer[i].write(im0) + + prev_frames[i] = curr_frames[i] + + # Print results + t = tuple(x / seen * 1E3 for x in dt) # speeds per image + LOGGER.info(f'Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS, %.1fms strong sort update per image at shape {(1, 3, *imgsz)}' % t) + if save_txt or save_vid: + s = f"\n{len(list(save_dir.glob('tracks/*.txt')))} tracks saved to {save_dir / 'tracks'}" if save_txt else '' + LOGGER.info(f"Results saved to {colorstr('bold', save_dir)}{s}") + if update: + strip_optimizer(yolo_weights) # update model (to fix SourceChangeWarning) + + +def parse_opt(): + parser = argparse.ArgumentParser() + parser.add_argument('--yolo-weights', nargs='+', type=str, default=WEIGHTS / 'yolov5m.pt', help='model.pt path(s)') + parser.add_argument('--strong-sort-weights', type=str, default=WEIGHTS / 'osnet_x0_25_msmt17.pt') + parser.add_argument('--config-strongsort', type=str, default='strong_sort/configs/strong_sort.yaml') + parser.add_argument('--source', type=str, default='0', help='file/dir/URL/glob, 0 for webcam') + parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[256], help='inference size h,w') + parser.add_argument('--conf-thres', type=float, default=0.5, help='confidence threshold') + parser.add_argument('--iou-thres', type=float, default=0.5, help='NMS IoU threshold') + parser.add_argument('--max-det', type=int, default=1000, help='maximum detections per image') + parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') + parser.add_argument('--show-vid', action='store_true', help='display tracking video results') + parser.add_argument('--save-txt', action='store_true', help='save results to *.txt') + parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels') + parser.add_argument('--save-crop', action='store_true', help='save cropped prediction boxes') + parser.add_argument('--save-vid', action='store_true', help='save video tracking results') + parser.add_argument('--nosave', action='store_true', help='do not save images/videos') + # class 0 is person, 1 is bycicle, 2 is car... 79 is oven + parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --classes 0, or --classes 0 2 3') + parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS') + parser.add_argument('--augment', action='store_true', help='augmented inference') + parser.add_argument('--visualize', action='store_true', help='visualize features') + parser.add_argument('--update', action='store_true', help='update all models') + parser.add_argument('--project', default=ROOT / 'runs/track', help='save results to project/name') + parser.add_argument('--name', default='exp', help='save results to project/name') + parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') + parser.add_argument('--line-thickness', default=3, type=int, help='bounding box thickness (pixels)') + parser.add_argument('--hide-labels', default=False, action='store_true', help='hide labels') + parser.add_argument('--hide-conf', default=False, action='store_true', help='hide confidences') + parser.add_argument('--hide-class', default=False, action='store_true', help='hide IDs') + parser.add_argument('--half', action='store_true', help='use FP16 half-precision inference') + parser.add_argument('--dnn', action='store_true', help='use OpenCV DNN for ONNX inference') + opt = parser.parse_args() + opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 # expand + print_args(vars(opt)) + return opt + + +def main(opt): + check_requirements(requirements=ROOT / 'requirements.txt', exclude=('tensorboard', 'thop')) + run(**vars(opt)) + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) \ No newline at end of file diff --git a/yegcapstonepres.pptx.pdf b/yegcapstonepres.pptx.pdf new file mode 100644 index 0000000..5b2c92f Binary files /dev/null and b/yegcapstonepres.pptx.pdf differ