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.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dnt-0.3.3.tar.gz | 52.0 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dnt-0.3.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 103.9 MB
Release files / dnt-0.3.3.tar.gz
| Download URL | dnt-0.3.3.tar.gz |
|---|---|
| Size | 52.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9f255780e0f194221685e3688524c5eca34982231bd3d98507f885dc341fc346
|
|
BLAKE2b-256 checksum How to use checksums |
3420ee0bbb865087965dfeb59894af1768c86e0e589f217919619e41f5d8c793
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / dnt-0.3.3-py3-none-any.whl
| Download URL | dnt-0.3.3-py3-none-any.whl |
|---|---|
| Size | 52.0 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
906719bf939eb928e88dbb2cda90d53277d573692e12ca786cc4683ebee8282f
|
|
BLAKE2b-256 checksum How to use checksums |
83bb995ec4f188d873aaa7e03976b50cfff7c04b656cdea9fda98fc8abbaeadd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|