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.txtpyproject.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 == 1means interpolated frame.- Real detections are treated as
interp != 1(supports legacyinterp=-1files). - 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.detectdnt.trackdnt.labeldnt.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)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dnt-0.3.4.tar.gz | 52.0 MB | Without provenance | Details for dnt-0.3.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| dnt-0.3.4-py3-none-any.whl | Python 3 | none | any | Details for dnt-0.3.4-py3-none-any.whl |
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
|
Security for dnt 0.3.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.