В моем случае это монеты РФ (coin), т.е. получается у нас задача детекции объектов на изображении, т.к. класс всего один ({0: 'coin'}).
Обучение делал в Python с использованием PyTorch. В качестве базовой ИНС была выбрана YOLOv8n. Но обучение это отдельная задачка, по этому оставим ее под капотом.
ИНС работала, выполняла свою задачу нормально и в принципе этого было достаточно.
Но мне захотелось в качестве эксперимента попробовать использовать ее в LabVIEW.
После поиска информации и ознакомления с путями ее интеграции, остановился на ONNX Runtime.
Остальные решения, по крайней мере из тех, что мне попадались, были либо слишком избыточны, либо ограничения не позволяли запустить их нормально в Linux (про это я забыл написать
В результате сделал некоторую обертку над ONNX Runtime позволяющую использовать библиотеку в двух OS: Unix64bit и Windows64bit. Конкретно тестировал на Ubuntu 24.04lts и Windows 10. При запуске на Windows может потребоваться установка Microsoft Visual C++ Redistributable.
Ну и сразу сделал возможность запуска нескольких ИНС и их отдельный контроль (выгрузка / загрузка и т.д.)
ИНС натренирована на изображениях 1024*1024, по этому в папке image_for_test изображения именно такого разрешения. Если Вы хотите попробовать на других изображениях, то их необходимо привести к требуемому разрешению.
На выходе мы получаем информацию о входах и выходах ИНС, классах и пр.
Ну и есть возможность передать ей изображение (преобразованное и нормализованное) и отобразить результат.
ИНС на возвращает данные в своей структуре и в зависимости от типа используемой ИНС, количества классов и пр. структура пакета может изменяться.
Перед отображением я прогнал обнаруженные box через алгоритм NMS (Non-Maximum Suppression), чтобы оставить "ведущих". Не забудьте, перед запуском, указать актуальные пути к модели (ONNX model path -> coins_detection.onnx -> в папке data) и изображению (BMP file path -> папка image_for_test).
Сам проект можно забрать здесь (LabVIEW 2017): https://github.com/IvanLisRus/LabVIEW-ONNX_Runtime
Если по размерам проекта, то дела обстоят примерно так:
- coins_detection.onnx (~12.5Mb)
- unix64 (~22.5Mb)
- win64 (~16.9Mb)
- LabVIEW code (~152kb)
