Що є в системі
|
1 2 3 4 5 6 7 8 |
PC (192.168.1.121) Luckfox (192.168.1.125) STM32 Blue Pill ┌─────────────────┐ ┌──────────────────────┐ ┌─────────────┐ │ face_server_ │◄──────►│ RetinaFace NPU │ │ LED / реле │ │ deepface.py │ HTTP │ luckfox_pico_ │─────►│ /dev/ttyS1 │ │ Flask + DeepFace│ POST │ retinaface_facenet │ UART │ │ │ known_faces/ │ │ /dev/ttyS3 (UART3) │ └─────────────┘ └─────────────────┘ └──────────────────────┘ |
◆ Запуск — кожного разу
Крок 1 — PC: запускаємо сервер
|
1 2 3 |
cd ~/Sasha/www/STM32/python python3 face_server_deepface.py |
Має побачити:
|
1 2 3 4 |
База облич (1): ✓ Alex Сервер: http://0.0.0.0:5000 |
Крок 2 — Luckfox: зупиняємо rkipc і запускаємо детекцію
|
1 2 |
ssh -o PubkeyAuthentication=no root@192.168.1.125 |
|
1 2 3 4 5 6 7 8 9 |
# На платі RkLunch-stop.sh cd /root/luckfox_pico_retinaface_facenet_demo ./luckfox_pico_retinaface_facenet \ model/RetinaFace.rknn \ model/mobilefacenet.rknn \ model/test.jpg \ http://192.168.1.121:5000/face |
Крок 3 — наводимо камеру на обличчя
На PC в терміналі сервера має з’явитись:
|
1 2 3 4 5 6 7 |
Alex: dist=0.073 verified=True [20260521_...] norm(rknn)=1.44 | dist(deepface)=0.073 | OK:Alex [реле] відкриваємо для Alex на 5с [STM32] on → LED on [STM32] off → LED off [реле] закрито |
◆ Додати нову людину в базу
|
1 2 3 4 5 6 7 8 9 10 |
# 1. Підійти до камери — фото збережеться в received/ # 2. Знайти фото ls ~/Sasha/www/STM32/python/received/ # 3. Скопіювати в базу cp received/face_20260521_..._UNKNOWN.jpg known_faces/Maria.jpg # 4. Перезавантажити базу без рестарту сервера curl -X POST http://localhost:5000/reload |
◆ Перевірити стан системи
|
1 2 |
curl http://192.168.1.121:5000/status |
|
1 2 3 4 5 6 7 8 |
{ "relay_active": false, "known_faces": ["Alex"], "model": "Facenet", "threshold": 0.4, "stm32": "root@192.168.1.125:/dev/ttyS1" } |
◆ Файли і де вони живуть
| Файл | Де | Що |
|---|---|---|
face_server_deepface.py |
PC: ~/Sasha/www/STM32/python/ |
Flask сервер |
known_faces/Alex.jpg |
PC: поруч з сервером | База облич |
received/ |
PC: поруч з сервером | Всі отримані фото |
luckfox_pico_retinaface_facenet |
Плата: /root/luckfox_pico_retinaface_facenet_demo/ |
Бінарник детекції |
model/RetinaFace.rknn |
Плата: в тій же папці | Модель детекції |
model/mobilefacenet.rknn |
Плата: в тій же папці | Модель розпізнавання |
stm32_controller.py |
Плата: /root/ |
UART → STM32 |
◆ Якщо щось пішло не так
Сервер не запускається:
|
1 2 3 |
pip install deepface flask sudo apt install sshpass |
SSH питає пароль — це нормально, sshpass передає його автоматично.
Камера не ініціалізується:
|
1 2 3 4 |
# Переконайся що RkLunch-stop.sh відпрацював # rkipc має бути зупинений ps | grep rkipc # не має нічого показати |
LED не реагує:
|
1 2 3 4 |
# Перевір UART вручну з плати STM32_PORT=/dev/ttyS1 python3 /root/stm32_controller.py on STM32_PORT=/dev/ttyS1 python3 /root/stm32_controller.py off |
Всі — UNKNOWN:
- Перевір що
known_faces/не порожня - Спробуй збільшити поріг:
THRESHOLD = 0.60вface_server_deepface.py - Переконайся що фото в базі зроблене тією ж камерою
◆ Клонування плати на іншу
Образ зберігається на PC після кожного make в SDK:
|
1 2 |
~/luckfox-pico/output/image/update.img |
Прошити нову плату (Maskrom режим — затисни BOOT при підключенні):
|
1 2 3 |
cd ~/luckfox-pico ./tools/linux/Linux_Upgrade_Tool/upgrade_tool uf output/image/update.img |
⚠ Але файли які клали через scp (бінарник, моделі, скрипти) в образі НЕ збережені. Після прошивки треба знову скопіювати:
|
1 2 3 4 5 6 7 8 9 |
# Копіюємо все що треба на нову плату scp -o PubkeyAuthentication=no -r \ install/uclibc/luckfox_pico_retinaface_facenet_demo \ root@192.168.1.NEW_IP:/root/ scp -o PubkeyAuthentication=no \ stm32_controller.py \ root@192.168.1.NEW_IP:/root/ |
Щоб файли були в образі — треба додати їх через Buildroot overlay або пакет (як ми робили з go-dashboard).
Серія «STM32 з нуля без HAL» · nodejs.jdymora.com/category/embedded/stm32