Деплой обученной модели на Raspberry Pi и запуск детекции носков с камеры.
Рекомендуемый путь деплоя описан в launch.md и использует встроенный CLI:
./main.py deploy rpi5Используй эту страницу после деплоя для работы с веб-панелью, локальной детекцией и удалённым GPU-инференсом.
Если проект нужно копировать вручную, fallback-сценарий такой:
rsync -avz --exclude .venv --exclude frontend/node_modules --exclude __pycache__ --exclude .git \
~/work/SocksTank/ rpi5:~/sockstank/Перед тем как использовать ssh rpi5 ниже, убедись, что host alias rpi5 резолвится на твоей dev-машине. При необходимости настрой ~/.ssh/config и /etc/hosts, как описано в infrastructure.md.
Основной способ работы с роботом — через веб-панель:
ssh rpi5
cd ~/sockstank
sudo -E nohup python3 main.py serve --model models/yolo11_best_ncnn_model --conf 0.5 > /tmp/sockstank.log 2>&1 &Открыть в браузере: http://rpi5:8080
Веб-панель включает: живое видео с YOLO-детекцией, управление моторами, сервоприводами, LED, телеметрию (дистанция, ИК-сенсоры, температура CPU).
sudo -E необходим для доступа к камере и GPIO (флаг -E наследует пользовательский PYTHONPATH).
Запись видео с детекцией в файл:
ssh rpi5
cd ~/sockstank
sudo -E python3 main.py detect --model models/yolo11_best_ncnn_model --conf 0.5| Параметр | По умолчанию | Описание |
|---|---|---|
--model |
auto (.pt на dev/GPU, ncnn на RPi) |
Путь к модели (.pt для GPU, ncnn директория для RPi) |
--output |
detect.mp4 |
Выходной видеофайл |
--conf |
0.5 |
Порог уверенности (0.0–1.0). Детекции с уверенностью ниже порога игнорируются |
--frames |
300 |
Максимальное количество кадров для записи |
--width |
1280 |
Ширина кадра (px) |
--height |
720 |
Высота кадра (px) |
--fps |
3 |
Частота кадров камеры |
Если модель экспортирована в ncnn (см. тренировка):
sudo ./main.py detect --model models/yolo11_best_ncnn_model --conf 0.5 # NCNN для RPiИнференс можно перенести на удалённый GPU-сервер (например, blackops с RTX 4070 SUPER — 314.8 FPS vs 14.9 FPS на RPi 5). Робот отправляет кадры по HTTP, сервер возвращает детекции.
В веб-панели (http://rpi5:8080) в секции Inference есть три кнопки:
| Режим | Описание |
|---|---|
| auto | Если GPU-сервер онлайн — используется он, иначе fallback на локальный |
| local | Всегда локальный инференс (NCNN на RPi) |
| remote | Всегда удалённый инференс (ошибка если сервер недоступен) |
Быстрое правило:
- auto — основной режим на каждый день;
- local — когда отлаживаешь путь на RPi или когда недоступны сеть/GPU-хост;
- remote — только если ты явно хочешь принудительно использовать GPU-сервер.
- Открыть веб-панель → секция Inference в правой колонке
- Нажать + Add GPU Server
- Заполнить форму:
- Host — IP или hostname GPU-сервера (например
192.168.0.188) - Port — порт inference-сервера (по умолчанию
8090) - Username — SSH-пользователь
- Auth —
SSH Key(путь к ключу, по умолчанию~/.ssh/id_rsa) илиPassword
- Host — IP или hostname GPU-сервера (например
- Нажать Test для проверки подключения (покажет GPU и модель)
- Нажать Save для сохранения
Сервер появится в списке с индикатором статуса:
- зелёный — online
- оранжевый — starting
- серый — offline
Кнопки Start / Stop запускают и останавливают inference-сервер на GPU-хосте через SSH. Кнопка × удаляет сервер из списка.
Конфигурация серверов сохраняется в gpu_servers.json (в .gitignore).
# На GPU-сервере (blackops)
cd ~/work/SocksTank
python3 -m server.inference_server --port 8090 # на Linux использовать python3; автоматически выберет models/yolo11_best.pt на GPU/dev-хостах| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/inference |
Статус инференса (режим, backend, ms) |
| PUT | /api/inference/mode |
Переключить режим (auto/local/remote) |
| GET | /api/gpu/servers |
Список GPU-серверов |
| POST | /api/gpu/servers |
Добавить GPU-сервер |
| DELETE | /api/gpu/servers/{host} |
Удалить GPU-сервер |
| POST | /api/gpu/servers/{host}/test |
Проверить подключение |
| POST | /api/gpu/servers/{host}/start |
Запустить inference-сервер |
| POST | /api/gpu/servers/{host}/stop |
Остановить inference-сервер |
- Камера ov5647 захватывает кадры через picamera2
- Каждый кадр передаётся в модель YOLO для обнаружения носков
- Вокруг обнаруженных носков рисуются bounding box'ы с подписью класса
- Обработанные кадры записываются в видеофайл
detect.mp4
Видеофайл detect.mp4 сохраняется в текущей директории на RPi. Скопировать на свой компьютер:
scp rpi5:~/sockstank/detect.mp4 .Открыть любым видеоплеером (VLC, mpv и т.д.).
Робот управляется через car.py из комплекта Freenove. Он поддерживает несколько режимов:
- mode_ultrasonic — обход препятствий: ультразвуковой сенсор определяет расстояние до объектов. Если < 45 см — робот сдаёт назад и поворачивает
- mode_infrared — следование по линии: ИК-сенсоры отслеживают линию на полу. При обнаружении объекта на расстоянии 5–12 см — захват клешнёй
- mode_clamp — управление клешнёй: подъём, опускание, захват
Веб-панель (main.py serve) уже объединяет детекцию с управлением — можно управлять роботом через браузер, видя результаты детекции в реальном времени. Полностью автономный режим (поиск + подъезд + захват без участия человека) — следующий этап разработки.
| ← Предыдущая | README | Следующая → |
|---|---|---|
| Запуск проекта | Вернуться к README | Бенчмарки инференса |