mas-ods 🚀
mas-ods is an ultra-lightweight, high-accuracy, single-class (person) object detection engine and model hub designed for extreme cost efficiency and high throughput on CPUs, edge devices, and GPUs.
Built from the ground up for production deployment, mas-ods runs exclusively on ONNX Runtime with pure NumPy/OpenCV pre/post-processing, automatic model downloading from Google Drive into a local .models/ directory, seamless CPU/GPU/AUTO hardware toggles, and 100% Apache-2.0 commercial compliance.
🌟 Key Features
- ⚡ Ultra-Lightweight & Fast: Sub-5ms latency and 150–250+ FPS on standard CPUs.
- 🌐 Dynamic Model Hub (Auto-Download): Simply pass the model name (e.g.
PersonDetector("yolox_nano")) and the model is automatically downloaded into.models/on first run. - 🎯 Single-Class Person Focus: Eliminates multi-class softmax/NMS overhead for maximum efficiency.
- 💻 Pure ONNX Runtime Core: No heavy PyTorch or PaddlePaddle dependencies needed during inference.
- 🔄 AUTO Hardware Acceleration: Choose between
device="auto","cpu","gpu","cuda", or"directml"with automatic graceful fallback. - 📊 Profiling & Diagnostics: Built-in latency (P50/P95/P99), FPS, and hardware execution provider benchmark suite.
- ⚖️ Commercial Friendly: Free from copyleft/AGPL constraints (Apache-2.0).
📦 Installation
# Using uv (recommended)
uv add mas-ods
# Or using pip
pip install mas-ods
🚀 Quickstart
1. Python API (Zero Setup — Auto Downloads Model)
import cv2
from mas_ods import PersonDetector
# 1. Initialize detector by model name (automatically downloads if not cached)
# Models available: "yolox_nano", "nanodet-plus-m_320", "nanodet-plus-m_416", "yolox_tiny", "yolox_s", "yolox_m"
detector = PersonDetector(
model="yolox_nano", # or pass custom local file path: "path/to/model.onnx"
device="auto", # "auto" (prioritizes GPU with CPU fallback) | "cpu" | "gpu"
confidence_threshold=0.40, # Filter out low-confidence predictions
iou_threshold=0.45, # NMS IoU threshold
)
# 2. Run inference on an image (filepath, numpy array, or PIL image)
image = cv2.imread("street.jpg")
result = detector.predict(image)
print(f"Persons detected: {result.count}")
print(f"Total time: {result.total_time_ms:.2f} ms ({result.fps:.1f} FPS)")
for box in result.boxes:
print(f"Coordinates: {box.xyxy} | Confidence: {box.score:.2f}")
# 3. Render bounding boxes and HUD overlay
annotated_frame = detector.render(image, result, show_fps=True)
cv2.imwrite("output.jpg", annotated_frame)
2. Real-Time Webcam / Video Stream
from mas_ods import PersonDetector, VideoPipeline
detector = PersonDetector(model="yolox_nano", device="auto")
pipeline = VideoPipeline(detector)
# Stream from webcam (0) or video file ("video.mp4")
pipeline.process_stream(source=0, show=True)
📋 Available Model Catalog
| Model Name | Input Shape | Model Size | Description |
|---|---|---|---|
yolox_nano |
416x416 | ~3.7 MB | Ultra-lightweight (0.91M params), 150–250+ FPS on CPU |
nanodet-plus-m_320 |
320x320 | ~4.8 MB | Ultra-fast anchor-free CPU detector |
nanodet-plus-m_416 |
416x416 | ~4.8 MB | High resolution anchor-free CPU detector |
nanodet-plus-m-1.5x_416 |
416x416 | ~9.9 MB | High accuracy anchor-free detector |
yolox_tiny |
416x416 | ~20.2 MB | Balanced speed and accuracy (~5M params) |
yolox_s |
640x640 | ~35.9 MB | Small detector (~9M params), great for GPU |
yolox_m |
640x640 | ~101.3 MB | Medium detector (~25M params) |
🖥️ Command-Line Interface (CLI)
List Available Models in the Catalog
mas-ods models
Check Hardware & Available Execution Providers
mas-ods devices
Benchmark Latency & Throughput (FPS)
mas-ods benchmark --model yolox_nano --device auto --iterations 100
Run Detection via CLI
mas-ods detect --model yolox_nano --source test.jpg --device auto --save output.jpg
📄 License
This project is licensed under the Apache License 2.0 - free for both commercial and personal use.
Metadata
Release files for mas-ods 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mas_ods-1.0.2.tar.gz | 45.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mas_ods-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 104.5 kB
Release files / mas_ods-1.0.2.tar.gz
| Download URL | mas_ods-1.0.2.tar.gz |
|---|---|
| Size | 45.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9e61867a904d82704f0ecb5850083aa2fd63132e08c7d67300ed7e333505a4ac
|
|
BLAKE2b-256 checksum How to use checksums |
16b446a286f364a0b5c76755efc68c3e797fa17c0f3cded109a20c0933fa2a4b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mas_ods-1.0.2-py3-none-any.whl
| Download URL | mas_ods-1.0.2-py3-none-any.whl |
|---|---|
| Size | 59.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
54853641d5adaeb7792386b12360706eef22a2bfb110118df3bbb569617a0cd6
|
|
BLAKE2b-256 checksum How to use checksums |
9b019edf1d4575562d7011affaed60c8bd91bf084db31ca66e7e0ba8f04ad332
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|