Skip to main content

Beyond ADAS — collision anticipation inference for dashcam video

Project description

BADAS - Beyond ADAS

Python 3.10+ PyTorch 2.0+ PyPI

BADAS (Beyond ADAS) is a deep learning framework for predicting collision likelihood in dashcam video sequences. It supports multiple vision transformer backbones and deployment formats optimized for real-time inference.

Installation

pip install badas

Optional extras for faster video decoding or alternative backends:

pip install decord           # Fast video decoding (falls back to OpenCV)
pip install onnxruntime-gpu  # ONNX backend

Quick Start

from badas.inference import BADAS, BADASConfig

predictor = BADAS.from_pretrained("nexar-ai/BADAS-Open")

# Batch prediction on a video
results = predictor.predict_video("dashcam.mp4", stride=1)
for r in results:
    print(f"[{r['timestamp']:.2f}s]  {r['risk_level']:<6}  p={r['probability']:.3f}")

# Streaming / moving-window inference
for pred in predictor.predict_stream("dashcam.mp4", stride=1):
    if pred['probability'] > 0.7:
        print(f"WARNING: High collision risk at {pred['timestamp']:.2f}s")

Prediction Output

Each prediction is a dict:

{
    'frame_index': 100,
    'timestamp': 4.17,
    'probability': 0.823,
    'risk_level': 'high',   # 'low' | 'medium' | 'high'
    'smoothed': True,
}

Inference Backends

Format Load Notes
.ckpt / .pt BADAS("model.ckpt") Full model + config, supports torch.compile
.onnx BADAS("model.onnx") CPU/GPU via ONNX Runtime
.trt / .engine BADAS("model.trt") NVIDIA GPU, lowest latency

Configuration

from badas.inference import BADAS, BADASConfig, SmoothingConfig

config = BADASConfig(
    use_compile=True,       # torch.compile — slow first run, fast thereafter
    startup_ramp=True,      # yield predictions before the full window is buffered
    smoothing=SmoothingConfig(
        enabled=True,
        alpha_rise=0.7,     # smoothing when risk increases
        alpha_fall=0.3,     # smoothing when risk decreases
    ),
)
predictor = BADAS("model.ckpt", config=config)

Available Models

Open Source

Model Size Notes
nexar-ai/BADAS-Open ViT-L Publicly available
predictor = BADAS.from_pretrained("nexar-ai/BADAS-Open")

Commercial (Nexar)

Model Params Architecture Notes
nexar-ai/badas-2.0 330M ViT-L Best accuracy
nexar-ai/badas-2.0-flash 86M ViT-B Fast, default
nexar-ai/badas-2.0-flash-lite 22M ViT-S Fastest
nexar-ai/badas-1.0 330M ViT-L Previous version

To request access, visit nexar-ai.com/badas.

Inference API

For production use, BADAS is available as a hosted REST API at https://badas-api.corp.nexars.ai. The BADASClient handles uploads, async job queuing, SSE streaming, and progress bars.

Installation

requests and tqdm are included in the base badas package — no extra install needed.

Setup

from badas.client import BADASClient

client = BADASClient(api_key="nxr_live_...")

# Check that models are ready
health = client.health()
print(health["status"], health["models_loaded"])

Predict (blocking)

Submits an async job and polls until complete. Returns a list of prediction dicts.

preds = client.predict("dashcam.mp4")
for p in preds:
    print(f"[{p['timestamp']:.2f}s]  {p['risk_level']:<6}  p={p['probability']:.3f}")

Stream (window-by-window)

Yields each prediction as soon as its window is processed. Reconnects automatically if the gateway drops the connection.

for pred in client.stream("dashcam.mp4"):
    print(f"[{pred['timestamp']:.1f}s] {pred['risk_level']} ({pred['probability']:.0%})")

Async job (submit / poll / stream)

# Submit returns a job ID immediately — processing runs in the background
job_id = client.submit("dashcam.mp4")

# Stream results as they arrive
for pred in client.stream_job(job_id):
    ...

# Or wait for completion and get all results at once
preds = client.poll_job(job_id)

Inference options

Parameter Default Description
model badas-2.0-flash Model ID (see table above)
stride 1 Window stride in model-fps frames
threshold 0.75 Risk score that triggers heatmaps / VLM descriptions
heatmaps "none" "none" | "threshold" | "always"
describe False VLM hazard description on trigger windows (auto-sets heatmaps="threshold")
include_maps False Include raw hazard_map / attention_map arrays
progress True Show tqdm progress bar (adapts to notebook / CLI)

All options are available on predict, stream, and submit.

Heatmaps and VLM descriptions

import numpy as np

for pred in client.stream(
    "dashcam.mp4",
    describe=True,    # VLM hazard description for high-risk windows
    threshold=0.8,    # trigger threshold for heatmaps + descriptions
    include_maps=True,
):
    if pred.get("hazard_map") is not None:
        pred["hazard_map"] = np.array(pred["hazard_map"])  # H×W float array
    if pred.get("description"):
        print(f"[{pred['timestamp']:.1f}s] {pred['description']}")

Large files (> 50 MB)

Files above 50 MB are automatically uploaded to GCS via a signed URL before inference — no changes needed in calling code.

Model comparison

for model_id in ["nexar-ai/badas-2.0", "nexar-ai/badas-2.0-flash", "nexar-ai/badas-2.0-flash-lite"]:
    preds = client.predict("dashcam.mp4", model=model_id)
    peak  = max(p["probability"] for p in preds)
    print(f"{model_id}: {len(preds)} windows, peak={peak:.3f}")

Available models

Model Params Architecture Notes
nexar-ai/badas-2.0 330M ViT-L Best accuracy
nexar-ai/badas-2.0-flash 86M ViT-B Fast, default
nexar-ai/badas-2.0-flash-lite 22M ViT-S Fastest
nexar-ai/badas-1.0 330M ViT-L Previous version

Citation

@article{goldshmidt2025badas,
  title={BADAS: Context Aware Collision Prediction Using Real-World Dashcam Data},
  author={Goldshmidt, Roni and Scott, Hamish and Niccolini, Lorenzo and
          Zhu, Shizhan and Moura, Daniel and Zvitia, Orly},
  journal={arXiv preprint},
  year={2025}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

badas-1.1.2-py3-none-any.whl (245.1 kB view details)

Uploaded Python 3

File details

Details for the file badas-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: badas-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 245.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.9

File hashes

Hashes for badas-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cdbd029ed967451ab350568331bd845fc9f066cc92cd16cd54aa696ef85bda72
MD5 48eb60a9230cebbdac805374f5bd62c6
BLAKE2b-256 fc9f61060ddd2be70e4adfc2b3f7328ba478aab04e92619fa78d2a04328999cd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page