Запустіть програму.

Результати, отримані програмою, відображені на вихідному зображенні.
Це такий самий висновок YOLOv8, як і в невеликій програмі: замість безпосереднього виклику Model.run(...) (як у Запустіть модель.), ви створюєте модель у вигляді Graph — іменованого графа, що містить вхідні дані, модель і вихідні дані, — а потім збираєте його та передаєте/отримуєте дані. Та сама програма, написана мовами Python і C++; виберіть потрібну мову у відповідному блоці коду.
Для цієї першої програми структура навмисно проста:
- Іменований параметр вхідних даних (
nodes.input("image")) позначає місце, звідки дані надходять у застосунок. - Модель (
graph.add(model)) виконує модель як один крок у графі. - Іменований параметр output (
nodes.output("detections")) вказує, звідки ваша програма отримує результат.
Цей самий API можна використовувати для розробки набагато складніших застосунків у майбутньому; тут основна мета полягає в реалізації базової моделі компонування.
Використовуйте вкладки Python / C++ у будь-якому блоці коду — ваш вибір відповідатиме загальному мовному селектору сайту, тому всі фрагменти коду та повна програма перемикатимуться одночасно.
Налаштуйте проєкт.
Ви можете пропустити цей розділ, оскільки в ньому використовуються ті самі assets/, пакунок моделі та зразок зображення. Перейдіть одразу до Перегляньте код..
-
Створіть теку для ресурсів для моделі та вхідного зображення:
mkdir -p assets -
Завантажте модель:
sima-cli modelzoo -v 2.0.0 get yolo_v8ssima-cli завантажити модельЯкщо
sima-cliзберігає модель в іншому місці, ніж директоріяassets, скопіюйте цей файл доassets/yolo_v8s_mpk.tar.gz. -
Завантажте зразок зображення з документації та збережіть його під назвою
assets/tutorial_sample_image.png.
Перегляньте код.
Програма складається з восьми коротких фрагментів. Перемикайте вкладку мови для ко жного блоку.
1. Зчитайте зображення.
#include <opencv2/opencv.hpp>
cv::Mat bgr = cv::imread("assets/tutorial_sample_image.png");
cv::Mat rgb;
cv::cvtColor(bgr, rgb, cv::COLOR_BGR2RGB);
OpenCV зчитує BGR; YOLOv8 очікує RGB. Цей крок не є Neat — ваша програма отримує пікселі з файлу, камери або декодера; Neat переходить до наступного кроку.
2. Опишіть доступні варіанти моделі.
#include <neat.h>
namespace neat = simaai::neat;
neat::Model::Options opt;
opt.preprocess.kind = neat::InputKind::Image;
opt.preprocess.preset = neat::NormalizePreset::COCO_YOLO;
opt.decode_type = neat::BoxDecodeType::YoloV8;
opt.score_threshold = 0.25f;
opt.nms_iou_threshold = 0.45f;
opt.top_k = 100;
ModelOptions визначає маршрут моделі в одному об’єкті: як Neat попередньо обробляє вхідні пікселі та як він декодує вихідні дані детектора.
| Поле | Що в ньому міститься. |
|---|---|
preprocess.kind = Image | На вхід подаються необроблені пікселі, а не попередньо сформований тензор. |
preprocess.preset = COCO_YOLO | Змініть розмір і додайте рамки, щоб відповідало вхідним даним моделі, RGB, масштабуйте на 1/255, не виконуйте віднімання середнього значення. |
decode_type = YoloV8 | Сімейство декодерів, що використовують метод виявлення об’єктів. |
score_threshold / nms_iou_threshold / top_k | Мінімальний поріг впевненості, ступінь перекриття NMS і максимальна кількість збережених обмежувальних рамок. |
3. Завантажте модель.
neat::Model model("assets/yolo_v8s_mpk.tar.gz", opt);
Model зчитує .tar.gz, перевіряє його MPK-контракт на відповідність ModelOptions, які ви надали, і створює фрагмент моделі. Наразі жоден процес не було запущено.