{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_1584053/4159269788.py:4: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from tqdm.autonotebook import tqdm\n" ] } ], "source": [ "import cv2\n", "from pathlib import Path\n", "import numpy as np\n", "from tqdm.autonotebook import tqdm\n", "from trap.frame_emitter import DetectionState, Frame, Detection, Track" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[PosixPath('../DATASETS/hof/webcam20240110-4.m4v'),\n", " PosixPath('../DATASETS/hof/webcam20231103-4.m4v'),\n", " PosixPath('../DATASETS/hof/webcam20231103-2.m4v'),\n", " PosixPath('../DATASETS/hof/webcam20231103-3.m4v'),\n", " PosixPath('../DATASETS/hof/webcam20240110-2.m4v'),\n", " PosixPath('../DATASETS/hof/webcam20240111-2.m4v'),\n", " PosixPath('../DATASETS/hof/webcam20240111-1.m4v'),\n", " PosixPath('../DATASETS/hof/webcam20240110-3.m4v'),\n", " PosixPath('../DATASETS/hof/webcam20240110-1.m4v'),\n", " PosixPath('../DATASETS/hof/webcam20240111-3.m4v')]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "video_srcs = list(Path('../DATASETS/hof/').glob('*.m4v'))\n", "\n", "video_srcs" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import torch\n", "\n", "\n", "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import collections\n", "from torchvision.models.detection import maskrcnn_resnet50_fpn_v2, MaskRCNN_ResNet50_FPN_V2_Weights, KeypointRCNN_ResNet50_FPN_Weights, keypointrcnn_resnet50_fpn\n", "from deep_sort_realtime.deepsort_tracker import DeepSort\n", "from ultralytics import YOLO\n", "from ultralytics.engine.results import Results as YOLOResult\n", "\n", "def tracker(frame_generator: collections.abc.Iterable[Frame]) -> collections.abc.Iterable[Frame]:\n", " first_frame: Frame = frame_generator.__next__()\n", "\n", " t = torch.from_numpy(cv2.cvtColor(first_frame.img, cv2.COLOR_BGR2RGB))\n", " # change axes of image loaded image to be compatilbe with torch.io.read_image (which has C,W,H format instead of W,H,C)\n", " t = t.permute(2, 0, 1)\n", "\n", " # weights =KeypointRCNN_ResNet50_FPN_Weights.DEFAULT\n", " # model = keypointrcnn_resnet50_fpn(weights=weights, box_score_thresh=0.3)\n", "\n", " model = YOLO('EXPERIMENTS/yolov8x.pt')\n", "\n", " # weights = MaskRCNN_ResNet50_FPN_V2_Weights.COCO_V1\n", " # model = maskrcnn_resnet50_fpn_v2(weights=weights, box_score_thresh=0.50)\n", " # model.to(device)\n", " # # Put the model in inference mode\n", " # model.eval()\n", "\n", " # Get the transforms for the model's weights\n", " # preprocess = weights.transforms().to(device)\n", " # mot_tracker = DeepSort(n_init=1, max_iou_distance=1, max_cosine_distance=0.7, max_age=20, nms_max_overlap=1,\n", " # # embedder='torchreid', embedder_wts=\"../MODELS/osnet_x1_0_imagenet.pth\"\n", " # )\n", " \n", " tracks = collections.defaultdict(lambda: Track())\n", "\n", "\n", " for frame in frame_generator:\n", " # detections: [Detection] = _resnet_track(model, preprocess, mot_tracker, frame.img, scale = 1)\n", " detections: [Detection] = _yolov8_track(frame.img, model)\n", " for detection in detections:\n", " track = tracks[detection.track_id]\n", " track.track_id = detection.track_id # for new tracks\n", "\n", " track.history.append(detection)\n", " \n", " active_track_ids = [d.track_id for d in detections]\n", " active_tracks = {t.track_id: t for t in tracks.values() if t.track_id in active_track_ids}\n", " # logger.info(f\"{trajectories}\")\n", " frame.tracks = active_tracks\n", " yield frame\n", "\n", "def _yolov8_track(img, model: YOLO) -> [Detection]:\n", " results: [YOLOResult] = model.track(img, persist=True, tracker=\"bytetrack.yaml\", verbose=False)\n", " if results[0].boxes is None or results[0].boxes.id is None:\n", " # work around https://github.com/ultralytics/ultralytics/issues/5968\n", " return []\n", " return [Detection(track_id, bbox[0]-.5*bbox[2], bbox[1]-.5*bbox[3], bbox[2], bbox[3], 1, DetectionState.Confirmed) for bbox, track_id in zip(results[0].boxes.xywh.cpu(), results[0].boxes.id.int().cpu().tolist())]\n", "\n", "def _resnet_track(model, preprocess, mot_tracker: DeepSort, img, scale: float = 1) -> [Detection]:\n", " if scale != 1:\n", " dsize = (int(img.shape[1] * scale), int(img.shape[0] * scale))\n", " img = cv2.resize(img, dsize)\n", " detections = _resnet_detect_persons(model, preprocess, img)\n", " tracks: [DeepsortTrack] = mot_tracker.update_tracks(detections, frame=img)\n", " return [Detection.from_deepsort(t).get_scaled(1/scale) for t in tracks]\n", "\n", "def _resnet_detect_persons(model, preprocess, frame) -> [Detection]:\n", " t = torch.from_numpy(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))\n", " # change axes of image loaded image to be compatilbe with torch.io.read_image (which has C,W,H format instead of W,H,C)\n", " t = t.permute(2, 0, 1)\n", "\n", " batch = preprocess(t)[None, :].to(device)\n", " # no_grad can be used on inference, should be slightly faster\n", " with torch.no_grad():\n", " predictions = model(batch)\n", " prediction = predictions[0] # we feed only one frame at once\n", "\n", " # TODO: check if we need e.g. cyclist\n", " mask = prediction['labels'] == 1 # if we want more than one label: np.isin(prediction['labels'], [1,86])\n", "\n", " scores = prediction['scores'][mask]\n", " labels = prediction['labels'][mask]\n", " boxes = prediction['boxes'][mask]\n", " \n", " # TODO: introduce confidence and NMS supression: https://github.com/cfotache/pytorch_objectdetecttrack/blob/master/PyTorch_Object_Tracking.ipynb\n", " # (which I _think_ we better do after filtering)\n", " # alternatively look at Soft-NMS https://towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c\n", "\n", " # dets - a numpy array of detections in the format [[x1,y1,x2,y2,score, label],[x1,y1,x2,y2,score, label],...]\n", " detections = np.array([np.append(bbox, [score, label]) for bbox, score, label in zip(boxes.cpu(), scores.cpu(), labels.cpu())])\n", " detections = detect_persons_deepsort_wrapper(detections)\n", " \n", " return detections\n", "\n", "def detect_persons_deepsort_wrapper(detections):\n", " \"\"\"make detect_persons() compatible with\n", " deep_sort_realtime tracker by going from ltrb to ltwh and\n", " different nesting\n", " \"\"\"\n", " return [([d[0], d[1], d[2]-d[0], d[3]-d[1]], d[4], d[5]) for d in detections]\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from tsmoothie.smoother import KalmanSmoother, ConvolutionSmoother\n", "\n", "def smooth_detections(frame_generator: collections.abc.Iterable[Frame]):\n", " smoother = ConvolutionSmoother(window_len=2, window_type='ones', copy=None)\n", " # smoother = KalmanSmoother(component='level_trend', \n", " # component_noise={'level':0.01, 'trend':0.01})\n", "\n", " for frame in frame_generator:\n", " new_tracks = []\n", " for track in frame.tracks.values():\n", " ls = [d.l for d in track.history]\n", " ts = [d.t for d in track.history]\n", " ws = [d.w for d in track.history]\n", " hs = [d.h for d in track.history]\n", " smoother.smooth(ls)\n", " ls = smoother.smooth_data[0]\n", " smoother.smooth(ts)\n", " ts = smoother.smooth_data[0]\n", " smoother.smooth(ws)\n", " ws = smoother.smooth_data[0]\n", " smoother.smooth(hs)\n", " hs = smoother.smooth_data[0]\n", " new_history = [Detection(d.track_id, l, t, w, h, d.conf, d.state) for l, t, w, h, d in zip(ls,ts,ws,hs, track.history)]\n", " new_track = Track(track.track_id, new_history, track.predictor_history, track.predictions)\n", " new_tracks.append(new_track)\n", " frame.tracks = {t.track_id: t for t in new_tracks}\n", " yield frame\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "\n", "import ffmpeg\n", "\n", "from trap.renderer import decorate_frame\n", "\n", "def streamer(frame_generator: collections.abc.Iterable[Frame]):\n", " render_url = \"zmq:tcp://0.0.0.0:5556\"\n", " frame_size = (1280,720)\n", " streaming_process = start_streaming(frame_size, render_url, 25)\n", " first_time = None\n", " try:\n", " for frame in frame_generator:\n", " if not first_time:\n", " first_time = frame.time\n", " # img = frame.img\n", " img = decorate_frame(frame, frame,first_time)\n", " streaming_process.stdin.write(img.tobytes())\n", " yield frame\n", " finally:\n", " streaming_process.stdin.close()\n", " streaming_process.wait()\n", "\n", "def start_streaming(frame_size, render_url, fps):\n", " return (\n", " ffmpeg\n", " .input('pipe:', format='rawvideo',codec=\"rawvideo\", pix_fmt='bgr24', s='{}x{}'.format(*frame_size))\n", " .output(\n", " render_url,\n", " #codec = \"copy\", # use same codecs of the original video\n", " codec='libx264',\n", " listen=1, # enables HTTP server\n", " pix_fmt=\"yuv420p\",\n", " preset=\"ultrafast\",\n", " tune=\"zerolatency\",\n", " g=f\"{fps*2}\",\n", " analyzeduration=\"2000000\",\n", " probesize=\"1000000\",\n", " f='mpegts'\n", " )\n", " .overwrite_output()\n", " .run_async(pipe_stdin=True)\n", " )" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def frame_generator(video_srcs: [Path]) -> collections.abc.Iterable[Frame]:\n", " i = 0\n", " for video_path in video_srcs:\n", " print(video_path)\n", " video = cv2.VideoCapture(str(video_path))\n", " fps = video.get(cv2.CAP_PROP_FPS)\n", "\n", " duration = video.get(cv2.CAP_PROP_FRAME_COUNT)\n", "\n", " start = video.set(cv2.CAP_PROP_POS_FRAMES, 1900+45000)\n", "\n", " if '-' in video_path.stem:\n", " path_stem = video_path.stem[:video_path.stem.rfind('-')]\n", " else:\n", " path_stem = video_path.stem\n", " path_stem += \"-homography\"\n", " homography_path = video_path.with_stem(path_stem).with_suffix('.txt')\n", " print(f'check homography file {homography_path}')\n", "\n", " if homography_path.exists():\n", " print(f'Found custom homography file! Using {homography_path}')\n", " video_H = np.loadtxt(homography_path, delimiter=',')\n", " else:\n", " video_H = None\n", "\n", " pbar = tqdm(total=duration)\n", " while True:\n", " pbar.update(1)\n", " ret, img = video.read()\n", "\n", " # seek to 0 if video has finished. Infinite loop\n", " if not ret:\n", " # now loading multiple files \n", " # TODO trigger detector reset\n", " break\n", " \n", " \n", " if \"DATASETS/hof/\" in str(video_path):\n", " # hack to mask out area\n", " cv2.rectangle(img, (0,0), (800,200), (0,0,0), -1)\n", "\n", " frame = Frame(index=i, img=img, H=video_H)\n", " i += 1\n", " yield frame\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from IPython.display import display, Markdown" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "view stream with `ffplay zmq:tcp://100.109.175.82:5556`" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "0it [00:00, ?it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "../DATASETS/hof/webcam20240110-4.m4v\n", "check homography file ../DATASETS/hof/webcam20240110-homography.txt\n", "Found custom homography file! Using ../DATASETS/hof/webcam20240110-homography.txt\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "ffmpeg version 5.1.4-0+deb12u1 Copyright (c) 2000-2023 the FFmpeg developers\n", " built with gcc 12 (Debian 12.2.0-14)\n", " configuration: --prefix=/usr --extra-version=0+deb12u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared\n", " libavutil 57. 28.100 / 57. 28.100\n", " libavcodec 59. 37.100 / 59. 37.100\n", " libavformat 59. 27.100 / 59. 27.100\n", " libavdevice 59. 7.100 / 59. 7.100\n", " libavfilter 8. 44.100 / 8. 44.100\n", " libswscale 6. 7.100 / 6. 7.100\n", " libswresample 4. 7.100 / 4. 7.100\n", " libpostproc 56. 6.100 / 56. 6.100\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "../DATASETS/hof/webcam20231103-4.m4v\n", "check homography file ../DATASETS/hof/webcam20231103-homography.txt\n", "Found custom homography file! Using ../DATASETS/hof/webcam20231103-homography.txt\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n", " 0%| | 1/33925.0 [00:00<1:31:33, 6.18it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "../DATASETS/hof/webcam20231103-2.m4v\n", "check homography file ../DATASETS/hof/webcam20231103-homography.txt\n", "Found custom homography file! Using ../DATASETS/hof/webcam20231103-homography.txt\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 1/3976.0 [00:00<04:53, 13.55it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "../DATASETS/hof/webcam20231103-3.m4v\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "check homography file ../DATASETS/hof/webcam20231103-homography.txt\n", "Found custom homography file! Using ../DATASETS/hof/webcam20231103-homography.txt\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n", " 0%| | 1/25419.0 [00:00<1:12:37, 5.83it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "../DATASETS/hof/webcam20240110-2.m4v\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "check homography file ../DATASETS/hof/webcam20240110-homography.txt\n", "Found custom homography file! Using ../DATASETS/hof/webcam20240110-homography.txt\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 1/21775.0 [00:00<14:52, 24.41it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "../DATASETS/hof/webcam20240111-2.m4v\n", "check homography file ../DATASETS/hof/webcam20240111-homography.txt\n", "Found custom homography file! Using ../DATASETS/hof/webcam20240111-homography.txt\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n", " 0%| | 1/32084.0 [00:00<35:41, 14.98it/s]\n", "\n", "\u001b[A" ] }, { "name": "stdout", "output_type": "stream", "text": [ "../DATASETS/hof/webcam20240111-1.m4v\n", "check homography file ../DATASETS/hof/webcam20240111-homography.txt\n", "Found custom homography file! Using ../DATASETS/hof/webcam20240111-homography.txt\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 2/32560.0 [00:00<49:54, 10.87it/s]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/ruben/suspicion/trap/.venv/lib/python3.10/site-packages/numpy/lib/function_base.py:520: RuntimeWarning: Mean of empty slice.\n", " avg = a.mean(axis, **keepdims_kw)\n", "/home/ruben/suspicion/trap/.venv/lib/python3.10/site-packages/numpy/core/_methods.py:129: RuntimeWarning: invalid value encountered in scalar divide\n", " ret = ret.dtype.type(ret / rcount)\n", "1it [00:03, 3.37s/it]\n", "Input #0, rawvideo, from 'pipe:':\n", " Duration: N/A, start: 0.000000, bitrate: 552960 kb/s\n", " Stream #0:0: Video: rawvideo (BGR[24] / 0x18524742), bgr24, 1280x720, 552960 kb/s, 25 tbr, 25 tbn\n", " 0%| | 2/53033.0 [00:02<19:17:32, 1.31s/it]Stream mapping:\n", " Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))[libx264 @ 0x5559f9bb1880] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2\n", "[libx264 @ 0x5559f9bb1880] profile Constrained Baseline, level 3.1, 4:2:0, 8-bit\n", "Output #0, mpegts, to 'zmq:tcp://0.0.0.0:5556':\n", " Metadata:\n", " encoder : Lavf59.27.100\n", " Stream #0:0: Video: h264, yuv420p(tv, progressive), 1280x720, q=2-31, 25 fps, 90k tbn\n", " Metadata:\n", " encoder : Lavc59.37.100 libx264\n", " Side data:\n", " cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A\n", "563it [00:12, 60.48it/s].0 size= 219kB time=00:00:00.00 bitrate=162978909.1kbits/s speed=N/A frame= 29 fps=0.0 q=16.0 size= 448kB time=00:00:01.12 bitrate=3279.2kbits/s speed=2.23x frame= 57 fps= 56 q=18.0 size= 963kB time=00:00:02.24 bitrate=3523.0kbits/s speed=2.21x frame= 86 fps= 57 q=13.0 size= 1140kB time=00:00:03.40 bitrate=2746.1kbits/s speed=2.24x frame= 117 fps= 58 q=13.0 size= 1521kB time=00:00:04.64 bitrate=2685.2kbits/s speed=2.28x frame= 147 fps= 58 q=13.0 size= 1554kB time=00:00:05.84 bitrate=2179.5kbits/s speed= 2.3x frame= 177 fps= 58 q=13.0 size= 1977kB time=00:00:07.04 bitrate=2301.1kbits/s speed=2.32x frame= 207 fps= 58 q=15.0 size= 2400kB time=00:00:08.24 bitrate=2386.5kbits/s speed=2.33x frame= 237 fps= 58 q=13.0 size= 2434kB time=00:00:09.44 bitrate=2112.4kbits/s speed=2.33x frame= 267 fps= 58 q=13.0 size= 2856kB time=00:00:10.64 bitrate=2199.0kbits/s speed=2.33x frame= 296 fps= 58 q=13.0 size= 2888kB time=00:00:11.80 bitrate=2005.0kbits/s speed=2.33x frame= 326 fps= 58 q=13.0 size= 3310kB time=00:00:13.00 bitrate=2085.7kbits/s speed=2.33x frame= 356 fps= 58 q=17.0 size= 3731kB time=00:00:14.20 bitrate=2152.2kbits/s speed=2.33x frame= 386 fps= 58 q=13.0 size= 3774kB time=00:00:15.40 bitrate=2007.6kbits/s speed=2.33x frame= 416 fps= 58 q=13.0 size= 4201kB time=00:00:16.60 bitrate=2073.3kbits/s speed=2.33x frame= 446 fps= 59 q=13.0 size= 4235kB time=00:00:17.80 bitrate=1949.2kbits/s speed=2.34x frame= 476 fps= 59 q=13.0 size= 4659kB time=00:00:19.00 bitrate=2008.9kbits/s speed=2.34x frame= 506 fps= 59 q=17.0 size= 5083kB time=00:00:20.20 bitrate=2061.2kbits/s speed=2.34x frame= 537 fps= 59 q=13.0 size= 5117kB time=00:00:21.44 bitrate=1955.0kbits/s speed=2.34x \n", "2440it [00:44, 59.73it/s]3.0 [00:12<14:28, 60.44it/s]frame= 568 fps= 59 q=13.0 size= 5539kB time=00:00:22.68 bitrate=2000.6kbits/s speed=2.35x frame= 598 fps= 59 q=13.0 size= 5570kB time=00:00:23.88 bitrate=1910.8kbits/s speed=2.35x frame= 628 fps= 59 q=13.0 size= 5993kB time=00:00:25.08 bitrate=1957.5kbits/s speed=2.35x frame= 658 fps= 59 q=14.0 size= 6415kB time=00:00:26.28 bitrate=1999.6kbits/s speed=2.35x frame= 688 fps= 59 q=13.0 size= 6449kB time=00:00:27.48 bitrate=1922.6kbits/s speed=2.35x frame= 719 fps= 59 q=13.0 size= 6874kB time=00:00:28.72 bitrate=1960.9kbits/s speed=2.35x frame= 749 fps= 59 q=13.0 size= 6908kB time=00:00:29.92 bitrate=1891.5kbits/s speed=2.35x frame= 779 fps= 59 q=15.0 size= 7353kB time=00:00:31.12 bitrate=1935.5kbits/s speed=2.35x frame= 808 fps= 59 q=15.0 size= 7817kB time=00:00:32.28 bitrate=1983.7kbits/s speed=2.35x frame= 838 fps= 59 q=13.0 size= 7863kB time=00:00:33.48 bitrate=1924.0kbits/s speed=2.35x frame= 869 fps= 59 q=13.0 size= 8268kB time=00:00:34.72 bitrate=1950.8kbits/s speed=2.35x frame= 899 fps= 59 q=13.0 size= 8310kB time=00:00:35.92 bitrate=1895.2kbits/s speed=2.36x frame= 929 fps= 59 q=13.0 size= 8734kB time=00:00:37.12 bitrate=1927.4kbits/s speed=2.36x frame= 959 fps= 59 q=14.0 size= 9157kB time=00:00:38.32 bitrate=1957.6kbits/s speed=2.35x frame= 989 fps= 59 q=13.0 size= 9193kB time=00:00:39.52 bitrate=1905.5kbits/s speed=2.35x frame= 1019 fps= 59 q=13.0 size= 9617kB time=00:00:40.72 bitrate=1934.8kbits/s speed=2.35x frame= 1049 fps= 59 q=13.0 size= 9649kB time=00:00:41.92 bitrate=1885.7kbits/s speed=2.35x frame= 1079 fps= 59 q=13.0 size= 10073kB time=00:00:43.12 bitrate=1913.6kbits/s speed=2.36x frame= 1109 fps= 59 q=14.0 size= 10496kB time=00:00:44.32 bitrate=1940.1kbits/s speed=2.36x frame= 1138 fps= 59 q=13.0 size= 10527kB time=00:00:45.48 bitrate=1896.2kbits/s speed=2.36x frame= 1168 fps= 59 q=13.0 size= 10951kB time=00:00:46.68 bitrate=1921.8kbits/s speed=2.36x frame= 1198 fps= 59 q=13.0 size= 10984kB time=00:00:47.88 bitrate=1879.3kbits/s speed=2.36x frame= 1227 fps= 59 q=14.0 size= 11436kB time=00:00:49.04 bitrate=1910.4kbits/s speed=2.35x frame= 1256 fps= 59 q=19.0 size= 11893kB time=00:00:50.20 bitrate=1940.8kbits/s speed=2.35x frame= 1284 fps= 59 q=15.0 size= 12077kB time=00:00:51.32 bitrate=1927.8kbits/s speed=2.35x frame= 1313 fps= 59 q=14.0 size= 12535kB time=00:00:52.48 bitrate=1956.7kbits/s speed=2.35x frame= 1342 fps= 59 q=14.0 size= 12608kB time=00:00:53.64 bitrate=1925.5kbits/s speed=2.35x frame= 1371 fps= 59 q=14.0 size= 13039kB time=00:00:54.80 bitrate=1949.1kbits/s speed=2.35x frame= 1401 fps= 59 q=11.0 size= 13466kB time=00:00:56.00 bitrate=1969.9kbits/s speed=2.35x frame= 1430 fps= 59 q=13.0 size= 13524kB time=00:00:57.16 bitrate=1938.2kbits/s speed=2.35x frame= 1460 fps= 59 q=14.0 size= 13947kB time=00:00:58.36 bitrate=1957.8kbits/s speed=2.35x frame= 1490 fps= 59 q=13.0 size= 14007kB time=00:00:59.56 bitrate=1926.6kbits/s speed=2.35x frame= 1520 fps= 59 q=14.0 size= 14443kB time=00:01:00.76 bitrate=1947.3kbits/s speed=2.35x frame= 1550 fps= 59 q=14.0 size= 14509kB time=00:01:01.96 bitrate=1918.4kbits/s speed=2.35x frame= 1580 fps= 59 q=13.0 size= 14927kB time=00:01:03.16 bitrate=1936.1kbits/s speed=2.35x frame= 1611 fps= 59 q=13.0 size= 15341kB time=00:01:04.40 bitrate=1951.5kbits/s speed=2.35x frame= 1641 fps= 59 q=13.0 size= 15384kB time=00:01:05.60 bitrate=1921.1kbits/s speed=2.35x frame= 1671 fps= 59 q=13.0 size= 15803kB time=00:01:06.80 bitrate=1938.0kbits/s speed=2.35x frame= 1701 fps= 59 q=11.0 size= 16221kB time=00:01:08.00 bitrate=1954.1kbits/s speed=2.35x frame= 1732 fps= 59 q=14.0 size= 16288kB time=00:01:09.24 bitrate=1927.1kbits/s speed=2.35x frame= 1762 fps= 59 q=14.0 size= 16715kB time=00:01:10.44 bitrate=1943.9kbits/s speed=2.35x frame= 1792 fps= 59 q=14.0 size= 16803kB time=00:01:11.64 bitrate=1921.4kbits/s speed=2.35x frame= 1821 fps= 59 q=14.0 size= 17231kB time=00:01:12.80 bitrate=1939.0kbits/s speed=2.35x frame= 1851 fps= 59 q=11.0 size= 17668kB time=00:01:14.00 bitrate=1955.9kbits/s speed=2.35x frame= 1881 fps= 59 q=14.0 size= 17729kB time=00:01:15.20 bitrate=1931.3kbits/s speed=2.35x frame= 1911 fps= 59 q=15.0 size= 18173kB time=00:01:16.40 bitrate=1948.6kbits/s speed=2.35x frame= 1941 fps= 59 q=14.0 size= 18273kB time=00:01:17.60 bitrate=1929.1kbits/s speed=2.35x frame= 1971 fps= 59 q=14.0 size= 18703kB time=00:01:18.80 bitrate=1944.4kbits/s speed=2.35x frame= 2001 fps= 59 q=11.0 size= 19137kB time=00:01:20.00 bitrate=1959.6kbits/s speed=2.35x frame= 2031 fps= 59 q=13.0 size= 19190kB time=00:01:21.20 bitrate=1936.0kbits/s speed=2.35x frame= 2061 fps= 59 q=14.0 size= 19614kB time=00:01:22.40 bitrate=1950.0kbits/s speed=2.35x frame= 2091 fps= 59 q=13.0 size= 19669kB time=00:01:23.60 bitrate=1927.4kbits/s speed=2.35x frame= 2121 fps= 59 q=14.0 size= 20092kB time=00:01:24.80 bitrate=1941.0kbits/s speed=2.35x frame= 2151 fps= 59 q=11.0 size= 20525kB time=00:01:26.00 bitrate=1955.1kbits/s speed=2.35x frame= 2180 fps= 59 q=13.0 size= 20579kB time=00:01:27.16 bitrate=1934.2kbits/s speed=2.35x frame= 2209 fps= 59 q=14.0 size= 20988kB time=00:01:28.32 bitrate=1946.8kbits/s speed=2.35x frame= 2238 fps= 59 q=13.0 size= 21036kB time=00:01:29.48 bitrate=1925.9kbits/s speed=2.35x frame= 2267 fps= 59 q=13.0 size= 21473kB time=00:01:30.64 bitrate=1940.7kbits/s speed=2.35x frame= 2296 fps= 59 q=13.0 size= 21523kB time=00:01:31.80 bitrate=1920.7kbits/s speed=2.35x frame= 2325 fps= 59 q=13.0 size= 21945kB time=00:01:32.96 bitrate=1933.9kbits/s speed=2.35x frame= 2354 fps= 59 q=20.0 size= 22367kB time=00:01:34.12 bitrate=1946.8kbits/s speed=2.35x frame= 2384 fps= 59 q=13.0 size= 22430kB time=00:01:35.32 bitrate=1927.7kbits/s speed=2.35x frame= 2414 fps= 59 q=13.0 size= 22845kB time=00:01:36.52 bitrate=1938.9kbits/s speed=2.35x \n", "3332it [01:00, 55.40it/s]33.0 [00:44<14:07, 59.68it/s]frame= 2444 fps= 59 q=13.0 size= 22894kB time=00:01:37.72 bitrate=1919.2kbits/s speed=2.35x frame= 2474 fps= 59 q=13.0 size= 23312kB time=00:01:38.92 bitrate=1930.6kbits/s speed=2.35x frame= 2504 fps= 59 q=20.0 size= 23733kB time=00:01:40.12 bitrate=1941.9kbits/s speed=2.35x frame= 2534 fps= 59 q=14.0 size= 23783kB time=00:01:41.32 bitrate=1922.9kbits/s speed=2.35x frame= 2564 fps= 59 q=14.0 size= 24217kB time=00:01:42.52 bitrate=1935.1kbits/s speed=2.35x frame= 2594 fps= 59 q=14.0 size= 24289kB time=00:01:43.72 bitrate=1918.4kbits/s speed=2.35x frame= 2624 fps= 59 q=13.0 size= 24707kB time=00:01:44.92 bitrate=1929.1kbits/s speed=2.35x frame= 2654 fps= 59 q=20.0 size= 25119kB time=00:01:46.12 bitrate=1939.1kbits/s speed=2.35x frame= 2684 fps= 59 q=14.0 size= 25166kB time=00:01:47.32 bitrate=1921.0kbits/s speed=2.35x frame= 2714 fps= 59 q=13.0 size= 25583kB time=00:01:48.52 bitrate=1931.2kbits/s speed=2.35x frame= 2743 fps= 59 q=13.0 size= 25619kB time=00:01:49.68 bitrate=1913.5kbits/s speed=2.35x frame= 2772 fps= 59 q=13.0 size= 26044kB time=00:01:50.84 bitrate=1924.9kbits/s speed=2.35x frame= 2801 fps= 59 q=10.0 size= 26473kB time=00:01:52.00 bitrate=1936.3kbits/s speed=2.35x frame= 2830 fps= 59 q=13.0 size= 26507kB time=00:01:53.16 bitrate=1918.9kbits/s speed=2.35x frame= 2859 fps= 59 q=14.0 size= 26930kB time=00:01:54.32 bitrate=1929.8kbits/s speed=2.35x frame= 2889 fps= 59 q=13.0 size= 26965kB time=00:01:55.52 bitrate=1912.2kbits/s speed=2.35x frame= 2919 fps= 59 q=13.0 size= 27393kB time=00:01:56.72 bitrate=1922.5kbits/s speed=2.34x frame= 2949 fps= 59 q=13.0 size= 27427kB time=00:01:57.92 bitrate=1905.4kbits/s speed=2.35x frame= 2979 fps= 59 q=13.0 size= 27854kB time=00:01:59.12 bitrate=1915.6kbits/s speed=2.35x frame= 3009 fps= 59 q=14.0 size= 28279kB time=00:02:00.32 bitrate=1925.4kbits/s speed=2.35x frame= 3039 fps= 59 q=13.0 size= 28315kB time=00:02:01.52 bitrate=1908.8kbits/s speed=2.35x frame= 3068 fps= 59 q=13.0 size= 28746kB time=00:02:02.68 bitrate=1919.5kbits/s speed=2.35x frame= 3097 fps= 59 q=13.0 size= 28792kB time=00:02:03.84 bitrate=1904.6kbits/s speed=2.34x frame= 3127 fps= 59 q=13.0 size= 29223kB time=00:02:05.04 bitrate=1914.5kbits/s speed=2.34x frame= 3157 fps= 59 q=15.0 size= 29654kB time=00:02:06.24 bitrate=1924.3kbits/s speed=2.34x frame= 3187 fps= 59 q=13.0 size= 29693kB time=00:02:07.44 bitrate=1908.7kbits/s speed=2.34x frame= 3248 fps= 59 q=13.0 size= 30172kB time=00:02:09.88 bitrate=1903.1kbits/s speed=2.35x frame= 3279 fps= 59 q=14.0 size= 30595kB time=00:02:11.12 bitrate=1911.5kbits/s speed=2.35x frame= 3308 fps= 59 q=17.0 size= 31066kB time=00:02:12.28 bitrate=1923.9kbits/s speed=2.35x \n", "4755it [01:24, 59.84it/s]33.0 [00:59<14:59, 55.25it/s]frame= 3336 fps= 59 q=17.0 size= 31251kB time=00:02:13.40 bitrate=1919.1kbits/s speed=2.34x frame= 3364 fps= 59 q=17.0 size= 31766kB time=00:02:14.52 bitrate=1934.5kbits/s speed=2.34x frame= 3394 fps= 59 q=13.0 size= 31870kB time=00:02:15.72 bitrate=1923.6kbits/s speed=2.34x frame= 3424 fps= 59 q=13.0 size= 32270kB time=00:02:16.92 bitrate=1930.7kbits/s speed=2.34x frame= 3454 fps= 59 q=20.0 size= 32694kB time=00:02:18.12 bitrate=1939.1kbits/s speed=2.34x frame= 3484 fps= 59 q=13.0 size= 32729kB time=00:02:19.32 bitrate=1924.5kbits/s speed=2.34x frame= 3514 fps= 59 q=13.0 size= 33157kB time=00:02:20.52 bitrate=1933.0kbits/s speed=2.34x frame= 3544 fps= 59 q=13.0 size= 33190kB time=00:02:21.72 bitrate=1918.5kbits/s speed=2.34x frame= 3574 fps= 59 q=13.0 size= 33617kB time=00:02:22.92 bitrate=1926.9kbits/s speed=2.34x frame= 3604 fps= 59 q=20.0 size= 34049kB time=00:02:24.12 bitrate=1935.4kbits/s speed=2.34x frame= 3634 fps= 59 q=13.0 size= 34083kB time=00:02:25.32 bitrate=1921.3kbits/s speed=2.34x frame= 3664 fps= 59 q=13.0 size= 34516kB time=00:02:26.52 bitrate=1929.8kbits/s speed=2.34x frame= 3694 fps= 59 q=13.0 size= 34563kB time=00:02:27.72 bitrate=1916.7kbits/s speed=2.34x frame= 3724 fps= 59 q=13.0 size= 34993kB time=00:02:28.92 bitrate=1924.9kbits/s speed=2.34x frame= 3753 fps= 59 q=23.0 size= 35417kB time=00:02:30.08 bitrate=1933.2kbits/s speed=2.34x frame= 3782 fps= 59 q=13.0 size= 35452kB time=00:02:31.24 bitrate=1920.3kbits/s speed=2.34x frame= 3812 fps= 59 q=13.0 size= 35879kB time=00:02:32.44 bitrate=1928.1kbits/s speed=2.34x frame= 3841 fps= 59 q=13.0 size= 35910kB time=00:02:33.60 bitrate=1915.2kbits/s speed=2.34x frame= 3870 fps= 59 q=13.0 size= 36332kB time=00:02:34.76 bitrate=1923.2kbits/s speed=2.34x frame= 3900 fps= 59 q=13.0 size= 36365kB time=00:02:35.96 bitrate=1910.1kbits/s speed=2.34x frame= 3929 fps= 59 q=13.0 size= 36788kB time=00:02:37.12 bitrate=1918.0kbits/s speed=2.34x frame= 3958 fps= 59 q=14.0 size= 37210kB time=00:02:38.28 bitrate=1925.9kbits/s speed=2.34x frame= 3987 fps= 59 q=13.0 size= 37242kB time=00:02:39.44 bitrate=1913.5kbits/s speed=2.34x frame= 4017 fps= 59 q=13.0 size= 37665kB time=00:02:40.64 bitrate=1920.8kbits/s speed=2.34x frame= 4048 fps= 59 q=13.0 size= 37698kB time=00:02:41.88 bitrate=1907.7kbits/s speed=2.34x frame= 4078 fps= 59 q=13.0 size= 38122kB time=00:02:43.08 bitrate=1915.0kbits/s speed=2.34x frame= 4108 fps= 59 q=14.0 size= 38543kB time=00:02:44.28 bitrate=1922.0kbits/s speed=2.34x frame= 4137 fps= 59 q=13.0 size= 38575kB time=00:02:45.44 bitrate=1910.1kbits/s speed=2.34x frame= 4166 fps= 59 q=13.0 size= 38997kB time=00:02:46.60 bitrate=1917.5kbits/s speed=2.34x frame= 4195 fps= 59 q=13.0 size= 39028kB time=00:02:47.76 bitrate=1905.8kbits/s speed=2.34x frame= 4224 fps= 59 q=13.0 size= 39449kB time=00:02:48.92 bitrate=1913.1kbits/s speed=2.34x frame= 4253 fps= 59 q=23.0 size= 39870kB time=00:02:50.08 bitrate=1920.4kbits/s speed=2.34x frame= 4282 fps= 59 q=13.0 size= 39901kB time=00:02:51.24 bitrate=1908.8kbits/s speed=2.34x frame= 4312 fps= 59 q=13.0 size= 40324kB time=00:02:52.44 bitrate=1915.6kbits/s speed=2.34x frame= 4343 fps= 59 q=13.0 size= 40357kB time=00:02:53.68 bitrate=1903.5kbits/s speed=2.34x frame= 4373 fps= 59 q=13.0 size= 40779kB time=00:02:54.88 bitrate=1910.2kbits/s speed=2.34x frame= 4403 fps= 59 q=23.0 size= 41202kB time=00:02:56.08 bitrate=1916.9kbits/s speed=2.34x frame= 4433 fps= 59 q=13.0 size= 41234kB time=00:02:57.28 bitrate=1905.4kbits/s speed=2.34x frame= 4463 fps= 59 q=13.0 size= 41657kB time=00:02:58.48 bitrate=1912.0kbits/s speed=2.34x frame= 4493 fps= 59 q=16.0 size= 41737kB time=00:02:59.68 bitrate=1902.9kbits/s speed=2.34x frame= 4521 fps= 59 q=17.0 size= 42261kB time=00:03:00.80 bitrate=1914.8kbits/s speed=2.34x frame= 4549 fps= 59 q=17.0 size= 42471kB time=00:03:01.92 bitrate=1912.5kbits/s speed=2.34x frame= 4579 fps= 59 q=13.0 size= 42898kB time=00:03:03.12 bitrate=1919.1kbits/s speed=2.34x frame= 4610 fps= 59 q=13.0 size= 43307kB time=00:03:04.36 bitrate=1924.3kbits/s speed=2.34x frame= 4640 fps= 59 q=13.0 size= 43339kB time=00:03:05.56 bitrate=1913.3kbits/s speed=2.34x frame= 4669 fps= 59 q=13.0 size= 43761kB time=00:03:06.72 bitrate=1919.9kbits/s speed=2.34x frame= 4699 fps= 59 q=13.0 size= 43793kB time=00:03:07.92 bitrate=1909.1kbits/s speed=2.34x frame= 4729 fps= 59 q=13.0 size= 44216kB time=00:03:09.12 bitrate=1915.3kbits/s speed=2.34x \n", "4876it [01:26, 58.23it/s]33.0 [01:23<13:25, 59.95it/s]frame= 4760 fps= 59 q=13.0 size= 44639kB time=00:03:10.36 bitrate=1921.0kbits/s speed=2.34x frame= 4791 fps= 59 q=13.0 size= 44672kB time=00:03:11.60 bitrate=1910.0kbits/s speed=2.34x frame= 4821 fps= 59 q=13.0 size= 45096kB time=00:03:12.80 bitrate=1916.1kbits/s speed=2.34x frame= 4851 fps= 59 q=10.0 size= 45520kB time=00:03:14.00 bitrate=1922.2kbits/s speed=2.34x \n", "4906it [01:27, 58.31it/s]33.0 [01:25<13:45, 58.35it/s]frame= 4881 fps= 59 q=13.0 size= 45552kB time=00:03:15.20 bitrate=1911.7kbits/s speed=2.34x \n", "4936it [01:27, 58.96it/s]33.0 [01:26<13:48, 58.08it/s]frame= 4911 fps= 59 q=13.0 size= 45977kB time=00:03:16.40 bitrate=1917.7kbits/s speed=2.34x \n", "5088it [01:30, 60.42it/s]33.0 [01:26<13:33, 59.15it/s]frame= 4941 fps= 59 q=13.0 size= 46009kB time=00:03:17.60 bitrate=1907.4kbits/s speed=2.34x frame= 4971 fps= 59 q=13.0 size= 46433kB time=00:03:18.80 bitrate=1913.4kbits/s speed=2.34x frame= 5001 fps= 59 q=10.0 size= 46858kB time=00:03:20.00 bitrate=1919.3kbits/s speed=2.34x frame= 5032 fps= 59 q=13.0 size= 46889kB time=00:03:21.24 bitrate=1908.8kbits/s speed=2.34x frame= 5063 fps= 59 q=13.0 size= 47314kB time=00:03:22.48 bitrate=1914.2kbits/s speed=2.34x \n", "5545it [01:37, 57.73it/s]33.0 [01:29<13:13, 60.42it/s]frame= 5094 fps= 59 q=13.0 size= 47350kB time=00:03:23.72 bitrate=1904.0kbits/s speed=2.34x frame= 5125 fps= 59 q=13.0 size= 47776kB time=00:03:24.96 bitrate=1909.5kbits/s speed=2.35x frame= 5156 fps= 59 q=17.0 size= 48199kB time=00:03:26.20 bitrate=1914.9kbits/s speed=2.35x frame= 5186 fps= 59 q=13.0 size= 48233kB time=00:03:27.40 bitrate=1905.1kbits/s speed=2.35x frame= 5216 fps= 59 q=13.0 size= 48655kB time=00:03:28.60 bitrate=1910.8kbits/s speed=2.35x frame= 5246 fps= 59 q=13.0 size= 48688kB time=00:03:29.80 bitrate=1901.1kbits/s speed=2.35x frame= 5276 fps= 59 q=13.0 size= 49110kB time=00:03:31.00 bitrate=1906.7kbits/s speed=2.35x frame= 5306 fps= 59 q=17.0 size= 49534kB time=00:03:32.20 bitrate=1912.3kbits/s speed=2.35x frame= 5336 fps= 59 q=13.0 size= 49565kB time=00:03:33.40 bitrate=1902.7kbits/s speed=2.35x frame= 5366 fps= 59 q=13.0 size= 49991kB time=00:03:34.60 bitrate=1908.3kbits/s speed=2.35x frame= 5396 fps= 59 q=13.0 size= 50029kB time=00:03:35.80 bitrate=1899.1kbits/s speed=2.35x frame= 5426 fps= 59 q=13.0 size= 50453kB time=00:03:37.00 bitrate=1904.7kbits/s speed=2.35x frame= 5456 fps= 59 q=17.0 size= 50876kB time=00:03:38.20 bitrate=1910.1kbits/s speed=2.35x frame= 5486 fps= 59 q=13.0 size= 50909kB time=00:03:39.40 bitrate=1900.9kbits/s speed=2.35x frame= 5516 fps= 59 q=13.0 size= 51334kB time=00:03:40.60 bitrate=1906.3kbits/s speed=2.35x \n", "5719it [01:40, 57.58it/s]33.0 [01:37<13:42, 57.75it/s]frame= 5545 fps= 59 q=13.0 size= 51365kB time=00:03:41.76 bitrate=1897.5kbits/s speed=2.35x frame= 5574 fps= 59 q=13.0 size= 51789kB time=00:03:42.92 bitrate=1903.2kbits/s speed=2.35x frame= 5604 fps= 59 q=20.0 size= 52215kB time=00:03:44.12 bitrate=1908.6kbits/s speed=2.35x frame= 5633 fps= 59 q=13.0 size= 52248kB time=00:03:45.28 bitrate=1899.9kbits/s speed=2.35x frame= 5662 fps= 59 q=13.0 size= 52672kB time=00:03:46.44 bitrate=1905.5kbits/s speed=2.35x frame= 5691 fps= 59 q=13.0 size= 52705kB time=00:03:47.60 bitrate=1897.0kbits/s speed=2.35x " ] } ], "source": [ "display(Markdown(\"view stream with `ffplay zmq:tcp://100.109.175.82:5556`\"))\n", "for detections in tqdm(streamer(smooth_detections(tracker(frame_generator(video_srcs))))):\n", "# for frame in frame_generator(video_srcs):\n", " # print(detections)\n", " pass\n", " # if len(detections):\n", " # print(detections)\n", " # break\n", "\n", " # break\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 2 }