trap/test_tracker.ipynb

575 lines
40 KiB
Plaintext
Raw Normal View History

2024-04-25 16:31:51 +02:00
{
"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": [
"<IPython.core.display.Markdown object>"
]
},
"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.6
"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.
"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
}