Сегодня хочу рассказать вам о библиотеке yolo_detector
— простой, удобной и производительной обёртке для использования моделей компьютерного зрения YOLO на языке Rust.

Я создал эту библиотеку, потому что мне не хватало нативного и удобного инструмента для распознавания объектов прямо из кода на Rust — без связки с Python, без танцев с OpenCV, без лишней боли.
Целью было сделать максимально простую в использовании библиотеку, которая:
легко интегрируется в любой Rust-проект;
поддерживает ONNX-модели YOLO (v4 и выше);
быстро работает даже на слабых машинах;
имеет чистую архитектуру и читаемый код.
-
поддержку всех основных типов моделей YOLO:
Detection — стандартное распознавание объектов
Weights — загрузка весов в разных форматах
OBB (Oriented Bounding Boxes) — поддержка наклонных прямоугольников
Classification — определение класса объекта
Pose — позы человека, скелетная модель
Segmentation — маски объектов и выделение контуров
Сейчас yolo_detector
— это полностью готовый open-source проект с реализованным roadmap’ом, активным использованием и понятным API.
Возможности yolo_detector
Полностью написана на чистом Rust — без зависимостей на C, C++ или Python.
Поддержка CPU-режима и ускорение на NVIDIA GPU через CUDA — высокая производительность при детектировании объектов.
Удобный API — простая интеграция в любые проекты на Rust.
Полностью open-source — доступен на GitHub, можно использовать, дополнять и адаптировать под свои задачи
Почему я создал yolo_detector
Когда я начал работать с задачами компьютерного зрения на Rust, я столкнулся с рядом проблем в существующих библиотеках:
Слабая документация — многие проекты почти не имеют комментариев или пояснений. Пользоваться ими неудобно, особенно новичкам.
Поддержка только стандартных моделей YOLO (Detection) — практически никто не реализует поддержку Pose, Segmentation, OBB и других расширенных типов моделей.
Сложный и перегруженный код — в большинстве библиотек сложно разобраться даже в базовой логике. Отсутствует модульность и структура.
Часто зависят от C/C++ или Python — тянут за собой дополнительные зависимости, ухудшают кросс-платформенность и увеличивают время сборки.
Что делает yolo_detector по-другому
Я решил создать чистую, лаконичную и мощную реализацию, написанную полностью на Rust, чтобы:
обеспечить понятную и структурированную архитектуру, с которой легко работать;
покрыть все типы моделей YOLO: Detection, Weights, OBB, Classification, Pose и Segmentation;
использовать ONNX и давать выбор между CPU и CUDA (NVIDIA) для ускорения;
Скрытый текст
ONNX (Open Neural Network Exchange) — это открытый формат для представления нейронных сетей, разработанный компаниями Microsoft и Facebook (ныне Meta) для обмена и совместимости моделей между разными фреймворками машинного обучения, такими как PyTorch, TensorFlow, scikit-learn и другими.
Установка и пример использования
Для начала работы с yolo_detector
достаточно добавить зависимость в ваш Cargo.toml
:
yolo_detector = "1.0.0"
opencv = "0.94.4"
Актуальную версию всегда можно найти на crates.io: ? crates.io/yolo_detector
Простой пример использования
Для получения готового изображения:
use opencv::{highgui, imgcodecs};
use yolo_detector::YoloDetector;
fn main() -> opencv::Result<()> {
let detector = YoloDetector::new("yolov8m.onnx", "coco.names", 640).unwrap();
let mat = imgcodecs::imread("image.jpg", imgcodecs::IMREAD_COLOR)?;
let (detections, original_size) = detector.detect(&mat.clone())?;
let result = detector.draw_detections(mat.clone(), detections, 0.5, 0.5, original_size)?;
highgui::imshow("YOLOv8 Image", &result)?;
highgui::wait_key(0)?;
Ok(())
}
Для получение чистых данных:
use yolo_detector::YoloDetector;
use opencv::imgcodecs;
fn main() -> opencv::Result<()> {
let detector = YoloDetector::new("yolov8m.onnx", "coco.names", 640).unwrap();
let mat = imgcodecs::imread("image.jpg", imgcodecs::IMREAD_COLOR)?;
let (detections, original_size) = detector.detect(&mat.clone())?;
let detections_with_classes =
detector.get_detections_with_classes(detections, 0.5, 0.5, original_size);
for (class_name, rect) in detections_with_classes {
println!("Class: {}, Position: {:?}", class_name, rect);
}
Ok(())
//returns values
//Class: person, Position: Rect_ { x: 74, y: 875, width: 41, height: 112 }
//Class: car, Position: Rect_ { x: 184, y: 899, width: 499, height: 141 }
}
Если доступна NVIDIA CUDA — библиотека использует GPU по умолчанию для максимально быстрого детектирования объектов.
Если GPU не обнаружено — плавно переключается на CPU-режим, сохраняя функциональность без дополнительных настроек.
Больше примеров кода есть в README файле проекта.
Формат выходных данных разных моделей YOLO
Библиотека yolo_detector
поддерживает все основные типы моделей YOLO, каждая из которых возвращает массив данных в своём формате. Ниже приведены основные структуры выходных тензоров:
YOLO Detection (обнаружение объектов)
Форма выхода:
[1, 84, 8400]
84 признака:
x, y, w, h, objectness_score + 80 классов с вероятностью
8400 — количество ячеек (анкорбоксов) для анализа
Это стандартный формат для YOLOv5/v8 с 80 классами (COCO dataset).
YOLO OBB (Oriented Bounding Box — наклонные рамки)
Форма выхода:
[1, 20, 8400]
20 признаков:
x, y, w, h, 15 классов с вероятностью, угол в радианах
Используется, когда объекты имеют ориентацию (например, текст или спутниковые изображения).
YOLO Classification
Форма выхода:
[1, 1000]
1000 значений: массив вида
[class, probability]
Это простая классификация изображений — один класс на всё изображение, как в ImageNet.
YOLO Pose (определение позы человека)
Модель для определения позы возвращает данные в виде трёхмерного массива с размерностью [1, 56, 8400]
.
Число 8400 — это количество возможных предсказаний (ячеек).
Число 56 — это количество признаков для каждого предсказания.
Из этих 56 признаков:
Первые 5 описывают прямоугольник вокруг объекта: координаты центра (x, y), ширина (w), высота (h) и вероятность наличия объекта.
Остальные признаки — это данные по ключевым точкам тела (например, плечи, локти, колени). Для каждой ключевой точки есть три значения: координаты x и y и уверенность (насколько модель точно определила эту точку).
Всего ключевых точек 17 (получается из расчёта: (56 - 5) / 3).
YOLO Segmentation (сегментация объектов)
Форматы выходных данных
Модель возвращает два тензора с такими формами:
Shape0: [1, 116, 8400]
— предсказания объектовShape1: [1, 32, 160, 160]
— прототипы масок
Структура данных
Данные |
Размерность |
Содержание и назначение |
---|---|---|
detections |
|
Каждый из 8400 предсказаний — вектор из 116 признаков: |
- bbox: 4 числа (x-центр, y-центр, ширина, высота) — нормализованы |
||
- class scores: 80 чисел — вероятности классов (например, COCO dataset) |
||
- mask coefficients: 32 числа — веса для прототипов масок |
||
mask_protos |
|
32 прототипа масок размером 160x160, сплющенных в вектор |
Производительность
Тест был запущен на Raspberry pi 4 8GB.
Была запущенна модель Yolov8m Detection

Результаты тестирования:
Rust 3.766 секунд
Python 12.386 секунд
Rust-реализация детектора работает примерно в 3.3 раза быстрее чем Python-версия.
Вывод
Библиотека yolo_detector показывает, что работать с моделями YOLO на Rust можно просто, быстро и удобно. Поддержка разных типов моделей и нативная реализация без лишних зависимостей делают её отличным выбором для проектов на Rust.
Тесты показали, что Rust-версия работает в несколько раз быстрее, чем Python.
Если вы хотите попробовать или использовать YOLO на Rust — yolo_detector
вам поможет.
GitHub проекта: https://github.com/Elieren/yolo_detector