Лови FPV на Go: будуємо real-time детектор дронів на Raspberry Pi і Hailo
Привіт! Мене звати Роман Журавель, і я б хотів розповісти про свій експеримент з Golang та Computer Vision.
Всі ми знаємо, що ворожі FPV — це велика проблема як для військових, так і для цивільних у прифронтових містах. Для того щоб боротись із цією загрозою в автоматичному режимі, для початку потрібно навчитись розпізнавати дрон і розуміти, що він поруч. У цій сфері вже зроблено дуже багато: від перехоплення частот і акустики до комп’ютерного зору. Хочу поділитись з вами тим, що вдалося наекспериментувати мені.
Моя мета — показати весь шлях від розмітки картинок до готового детектора на платі, і наочно пояснити, чому «мозком» цієї системи я обрав Go, а не звичні Python чи C++.

Що отримаємо в результаті
До кінця статті ми пройдемо повний цикл розробки:
- Зберемо базу: розмітимо датасет FPV-дронів у Label Studio й натренуємо модель YOLOv8n.
- Підготуємо залізо: скомпілюємо модель під Hailo-8L — компактний нейропроцесор на 13 TOPS, що підключається до Raspberry Pi 5.
- Напишемо софт: розберемо Go-застосунок, який через CGO-біндінг забирає кадри з камери, «годує» ними залізо.
- Розберемо фішки: по поличках розкладемо, чому скомпільований Go-бінарник на платі — це круто. Поговоримо про деплой без болю з Python-залежностями, залізне керування потоками (камера → інференс → мережа) та банальний захист коду від копіювання, адже бінарник реверсити куди складніше, ніж читати голий скрипт.
Архітектура рішення
Конвеєр працює в чотири кроки: камера бере кадр → Hailo-8L проганяє його через нейромережу й повертає сирі дані → Go-застосунок збирає їх у bounding box-и й ідентифікує дрон → летить сповіщення по HTTP чи радіо. Жодних хмар і серверів — усе крутиться на одному шматку заліза.
Головна фішка тут — правильний розподіл ролей. Hailo-8L забирає на себе всю важку математику (а це 13 TOPS апаратного інференсу), повністю розвантажуючи процесор PI. Тобто ядра Raspberry Pi 5 взагалі не множать матриці — вони лише керують процесом: забрали кадр із камери, кинули в Hailo через PCIe, забрали результат і відправили в мережу.
А це якраз та робота, під яку заточували Go: швидкий конкурентний I/O та мережа, а не лінійна алгебра. Важка обчислювальна частина вже «в залізі», а Go дістається саме той шар, де він почувається як риба у воді.

Залізо:
|
Компонент |
Роль |
|---|---|
|
Raspberry Pi 5 (4/8 GB) |
Хост, оркестрація: камера, Go-застосунок, мережа |
|
AI HAT+ Hailo-8L (13 TOPS) |
Апаратний інференс нейромережі, підключений через PCIe Gen3 |
|
Camera Module 3 (IMX708) |
Захоплення відео в реальному часі |
|
Блок живлення 5V/5A (27W) USB-C |
Без нього Hailo просто не ініціалізується |
|
Активне охолодження |
HAT+ помітно гріється під навантаженням |
Тепер, коли картина зрозуміла, можна розібратись, чому саме Go дістав роль «мозку» цього конвеєра.
Чому Go?
Логічна відповідь на питання «чим пишуть
Один бінарник — повний деплой. Go компілюється в єдиний статично прилінкований виконуваний файл. Щоб розгорнути застосунок на Pi, достатньо скопіювати один файл і запустити його. Не потрібно ні venv, ні pip install, ні боротьби з версіями numpy — а ця боротьба в Hailo-екосистемі цілком реальна: версії 1.x і 2.x numpy несумісні між собою, і частина пайплайнів на Python просто ламається після apt upgrade. З Go такої проблеми немає.
Конкурентність без callback-хаоса. Пайплайн «читати кадри → гнати інференс → слати HTTP-запит або писати радіоканал» — це кілька незалежних потоків роботи, які мають бути паралельними, але при цьому координованими. У Go це реалізується через goroutines і channels: кожна ланка конвеєра — окрема goroutine, дані між ними течуть через канали. Логіка залишається лінійною і читабельною, без callback-пірамід і async/await.
Складніший реверс-інжиніринг. Пристрій стоїть фізично десь «в полях», іноді без нагляду. Python-скрипт на такій платі — це відкритий текст: хто забрав Pi, той відразу бачить логіку, адреси сповіщень, токени автентифікації. Скомпільований Go-бінарник не є захистом від цілеспрямованого зловмисника, але суттєво підвищує поріг: декомпілювати його значно важче, ніж прочитати .py-файл. Для автономного польового пристрою це має значення.
Низький overhead на ARM. Go runtime невеликий і стартує швидко. На Pi 5 застосунок виходить на робочий режим за секунди — без прогріву JVM і без завантаження важких Python-пакетів при старті.
Є нюанс: CGO. Єдиний компроміс — взаємодія з HailoRT C API відбувається через CGO. Це означає, що магія «один бінарник без зовнішніх залежностей» трохи ускладнюється: на хості при збірці потрібен
Розмітка датасету в Label Studio
Перш ніж запускати будь-яке тренування, потрібен датасет — бажано
Правила розмітки
Якість датасету напряму визначає якість моделі, тому кілька правил, які варто дотримуватись послідовно на всіх зображеннях:
- Bounding box — якомога щільніше навколо дрона, мінімум порожнього простору
- Розмічаємо всі дрони на кожному кадрі, навіть частково захований дрон
- Розмиті та ледь помітні — теж розмічаємо
- Зображення без дронів не чіпаємо — вони так і залишаються негативними прикладами

Після розмітки: Export → YOLO. Архів матиме папки images/ і labels/, де кожен .txt — це рядок у форматі:
<class_id> <x_center> <y_center> <width> <height>

Увага: Label Studio іноді експортує полігони замість bbox (9 значень замість 5 на рядок). Якщо це трапилось — конвертуємо скриптом, який зводить polygon до YOLO-формату через min/max координат. Перевірити формат просто: якщо у .txt-файлі 5 чисел на рядок — все гаразд, якщо 9 — потрібна конвертація.
Останній крок підготовки — розбити датасет на три частини: 80% train, 15% val, 5% test — і покласти їх у структуру, яку очікує YOLOv8. Можете скористатись скриптом.

dataset.yaml:
path: <path_to/drone_dataset> train: images/train val: images/val test: images/test nc: 1 names: 0: fpv_drone
path замініть на абсолютний шлях
Тренування YOLOv8n і компіляція для Hailo
Для тренування використовуємо yolov8n — найлегшу версію архітектури, яка без проблем вкладається в 13 TOPS Hailo-8L і дає достатню точність для детекції одного класу. Можна тренувати модель локально або на Google Colab
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.train(
data="drone_dataset/dataset.yaml",
epochs=120,
imgsz=512,
batch=8,
device="cpu",
optimizer="AdamW",
lr0=0.001,
patience=30,
augment=True,
mosaic=1.0,
mixup=0.1,
fliplr=0.5,
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
project="runs/detect",
name="fpv_drone",
)
Експорт в ONNX
model = YOLO("runs/detect/fpv_drone/weights/best.pt")
model.export(
format="onnx",
imgsz=512,
opset=11, # Hailo DFC opset 11
simplify=True,
)
opset=11 і simplify=True — не опціональні. Без спрощення Hailo Dataflow Compiler часто не може розпарсити граф і падає на операціях, які ONNX-runtime обробляє без проблем, але DFC — ні.
Компіляція ONNX → HEF
Hailo використовує власний бінарний формат .hef (Hailo Executable Format). Компіляція відбувається через Hailo AI SW Suite — Docker-образ, який треба завантажити з developer zone після реєстрації.
Попередньо створіть папку hailo_workspace та скопіюйте ваш best.onnx. Також свторіть папку hailo_workspace/calib_images та помістіть в неї ~100—200 зображень з валідаційної вибірки для INT8-квантизації. Hailo стискає вагові коефіцієнти з float32 до int8, і калібрувальні зображення дозволяють зробити це з мінімальною втратою точності.
Важливий нюанс зі скриптом .alls. Стандартний скрипт з Model Zoo намагається додати NMS прямо на чіп — і для кастомних моделей це ламається з помилкою expected conv but found activation layer. Тому замість стандартного — мінімальний скрипт тільки з нормалізацією:
cat > /workspace/yolov8n_drone.alls << 'EOF' normalization1 = normalization([0.0, 0.0, 0.0], [255.0, 255.0, 255.0]) EOF
NMS у такому разі виконується на CPU в Go-застосунку — і це насправді зручніше: повний контроль над порогами confidence і IoU без перекомпіляції HEF.
Запускаємо контейнер, монтуємо робочу папку
docker run -it --rm \ -v $(pwd)/hailo_workspace:/workspace \ hailo8_ai_sw_suite_2025-10:1
Усередині контейнера — компіляція через hailomz compile:
hailomz compile \ --ckpt /workspace/best.onnx \ --hw-arch hailo8l \ --calib-path /workspace/calib_images \ --yaml /local/workspace/hailo_model_zoo/hailo_model_zoo/cfg/networks/yolov8n.yaml \ --classes 1 \ --model-script /workspace/yolov8n_drone.alls
Маємо yolov8n.hef — тепер потрібна плата, яка його запустить.
Підготовка Raspberry Pi 5
Raspberry Pi Imager → Raspberry Pi OS
ssh @<ip-адреса> sudo apt update && sudo apt full-upgrade -y sudo rpi-eeprom-update -a sudo reboot</ip-адреса>
Фізичне підключення HAT+
Pi 5 повинен бути повністю вимкнений. Два критичних місця:
FPC-кабель — тонкий плаский кабель між Pi і HAT+ іде через PCIe роз’єм. Обидва кінці мають вставлятись до клацання, коричневі фіксатори — защіпнуті. Це найчастіша причина lspci не бачить Hailo взагалі.

Живлення — блок на 5V/5A (27W) є обов’язковим. Зі звичайним 15W-зарядником Hailo просто не ініціалізується: HAT+ потребує пікового струму під час завантаження прошивки.
PCIe Gen3
За замовчуванням Pi 5 спілкується з HAT по PCIe Gen2. Gen3 вмикається одним рядком у /boot/firmware/config.txt:
sudo raspi-config


6 Advanced Options


A9 PCIe Speed


Yes (Gen 3)
Далі потрібно перезавантажити PI та перевірити чи з’єднання і конфігурація працює:
lspci

Встановлення Hailo
sudo apt install hailo-all -y sudo reboot
Перевіряємо:
hailortcli fw-control identify

Типова граблі: HAILO_DRIVER_NOT_INSTALLED після оновлення ядра
hailo-all встановлює DKMS-модуль — він автоматично перебирається під нове ядро під час apt upgrade. На практиці це іноді не спрацьовує: ядро оновилось, а модуль залишився зібраним під стару версію. Симптом — hailortcli повертає HAILO_DRIVER_NOT_INSTALLED одразу після системного оновлення.
Діагностика:
uname -r # поточне ядро sudo dkms status | grep hailo # для яких ядер є зібраний модуль lsmod | grep hailo # чи завантажений зараз

Якщо версії не збігаються — збираємо вручну:
sudo apt install linux-headers-$(uname -r) -y sudo dkms build hailo_pci/4.20.0 -k $(uname -r) --force sudo dkms install hailo_pci/4.20.0 -k $(uname -r) --force sudo modprobe hailo_pci
Щоб завантажувалось автоматично після кожного ребуту:
echo "hailo_pci" | sudo tee /etc/modules-load.d/hailo.conf
Перевіряємо камеру
rpicam-hello --list-cameras

Бенчмарк HEF прямо на платі
Для початку копіюємо файл .hef на PI
scp yolov8n_drone.hef [email protected]:/home/roman/
Запускаєм бенчмарк
hailortcli benchmark ~/yolov8n_drone.hef

Go + Hailo: як влаштований go-hailort
HailoRT має офіційний C/C++ API і Python-обгортку. Go там немає. Щоб з’єднати Go-застосунок із нейропроцесором, довелось написати go-hailort — CGO-біндинг, який транслює Go-виклики в C API HailoRT.
Структура CGO-шару
CGO дозволяє Go-коду безпосередньо викликати
/*
#cgo CFLAGS: -I/usr/include/hailo
#cgo LDFLAGS: -lhailort
#include <hailo/hailort.h>
#include <stdlib.h>
#include <string.h>
// hailo_go_true is a helper because Go cannot take the address of a C literal.
static inline _Bool hailo_go_true(void) { return (_Bool)1; }
*/
import "C"
Після цього C.hailo_create_vdevice(...) — звичайний виклик у Go-коді, який під час компіляції перетворюється на виклик до libhailort.so. Уся магія відбувається на етапі go build: CGO генерує
Публічний API go-hailort
Відкриваємо пристрій і завантажуємо модель:
device, err := hailort.Open("/path/to/yolov8n.hef")
if err != nil {
log.Fatal(err)
}
defer device.Close()
Open під капотом викликає hailo_create_vdevice → hailo_hef_create → hailo_configure_vdevice → активує network group. Все це синхронно і відбувається один раз при старті.
Архітектура застосунка розпізнавання FPV
Маємо go-hailort, який вміє запускати інференс. Тепер потрібен застосунок, який скріплює всі частини разом: читає кадри з камери, готує їх для моделі, декодує вихід YOLO, вирішує що робити з результатом і надсилає сповіщення. У Go це природно лягає на конвеєр із goroutines і channels.
Структура пакетів
. ├── cmd │ └── detect │ └── main.go # точка входу, ініціалізація, запуск ├── internal │ ├── action │ │ ├── action.go │ │ ├── action_test.go │ │ ├── http.go │ │ ├── http_test.go │ │ ├── log.go │ │ ├── log_test.go │ │ └── save.go │ ├── camera │ │ └── camera.go # читання кадрів з Camera Module 3 │ ├── display │ │ └── display.go # робота з екраном, якщо є │ ├── event │ │ └── event.go # результат детекції в просторі оригінального кадру │ ├── inference │ │ └── inference.go # виконує інференс на Hailo-8L │ ├── overlay │ │ └── overlay.go # малює анотації детекцій │ ├── pipeline │ │ └── pipeline.go # оркеструє головний цикл обробки відео в реальному часі │ └── yolo │ └── decode.go # пост-обробка виходів YOLOv8 після Hailo-інференсу
Конвеєр
Весь пайплайн — це три goroutines, з’єднані двома каналами:
frames := make(chan camera.Frame, 2) detections := make(chan []postprocess.Detection, 2) go camera.Capture(ctx, frames) go inference.Run(ctx, device, frames, detections) go notify.Dispatch(ctx, notifiers, detections)
Буферизовані канали на 2 елементи — щоб читач камери не блокувався в очікуванні інференсу і навпаки. Якщо Hailo встигає за камерою, канал завжди майже порожній. Якщо ні — старі кадри витісняються новими: нас цікавить поточний момент, а не черга застарілих кадрів.
Ознайомитись з кодом можна в репозиторії на github. Ще раз хочу наголосити, що це експерименти, а не production-ready рішення.
Компілювати варто на PI, щоб в системі вже були всі бібліотеки, до прикладу hailo/hailort.h.
CGO_ENABLED=1 go build -o fpv-detect .
Висновки
Коли я починав цей проект, головне питання було не «чи може Raspberry Pi тягнути YOLO» — може, якщо правильно вибрати залізо. Питання було в тому, чи Go справді підходить для цієї ролі, чи це просто цікавий експеримент.
Підходить — і в конкретних місцях краще за очевидні альтернативи. Не тому що «Go крутий», а через прагматичні причини, які відчуваються саме на edge:
Один бінарник — і застосунок на платі. Жодного venv, жодного pip install, жодних конфліктів numpy між пакетами. Скопіював файл, запустив, він працює. Це важливо, коли плата стоїть фізично десь на місці і до неї не завжди є зручний доступ.
Goroutines і channels природно описують конвеєр «читай кадри / женемо інференс / слати сповіщення» — код залишається лінійним і читабельним, не перетворюється на callback-пастку.
CGO-міст виявився менш болючим, ніж здавалось. Так, крос-компіляція з CGO нетривіальна, але збірка нативно на Pi — 30 секунд і нуль проблем. Для edge-пристрою, де деплой рідкий, це прийнятний компроміс.
Скомпільований бінарник складніше реверсувати, ніж Python-скрипт, який лежить відкритим текстом. Для автономного польового пристрою це не параноя, а просте здорового глузду рішення.
Go у
Код обох бібліотек відкритий:
- go-hailort — CGO-біндинг до HailoRT C API
- go-fpv-detect — застосунок детекції
Що з цим робити?
Якщо ви виконаєте всі інструкції, та запустите застосунок на своєму PI, то на екрані, або в збереженому відео ви зможете побачити щось таке

Схожі девайси можна використовувати в боротьбі з «ждунами». Наприклад розвішувати в сіткових тунелях/дорогах і повідомляти «Біля стовпа 33 зафіксований дрон».
Знаючи розташування FPV на зображенні (кадрі з відео), можна рухати пристроєм (сервоприводи, Pan-Tilt) і протидіяти активно — викидати сітку, робити постріл. Можна робити розумні приціли, для гвинтівок.
Допомагай ЗСУ. Слава Україні!!!
48 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівУ розділі «чому Го а не Пайтон або С++?» Детальне пояснення чому Го краще ніж Пайтон (з яким я повністю згоден), але ні слова про те, чим Го в даному конкретному випадку краще за С++
чому не на Русті?
Швидкість розробки ж
збирав схожий прототип, але додавав ще поворотну камеру, було 2 мережі, відео та звукова, яка збирала звук з мікрофонів ReSpeaker Mic і повертала камеру в напрямку звука, камера 2х вісна, як доберусь до сорсів законтрібьючу цей модуль, якщо цікаво
Golang — це любов
Спеціально зареєструвався на DOU щоби залишити під вашою статтею комментар:
Це одна з найкращих(якщо не найкраща) стаття яку я читав на DOU за цей рік. Дяка.
а можна натренувати модель щоб від слідувала ментів і тцк?
І ухилянтів з маминими черешеньками ?)
Го — це круто, але що зі швидкістю?
Все добре там по перфомансу. По суті, go забезпечує прогнозовані затримки GC, що переводить програми на go в щось подібне до систем м’якого реального часу. У мене теж є дуже позитивний досвід керування верстатом на go. Але там десь на30-50 Hz датчии працюють, то можна і в такий GC. Для жорсткого real time, звісно не варто.
ЗІ взагалі, go це дуже хороше, що сталося в IT. Жаль, що запізно.
Розкажіть як з SDR + GPS зробити детектор, мажори...
Вітаю автора зі збіркою цього апарата :)
Якщо проект далі буде розвиватися, можу нагенерувати для тренування моделі — синтетичних даних (з такими параметрами: відстань до дрону, повороти дрону навколо 3х осей, освітлення і тд, є багато налаштувань) + аугментацію з них (5 аугментованих з одного синтетичного), одразу ж розміткою HBB чи OBB, та метадатою, що була використана для конкретного фрейму.
а травичка, пташки, дерева що коливаються під вітром також будуть?
Пташки в польоті — цікавий кейс, можна спробувати зробити.
Дерева та трава — статичні.
Синтетичні дані використовуються, щоб заповнити недостачу даних і навчити модель бачити об’єкт з всіх можливих сторін, а не повністю замінити дата сет.
Пташки — це не цікавий кейс, це один із головних кейсів... Так само як дерева, які вам створюють постійний движ на картинці. Плюс зазвичай треба детектити не статичну картинку, а саме послідовність кадрів і що там відбувається — по статиці дрона від пташки, коли у вас розмір 5×5 пікселів, ви ніколи не відрізните
Мені здається, що ми говоримо про різні речі. Я говорю про тренування YOLO моделі, а Ви про трекінг.
Чи розглядали rust обираючи go? Якщо так, то чому відмовилися?
Розглядав. Маю більшу експертизу в Go. Є план продублювати те саме на Rust в якості ще одного експерименту
Кацапи тобі подякували.
Баран.
Ідея давно носиться в повітрі і вони теж щось таке микитять
Ви тут десь щось побачили унікальне секретне супер складне? Автор поділився длсвідом свого ПЕТ прожекта. Замініть слово дрон на ковбаса, все, проблем нема?
Мені теж «подобається» коли хтось викладе як 3 проводка підпаяти до аналогової камери наприклад і особливо розумні починають кукарікати: «Ворог вчиться!!! Приберіть.».
Або там викладають відео з якими розробками для залучення інвестицій, теж саме.
Цей контент згенерований ШІ так шо не так все погано
Зніми каструлю, давно зроблено і протестовано на голубах
insta:
www.instagram.com/reel/DYbya2LiLfk
reddit:
www.reddit.com/...ed_pigeon_defense_system
an other one:
github.com/adamp87/pigeon
Ахахаха, ну в рашці займаються тим самим, тіпа дрин з приліпляною камерою і запущеним опенсв не являється військовою розробкою. Прив’язати міну до дрина, не являється військовою розробкою, це бляха ерзац, це придумали ще в 2011 році під час війни в Сирії, дрон з камерою AR drone представили в 2010 році.
скільки камер потягне система щоб зробити 360 градусний обзор?
Якщо хтось планує доробляти до мережі детекції, відразу рекомендую додати mqtt та/або zenoh щоб пушити детекшени туди, як роблять на edge камерах для дронів/нрк з підтримкою IP. Щось типу
Expected Telemetry Payload (Standard): { "camera": "cam0", "timestamp": 1710000000.123, "detections": [ { "class": "person", "confidence": 0.9254, "bbox": [0.125, 0.334, 0.458, 0.789] } ] }Я теж прихильник Go. Джерельний код ліби відкритий? Портування її в Go доцільне?
Так, HailoRT — open source на GitHub. Але портувати в Go недоцільно: там купа низькорівневої роботи з PCIe-драйвером і ioctl, яку простіше лишити перевіренійC-бібліотеці.
Опишіть як ви використовували AI для написання цього посту і в цілому проекту?
шукати дрон в квартирі і в кущах або небі — це не одне і те ж саме
Так автор принцип показал как это реализовать. Автор же не будет в небо дрон запускать или в кустах прятать ради обучающего гайда, чтобы такие как вы не придерались. Кому надо — поймут как натренировать модель.
1 Інсталюєм софт для розпізнавання іміджів
2. Годуєм імідж тому софту
3. отримуєм текст зі списком розпізнаних об’єктів
4. грепим на ’drone’
5 пишем прогу для п.п. 2..4 на Го
6. профіт
А от
— Те саме, що з б-яким пет проектом: нічого.
ви 100% маєте рацію. Але для бойової роботи потрібна оптика з адекватною фокусною відстанню під дальність виявлення і модель треба тренувати на датасеті, що відповідає реальним умовам. Суть моєї розповіді в «розширені горизонтів», показати, що можна використовувати інші мови, дати базову інтсрукцію як в цілому це зробити
Так в тому то і справа, що в реальних умовах ні малинка, ні дитячі обвіси не тягнуть, тому це виключно рівень студенського курсака по електроніці, вивчати і хвастатись вистачає, але в життєвих реаліях далекий від промислового використання
адекватна оптика для розпізнавання хоча б з300-400 метрів коштує тисячі долларів і потребує постійного сканування, саме тому це і не працює. Оптика яка вам закриє хоча б пів неба без сканування, просто не існує в промислових масштабах
в залежності для чого саме це потрібно,
в умовному КАЗ на ББМ проти дронів вистачить і розпізнавання на дальності 50м з головою, а ціна такої системи просто загубиться на фоні ціни самої ББМ
І що ви встигнете зробити за умовні 3 секунди? І скільки штук вам знадобиться, щоб хоча б 2 кілометри зони закрити?
(╯°□°)╯
ну насправді це брехня, на перші шахеди, які власне вивели більшість української енергетики в22-23 роках літали з вуличною камерою відеонагляду на 4 мегапікселя, і прекрасно справлялись з тим, щоб відрізнити трансформаторну підстанцію від собаки і попасти по станції. А та камера коштую 2000 гривень. Для розвідки є сенс в нормальній камері, а для одноразової срані таке не потрібно. А дрони воно взагалі повинне розпізнавати в небі чим завгодно, розпізнати чорну херню на фоні світлого неба, можна за допомогою ульразвукового датчика і 0.3 мегапіксельної 144р камери від нокії з 2004.
який мінімальний кутовий розмір дрона який система може розпізнати?
у мене немає виміряного значення мінімального кутового розміру, бо це залежить від конкретної оптики, роздільної здатності вхідного кадру для YOLOv8n і ще багатьох факторів
для йоло треба хоча б 10×10 пікселів — рахуйте по своїй камері
але в реальності далі пет-проджектів це не працює
навчання йде на зображені менше за 640, тому про дальність тут говорити не прийдеться. щоб дійсно бачити далеко, наприклад як в нас від 4×4 пікселі, то:
1. Йоло не підійде, Р2 наче в них вирізаний в нано версіях
2. зображення повинно бути від 1280
3. датасет дуже сильно збалансований, а не просто аби шо накидати
4. 4×4 це край можливості, тому тут потрібно ще писати алгоритми відсічок на негативні
5. при квантуванні моделі якість детекції та її дальність ще зменшиться
Детекція дронів це нетривіальна задача і роспбері не підійде під це, щоб зробити дійсно гарний продукт, потужності не вистачить. Але в цілому хлопці зробили прикольний матеріал і кожен, знаючи свої задачі, може адаптувати, що вже добре.
як варант RPI бере кадри з камер(и), скажімо 1 в секунду, відсилає на сервер (компаньон плату) із їх розпізнаванням
Hailo-8 вивозить монохромні зображення 1280×900 з двох камер з частотою до 40 фпс. Модель 8m. Так що не все так безнадійно
може тоді краще брати NVIDIA Jetson Orin Nano / NX?
100% краще. але у мене була PI :)