YoloDotNet 1.4.0
See the version list below for details.
dotnet add package YoloDotNet --version 1.4.0
NuGet\Install-Package YoloDotNet -Version 1.4.0
<PackageReference Include="YoloDotNet" Version="1.4.0" />
paket add YoloDotNet --version 1.4.0
#r "nuget: YoloDotNet, 1.4.0"
// Install YoloDotNet as a Cake Addin #addin nuget:?package=YoloDotNet&version=1.4.0 // Install YoloDotNet as a Cake Tool #tool nuget:?package=YoloDotNet&version=1.4.0
YoloDotNet v1.4
YoloDotNet is a C# .NET 8 implementation of Yolov8 for detecting objects in images and videos using ML.NET and ONNX runtime with GPU acceleration using CUDA.
YoloDotNet supports the following:
✓ Classification
Categorize an image
✓ Object Detection
Detect multiple objects in a single image
✓ OOB Detection
OBB (Oriented Bounding Box), like Object Detection
but with rotated bounding boxes
✓ Segmentation
Separate detected objects using pixel masks
✓ Pose Estimation
Identifying location of specific keypoints in an image
Nuget
> dotnet add package YoloDotNet
Install CUDA (optional)
YoloDotNet with GPU-acceleration requires CUDA and cuDNN.
ℹ️ Before installing CUDA and cuDNN, make sure to verify the ONNX runtime's current compatibility with specific versions.
- Download and install CUDA
- Download cuDNN and follow the installation instructions
Export Yolov8 model to ONNX
Yolov8 model exported to ONNX format
Verify your model
using YoloDotNet;
// Instantiate a new Yolo object with your ONNX-model
using var yolo = new Yolo(@"path\to\model.onnx");
Console.WriteLine(yolo.OnnxModel.ModelType); // Outputs modeltype...
Example - Image
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using YoloDotNet;
using YoloDotNet.Extensions;
// Instantiate a new Yolo object with your ONNX-model and CUDA (default)
using var yolo = new Yolo(@"path\to\your_model.onnx");
// Load image
using var image = Image.Load<Rgba32>(@"path\to\image.jpg");
// Run
var results = yolo.RunClassification(image, 5); // Top 5 classes
//var results = yolo.RunObjectDetection(image, 0.25);
//var results = yolo.RunObbDetection(options, 0.25);
//var results = yolo.RunSegmentation(image, 0.25);
//var results = yolo.RunPoseEstimation(image, 0.25);
image.Draw(results);
image.Save(@"path\to\save\image.jpg");
Example - Video
[!IMPORTANT] Processing video requires FFmpeg and FFProbe
- Download FFMPEG
- Add FFmpeg and ffprobe to the Path-variable in your Environment Variables
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using YoloDotNet;
using YoloDotNet.Extensions;
// Instantiate a new Yolo object with your ONNX-model and CUDA
using var yolo = new Yolo(@"path\to\your_model.onnx");
// Video options
var options = new VideoOptions
{
VideoFile = @"path\to\video.mp4",
OutputDir = @"path\to\output\folder",
//GenerateVideo = true,
//DrawLabels = true,
//FPS = 30,
//Width = 640, // Resize video...
//Height = -2, // -2 automatically calculate dimensions to keep proportions
//Quality = 28,
//DrawConfidence = true,
//KeepAudio = true,
//KeepFrames = false,
//DrawSegment = DrawSegment.Default,
//PoseOptions = MyPoseMarkerConfiguration // Your own pose marker configuration...
};
// Run
var results = yolo.RunClassification(options, 5); // Top 5 classes
//var results = yolo.RunObjectDetection(options, 0.25);
//var results = yolo.RunObbDetection(options, 0.25);
//var results = yolo.RunSegmentation(options, 0.25);
//var results = yolo.RunPoseEstimation(options, 0.25);
// Do further processing with results if needed...
GPU
Object detection with GPU and GPU-Id = 0 is enabled by default
// Default setup. GPU with GPU-Id 0
using var yolo = new Yolo(@"path\to\model.onnx");
With a specific GPU-Id
// GPU with a user defined GPU-Id
using var yolo = new Yolo(@"path\to\model.onnx", true, 1);
CPU
YoloDotNet detection with CPU
// With CPU
using var yolo = new Yolo(@"path\to\model.onnx", false);
Custom Pose-marker configuration
Example on how to configure PoseOptions for a Pose Estimation model
// Pass in a PoseOptions parameter to the Draw() extension method. Ex:
image.Draw(poseEstimationResults, poseOptions);
Access ONNX metadata and labels
The internal ONNX metadata such as input & output parameters, version, author, description, date along with the labels can be accessed via the yolo.OnnxModel
property.
Example:
using var yolo = new Yolo(@"path\to\model.onnx");
// ONNX metadata and labels resides inside yolo.OnnxModel
Console.WriteLine(yolo.OnnxModel);
Example:
// Instantiate a new object
using var yolo = new Yolo(@"path\to\model.onnx");
// Display metadata
foreach (var property in yolo.OnnxModel.GetType().GetProperties())
{
var value = property.GetValue(yolo.OnnxModel);
Console.WriteLine($"{property.Name,-20}{value!}");
if (property.Name == nameof(yolo.OnnxModel.CustomMetaData))
foreach (var data in (Dictionary<string, string>)value!)
Console.WriteLine($"{"",-20}{data.Key,-20}{data.Value}");
}
// Get ONNX labels
var labels = yolo.OnnxModel.Labels;
Console.WriteLine();
Console.WriteLine($"Labels ({labels.Length}):");
Console.WriteLine(new string('-', 58));
// Display
for (var i = 0; i < labels.Length; i++)
Console.WriteLine($"index: {i,-8} label: {labels[i].Name,20} color: {labels[i].Color}");
// Output:
// ModelType ObjectDetection
// InputName images
// OutputName output0
// CustomMetaData System.Collections.Generic.Dictionary`2[System.String,System.String]
// date 2023-11-07T13:33:33.565196
// description Ultralytics YOLOv8n model trained on coco.yaml
// author Ultralytics
// task detect
// license AGPL-3.0 https://ultralytics.com/license
// version 8.0.202
// stride 32
// batch 1
// imgsz [640, 640]
// names {0: 'person', 1: 'bicycle', 2: 'car' ... }
// ImageSize Size [ Width=640, Height=640 ]
// Input Input { BatchSize = 1, Channels = 3, Width = 640, Height = 640 }
// Output ObjectDetectionShape { BatchSize = 1, Elements = 84, Channels = 8400 }
// Labels YoloDotNet.Models.LabelModel[]
//
// Labels (80):
// ---------------------------------------------------------
// index: 0 label: person color: #5d8aa8
// index: 1 label: bicycle color: #f0f8ff
// index: 2 label: car color: #e32636
// index: 3 label: motorcycle color: #efdecd
// ...
Donate
References & Acknowledgements
https://github.com/ultralytics/ultralytics
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- Microsoft.ML.OnnxRuntime.Gpu (>= 1.17.1)
- Newtonsoft.Json (>= 13.0.3)
- SixLabors.Fonts (>= 2.0.2)
- SixLabors.ImageSharp (>= 3.1.3)
- SixLabors.ImageSharp.Drawing (>= 2.1.2)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on YoloDotNet:
Package | Downloads |
---|---|
VL.YoloDotNet
YoloDotNet for VL |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on YoloDotNet:
Repository | Stars |
---|---|
Webreaper/Damselfly
Damselfly is a server-based Photograph Management app. The goal of Damselfly is to index an extremely large collection of images, and allow easy search and retrieval of those images, using metadata such as the IPTC keyword tags, as well as the folder and file names. Damselfly includes support for object/face detection.
|
Added new OBB (Oriented Bounding Box) detection feature
Added option to set compression quality on generated videos
Added Index-property for labels