This web application built on ONNX Runtime Web implements YOLO's object detection inference capabilities
- π Object Detection - Precisely identify and locate various objects
- β‘ WebGPU Acceleration - Leverage the latest Web graphics API for enhanced performance
- π§ WASM (CPU) - Provide compatibility on devices that don't support WebGPU
The application supports multiple input types for object detection:
| Input Type | Format | Description | Use Case |
|---|---|---|---|
| π· Image | JPG, PNG | Upload and analyze static images | π Single image analysis, batch processing |
| πΉ Video | MP4 | Upload and process video files | π¬ Offline video analysis, content review |
| πΊ Live Camera | Real-time stream | Use device camera for live detection | π Real-time monitoring, interactive demos |
| Model | Input Size | Param. | Best For | License |
|---|---|---|---|---|
| YOLO11-N | 640 | 2.6M | π± Mobile devices & real-time applications | AGPL-3.0 (Ultralytics YOLO) |
| YOLO11-S | 640 | 9.4M | π₯οΈ Higher accuracy requirements | AGPL-3.0 (Ultralytics YOLO) |
| YOLO12-S | 640 | 9.3M | π± Mobile devices & real-time applications | AGPL-3.0 (Ultralytics YOLO) |
| YOLO12-N | 640 | 2.6M | π₯οΈ Higher accuracy requirements | AGPL-3.0 (Ultralytics YOLO) |
- Clone this repository
git clone https://github.com/nomi30701/yolo-object-detection-onnxruntime-web.git
- cd to the project directory
cd yolo-multi-task-onnxruntime-web- Install dependencies
yarn install
Start development server
yarn dev
Build the project
yarn build
To use a custom YOLO model, follow these steps:
Use Ultralytics or your preferred method to export your YOLO model to ONNX format. Ensure to use opset=12 for WebGPU compatibility.
from ultralytics import YOLO # Load your model model = YOLO("path/to/your/model.pt") # Export to ONNX model.export(format="onnx", opset=12, dynamic=True)
You can either:
- π Copy your ONNX model file to the
./public/models/directory - π Upload your model directly through the
**Add model**button in the web interface
In App.jsx, Ctrl+F search 'yolo11n-2.6M'
<select name="model-selector"> <option value="yolo11n">yolo11n-2.6M</option> <option value="yolo11s">yolo11s-9.4M</option> <option value="your-custom-model-name">Your Custom Model</option> </select>
Replace "your-custom-model-name" with the filename of your ONNX model.
Update the src/utils/yolo_classes.json file with the class names that your custom model uses. This file should contain a dict of strings representing the class labels.
For example:
{
"class": {
"0": "person",
"1": "bicycle",
"2": "car",
"3": "motorcycle",
"4": "airplane"
}
}Make sure the classes match exactly with those used during training of your custom model.
π WebGPU Support
Ensure you set
opset=12when exporting ONNX models, as this is required for WebGPU compatibility.
The web application provides two options for handling input image sizes, controlled by the imgsz_type setting:
-
Dynamic:
- When selected, the input image is used at its original size without resizing.
- Inference time may vary depending on the image resolution; larger images take longer to process.
-
Zero Pad:
- When selected, the input image is first padded with zero pixels to make it square (by adding padding to the right and bottom).
- The padded image is then resized to 640x640 pixels.
- This option provides a balance between accuracy and inference time, as it avoids extreme scaling while maintaining a predictable processing speed.
- Use this option for real-time applications.
β¨ Dynamic input
This requires that the YOLO model was exported with
dynamic=Trueto support variable input sizes.