Skip to main content

DNT: Dedection and Tracking

Python package for video-based traffic analysis: detection, tracking, labeling, and post-processing. Surrogate safety measures (SSMs) can be generated using the Traffic Surrogate Safety Analysis (TSSA) package.

Features

  • Object detection (dnt.detect.Detector, YOLO/RT-DETR backend).
  • Multi-object tracking (dnt.track.Tracker, BoxMOT backend).
  • Video labeling/visualization (dnt.label.Labeler).
  • Track post-processing:
    • RTS interpolation for trajectory gaps.
    • Tracklet linking (stitching broken IDs).

Requirements

  • OS: Ubuntu 20.04+ (or compatible Linux).
  • Python: 3.11+.
  • CUDA GPU recommended for detection/tracking speed.

Install dependencies from:

  • requirements.txt
  • pyproject.toml

Installation

python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt
pip install dnt

API Manual

https://wonstran.github.io/dnt/

Quick Workflow

1) Detection

from dnt.detect import Detector

detector = Detector(device="auto")
dets = detector.detect(
    input_video="/path/to/video.mp4",
    iou_file="/path/to/dets.txt",
    verbose=True,
)

For long videos, pass return_df=False to only write iou_file (rows are streamed to disk batch by batch, and an interrupted run resumes from /path/to/dets.txt.part on the next call).

2) Tracking

from dnt.track import ByteTrackConfig, Tracker

config = ByteTrackConfig()
tracker = Tracker(config=config, device="auto")
tracks = tracker.track(
    det_file="/path/to/dets.txt",
    out_file="/path/to/tracks.txt",
    video_file="/path/to/video.mp4",
)

Tuning trackers. Every tuning field defaults to None, meaning BoxMOT's own default. Set only what you want to change, e.g. ByteTrackConfig(track_thresh=0.5). Settings that a tracker ignores raise ValueError. See BoxMOT's documentation for parameter meanings: https://github.com/mikel-brostrom/boxmot

3) RTS interpolation (post-process)

from dnt.track.post_process import interpolate_tracks_rts

tracks_interp = interpolate_tracks_rts(
    track_file="/path/to/tracks.txt",
    output_file="/path/to/tracks_interp.txt",
    max_gap=30,        # max consecutive missing frames to fill
    interp_col="interp",
    verbose=True,
)

Notes:

  • interp == 1 means interpolated frame.
  • Real detections are treated as interp != 1 (supports legacy interp=-1 files).
  • Output file is written in track-file format (no CSV header), compatible with Labeler.draw_tracks.

4) Tracklet linking (ID stitching)

from dnt.track.post_process import link_tracklets

tracks_linked = link_tracklets(
    track_file="/path/to/tracks_interp.txt",
    output_file="/path/to/tracks_linked.txt",
    max_gap=20,        # candidate end-start frame gap
    verbose=True,
)

link_tracklets uses:

  • hard gates (time/class/size/motion/IoU),
  • cost matrix scoring,
  • global 1-to-1 assignment (Hungarian),
  • union-find chain merge and ID remap.

5) Labeling

from dnt.label import Labeler

labeler = Labeler()
labeler.draw_tracks(
    input_video="/path/to/video.mp4",
    output_video="/path/to/output_labeled.mp4",
    track_file="/path/to/tracks_linked.txt",
    verbose=True,
)

Modules

  • dnt.detect
  • dnt.track
  • dnt.label
  • dnt.track.post_process

Author

Zhenyu Wang (wonstran@hotmail.com)

License

MIT License. See LICENSE.md.

Metadata

Release files for dnt 0.3.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dnt 0.3.4
File Size Uploaded
dnt-0.3.4.tar.gz 52.0 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for dnt 0.3.4
File Interpreter ABI Platform
dnt-0.3.4-py3-none-any.whl Python 3 none any Details

Total release size: 104.0 MB

Release files / dnt-0.3.4.tar.gz

Download URL dnt-0.3.4.tar.gz
Size 52.0 MB
Tags Source
SHA-256 checksum
How to use checksums
b07fc4c7fe0d028e3fae46a4402f785524fff73c2620bd0880e0176aa204862a
BLAKE2b-256 checksum
How to use checksums
32fa5b88cc20adcd4988ebdf7443d33ba9c74d64f6bcf0f19ee4faaf3aed4692
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / dnt-0.3.4-py3-none-any.whl

Download URL dnt-0.3.4-py3-none-any.whl
Size 52.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
04fa6c55bba5b70b8533c77e3461b5bf26ca6dede86320c354e2ab2e57d057d7
BLAKE2b-256 checksum
How to use checksums
cff3998398eacef5ec483b0e704145144b490444415e11439a1b8c14a646be81
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release history Release notifications | RSS feed

This release

0.3.4 This release

2 release files

0.3.3

2 release files

0.3.2.1

1 release file

0.2.4

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page