Pipeline detekcji i triggerowania
·2 mins
Dwa niezależne serwisy na Raspberry Pi #
System na docelowym RPi5 składa się z dwóch osobnych, niezależnych usług systemd:
| Serwis | Rola | Status |
|---|---|---|
bird-camera (camera_server.py) |
Serwer Flask do zbierania danych treningowych — podgląd live, serie zdjęć co 3s, zarządzanie z telefonu | ✅ Działa, używany do zbierania datasetu |
bird_trigger (bird_trigger.py) |
Docelowy pipeline detekcji: CNN → trigger aparatu | 🔄 Szkielet gotowy, integracja wytrenowanego modelu w toku |
Rozdzielenie na dwa serwisy jest celowe — zbieranie danych i produkcyjna detekcja to różne tryby pracy systemu, które nie muszą (i nie powinny) działać jednocześnie.
Docelowy pipeline detekcji #
Po pełnym wdrożeniu bird_trigger.py będzie działał następująco:
- Zdjęcie poglądowe — kamera RPi HQ robi zdjęcie 1280×960px co 3 sekundy (
libcamera-jpeg) - Inferencja CNN — wytrenowany model EfficientNet-B0 klasyfikuje zdjęcie lokalnie, na CPU (RPi nie ma GPU)
- Decyzja — jeśli wykryto ptaka i minął cooldown 10 sekund od ostatniego triggera, system przechodzi do kroku 4
- Trigger aparatu — Sony a6100 podłączony przez USB robi serię 3 zdjęć w odstępach 0,5s (
gphoto2 --capture-image-and-download) - Zapis — zdjęcia trafiają na dysk USB, logi (liczba sprawdzeń, wykrytych ptaków, zdjęć z Sony) zapisują się do pliku
Cały proces uruchamia się automatycznie po starcie RPi (systemctl enable bird_trigger) i działa bez monitora — restart automatyczny w razie awarii (Restart=on-failure).
Stan wdrożenia i otwarte zadania #
Szkielet pipeline’u (kamera → inferencja → trigger USB → zapis) jest gotowy i przetestowany. Pozostają dwa kluczowe zadania przed uruchomieniem produkcyjnym:
- Integracja wytrenowanego modelu. Obecna wersja skryptu korzysta z ogólnego modelu EfficientNet-B0 z wagami ImageNet (klasyfikacja przez sumę prawdopodobieństw klas “ptasich” w 1000-klasowym zbiorze ImageNet) — to placeholder do testów sprzętowych, nie docelowy klasyfikator. Do podmiany na model dotrenowany na własnym datasecie (99,1% accuracy, opisany w Trening modelu).
- Spójność formatu kadru. Jak opisano przy okazji analizy błędnych klasyfikacji, ważne jest zachowanie tego samego przycinania (
CenterCrop) na etapie inferencji na RPi co na etapie treningu — inaczej model zobaczy inny kadr niż ten, na którym się uczył.
Zobacz też: Sprzęt · Trening modelu