Private
Public Access
addet test set
This commit is contained in:
1 parent
d370f992ce
commit
b0f35bf3cc
21 files changed
+1796
-183
No files matched your search
+127
-20
@@ -5,8 +5,9 @@ Diese Version implementiert ein Livebild des vorhandenen Camera Module 3 NoIR
|
||||
**Simulation** des Effektablaufs. Sie steuert noch keine GPIOs, Motoren,
|
||||
Servos, Lampen oder Lautsprecher. Eine lokale SQLite-Datenbank speichert
|
||||
Testereignisse und Profilkennungen. Lokale Personenerkennung mit Linienauslösung ist implementiert, muss aber
|
||||
am Pi installiert und kalibriert werden. Profilzuordnung per Kamera, Clips
|
||||
und Maskierung sind noch nicht umgesetzt.
|
||||
am Pi installiert und kalibriert werden. Bei automatischer Auslösung wird
|
||||
ein Bild des grünen Bereichs lokal gespeichert. Profilzuordnung per Kamera,
|
||||
Clips und zusätzliche frei zeichnbare Masken sind noch nicht umgesetzt.
|
||||
Die 30-Tage-Löschung ist für künftige Auto-Profile vorbereitet. Daher vorerst nur
|
||||
im privaten Testbereich verwenden; die Kamera nicht auf öffentliche Flächen
|
||||
richten.
|
||||
@@ -30,19 +31,28 @@ direkt im WLAN sichtbar.
|
||||
|
||||
### WebUI beim Hochfahren starten
|
||||
|
||||
Nach der Vorbereitung kann `tools/install_pi_service.sh` auf dem Pi einen
|
||||
systemd-Dienst einrichten. Erst eine Vorschau ansehen, dann anwenden:
|
||||
Das versionierte Uploadskript richtet den systemd-Autostart jetzt bei jedem
|
||||
Update mit `--apply` ein und prüft den gestarteten Webdienst. Anleitung,
|
||||
Rückfall und Datensicherung stehen in [UPLOAD.md](UPLOAD.md). Der Updateablauf
|
||||
verwendet einen einzigen sudo-Aufruf für Umschaltung und möglichen Rückfall;
|
||||
das Passwort wird nicht gespeichert. Python-Prüfungen laufen als Pi-Benutzer.
|
||||
|
||||
Der Dienst nutzt `current/.venv`, startet die WebUI beim Hochfahren und verweist
|
||||
für alle Laufzeitdaten auf den gemeinsamen Basisordner `data/`. Mit
|
||||
`--web-host 0.0.0.0` beim Upload wird direkter Heimnetzzugriff aktiviert;
|
||||
ohne Angabe gilt die gespeicherte Wahl, anfänglich Loopback.
|
||||
|
||||
Auf dem Pi prüfen:
|
||||
|
||||
```bash
|
||||
bash tools/install_pi_service.sh
|
||||
bash tools/install_pi_service.sh --apply
|
||||
systemctl status halloween-grab.service
|
||||
systemctl is-enabled halloween-grab.service
|
||||
```
|
||||
|
||||
Der Dienst läuft unter dem aktuellen Pi-Benutzer, startet `run.py` beim
|
||||
Hochfahren und wird bei einem Fehler neu gestartet. Das Skript benötigt für
|
||||
die Einrichtung `sudo` und überschreibt keine fremde Unit gleichen Namens.
|
||||
Nach Code-Updates kann derselbe `--apply`-Aufruf den Dienst neu starten.
|
||||
Der einzelne Installer bleibt für manuelle Einrichtung verfügbar:
|
||||
`bash tools/install_pi_service.sh --project-dir /home/BENUTZER/halloween --apply`.
|
||||
Er prüft keinen vollständigen Versionsrückfall; Updates deshalb vom Laptop
|
||||
über das Uploadskript durchführen. Autostart ist am echten Pi noch zu prüfen.
|
||||
Zum Deaktivieren: `sudo systemctl disable --now halloween-grab.service`.
|
||||
Bei Startproblemen: `sudo journalctl -u halloween-grab.service -n 80 --no-pager`.
|
||||
Ein Browserfenster auf dem Laptop öffnet sich dadurch nicht automatisch.
|
||||
@@ -75,7 +85,8 @@ SSH-Tunnel nötig. `0.0.0.0` ist die Bind-Adresse, keine Browseradresse.
|
||||
Die WebUI hat noch keinen Login: Geräte im erreichbaren Heimnetz können
|
||||
Kamera und Bedienoberfläche nutzen. Eine öffentliche Internetfreigabe ist
|
||||
damit nicht beauftragt. Direkter Browserzugriff im Heimnetz ist noch nicht
|
||||
bestätigt. `run.py` und der bisherige systemd-Dienst bleiben bei Loopback.
|
||||
bestätigt. `run.py` bleibt bei Loopback; der neue systemd-Dienst unterstützt
|
||||
die beim Upload gewählte Bind-Adresse.
|
||||
|
||||
## Ohne Kamera testen
|
||||
|
||||
@@ -103,8 +114,9 @@ ohne Zuordnung erhalten. Die Daten bleiben bei einem Neustart und bei
|
||||
weiteren Uploads bestehen, weil das Uploadskript `data/` auslässt.
|
||||
|
||||
Der Nutzer wünscht später automatische Wiedererkennung per Kamera. Diese
|
||||
Version erstellt noch keine Profile aus Kamerabildern und speichert keine
|
||||
Bilder, Gesichtsmerkmale oder Clips aus Kamerabildern in der Datenbank.
|
||||
Version erstellt noch keine Profile aus Kamerabildern. Gesichtsmerkmale und
|
||||
Clips werden nicht aufgenommen; Auslösebilder liegen als separate lokale JPEGs
|
||||
mit einem Verweis in der Ereignisdatenbank.
|
||||
Für künftig automatisch erstellte Profile sind Merkmalsvektoren und eine
|
||||
30-Tage-Frist ab letzter Sichtung vorbereitet. Beim Start, stündlich und
|
||||
beim Lesen der Ereignisse/Profile werden abgelaufene Auto-Profile mitsamt
|
||||
@@ -128,17 +140,51 @@ SSH-Tunnel und GPIOs müssen am echten Pi bzw. Aufstellort geprüft werden.
|
||||
Technische Grundlagen: [Picamera2-Handbuch](https://datasheets.raspberrypi.com/camera/picamera2-manual.pdf),
|
||||
[FastAPI-StreamingResponse](https://fastapi.tiangolo.com/advanced/stream-data/).
|
||||
|
||||
## Bilder zu automatischen Auslösungen
|
||||
|
||||
Bei jeder akzeptierten automatischen Auslösung (Linienüberquerung oder
|
||||
Bewegungs-Test) wird der **grüne Auslösebereich** des tatsächlich ausgewerteten
|
||||
Kamerabildes als JPEG unter `data/event-images/` gespeichert. Außerhalb des
|
||||
gewählten Rechtecks wird nichts gespeichert. Der Bereich muss vor Aktivierung
|
||||
auf den vorgesehenen privaten Testbereich beschränkt sein. Keine zusätzliche
|
||||
Ton-/Clipaufnahme, keine Gesichtsmerkmale und keine Profilautomatik.
|
||||
|
||||
In **Gespeicherte Ereignisse** erscheinen eine kleine Vorschau und **„Bild
|
||||
ansehen“** (öffnet das Bild in einem eigenen Tab). Die Liste aktualisiert sich
|
||||
alle 15 Sekunden; **„Ereignisse aktualisieren“** lädt sie sofort neu.
|
||||
Bisherige Ereignisse und manuelle Testauslösungen haben kein gespeichertes Bild.
|
||||
|
||||
Auf ausdrückliche Nutzerwahl bleiben Bilder **bis zur manuellen Löschung**
|
||||
erhalten. **„Bild löschen“** verlangt eine Bestätigung und entfernt das JPEG
|
||||
im aktiven Datenbestand. Ereignis, Zeitpunkt und Profilzuordnung bleiben erhalten.
|
||||
Es gibt keine automatische Alterslöschung dieser Bilder. Speicherbelegung am Pi
|
||||
beobachten; die vorhandenen Upload-Sicherungen können ältere Bilder enthalten
|
||||
und werden durch diesen Knopf nicht verändert.
|
||||
|
||||
JPEGs haben Dateirechte 0600, der Bildordner 0700. Abruf nur über die Ereignis-ID,
|
||||
keine statische Freigabe des gesamten `data/`-Ordners. `GET /api/events` liefert
|
||||
`image_url` oder `null`; `GET /api/events/{id}/image` liefert JPEG mit `no-store`,
|
||||
`DELETE` benötigt den vorhandenen UI-Header. Diese Schranke ersetzt keinen Login:
|
||||
Wie das Livebild sind Bilder im erreichbaren Heimnetz zugänglich. Keine öffentliche
|
||||
Freigabe. Upload und Versionswechsel bewahren `data/` einschließlich Bilder.
|
||||
|
||||
Schreib-/Datenbankfehler werden angezeigt und sperren die Automatik bis zum
|
||||
bewussten Rücksetzen. Teilweise fehlgeschlagene Speichervorgänge räumen temporäre
|
||||
Bilder auf. Lokale Tests prüfen beschnittene Bilder, Trigger-Frame, Neustart,
|
||||
Alt-Datenbankmigration, Abruf/Löschen und Fehlerfälle mit synthetischen Bildern.
|
||||
Das Speichern und Anzeigen nach echter Pi-Auslösung ist noch zu prüfen.
|
||||
|
||||
## Personenerkennung und Linienauslösung
|
||||
|
||||
Nach Übertragung des aktuellen Codes im Projektordner auf dem Pi installieren:
|
||||
Nach einem versionierten Update im aktiven Versionsordner auf dem Pi installieren:
|
||||
|
||||
```bash
|
||||
cd ~/halloween
|
||||
cd ~/halloween/current
|
||||
sudo apt update
|
||||
sudo apt install python3-opencv python3-numpy
|
||||
python3 -m venv --system-site-packages .venv
|
||||
.venv/bin/python -c "import cv2, numpy; print(cv2.__version__, cv2.__file__); print(numpy.__version__)"
|
||||
.venv/bin/python tools/install_detection_model.py
|
||||
HALLOWEEN_STATE_DIR=/home/marcinator_2/halloween/data \
|
||||
.venv/bin/python tools/install_detection_model.py
|
||||
```
|
||||
|
||||
Das Skript lädt ausschließlich das unquantisierte Modell
|
||||
@@ -192,7 +238,8 @@ Kamera-/Modellfehler und mehr als zwei Sekunden ohne gültige Auswertung
|
||||
sperren die aktivierte Automatik und stoppen den simulierten Ablauf. Nach
|
||||
Beheben des Fehlers „Nach Stopp zurücksetzen“ verwenden und Bereich
|
||||
freihalten. Modellprobleme bei deaktivierter Automatik verhindern keine
|
||||
manuellen Tests. Demo braucht weder OpenCV noch Modell; ihre synthetischen
|
||||
manuellen Tests. Der Demo-Livefeed und manuelle Tests brauchen weder OpenCV
|
||||
noch Modell; der Bewegungs-Test benötigt auch im Demo-Modus OpenCV. Synthetische
|
||||
Bilder sind kein Test der echten Personenerkennung.
|
||||
|
||||
Die Auswertung arbeitet im Hintergrund mit dem jeweils neuesten Bild, Ziel
|
||||
@@ -207,10 +254,70 @@ und Rechteck. `POST` benötigt wie andere Schreibaufrufe `X-Halloween-UI: 1`.
|
||||
`/api/status` enthält zusätzlich `detection`. Der Header ersetzt keinen Login.
|
||||
|
||||
Automatische Auslösungen werden als `person_line_crossing` ohne Profil in der
|
||||
bestehenden Datenbank gespeichert. Weder Kamerabilder noch Tracking-IDs werden
|
||||
automatisch gespeichert; Profil-Wiedererkennung und Altersentscheidung fehlen.
|
||||
bestehenden Datenbank gespeichert, mit lokalem Bild des grünen Bereichs aus
|
||||
dem auslösenden Frame. Tracking-IDs werden nicht gespeichert; Profil-Wiedererkennung
|
||||
und Altersentscheidung fehlen.
|
||||
Aktoren bleiben ausschließlich simuliert.
|
||||
|
||||
### Nahbereich testen: Bewegung in Pfeilrichtung
|
||||
|
||||
In der WebUI unter **Automatische Auslösung → Erkennung wählen** den Modus
|
||||
**„Test: Bewegung in Pfeilrichtung“** auswählen, „Automatisch auslösen“
|
||||
anhaken und „Linie und Bereich speichern“ drücken. Der Modus wird lokal
|
||||
in `data/detection.json` gespeichert. Bisherige Einstellungen ohne Methodenfeld
|
||||
werden als Personenerkennung übernommen; diese bleibt der Standard.
|
||||
|
||||
Dieser Test benötigt OpenCV und NumPy aus den oben beschriebenen Pi-Systempaketen,
|
||||
aber kein NanoDet-Modell. Wenn OpenCV fehlt, auf dem Pi ausführen:
|
||||
|
||||
```bash
|
||||
sudo apt install python3-opencv python3-numpy
|
||||
sudo systemctl restart halloween-grab.service
|
||||
```
|
||||
|
||||
Zuerst die Kamera fest abstellen und das Bild im grünen Bereich mindestens zwei
|
||||
Sekunden ruhig halten. Dann eine Hand, den Kopf oder einen Gegenstand sichtbar
|
||||
in Pfeilrichtung bewegen. Eine Person muss weder vollständig sichtbar sein noch
|
||||
wird eine Linienüberquerung verlangt: Die Linie legt in diesem Modus nur den
|
||||
Pfeil fest. Für Bewegung nach links/rechts die Linie entsprechend senkrecht
|
||||
stellen; mit „Richtung umkehren“ die Pfeilrichtung wechseln.
|
||||
|
||||
Es müssen zwei aufeinanderfolgende Auswertungen gerichtete Bildbewegung im
|
||||
gewählten Bereich bestätigen. Der Test wertet auch kleine, langsame Änderungen
|
||||
im Nahbereich aus. Unter der Statuszeile stehen der geänderte Bildanteil,
|
||||
die Richtungsbewertung und „Bestätigung 0/2“, „1/2“ oder „2/2“. So lassen sich
|
||||
zu kleine Änderungen von fehlender Richtung unterscheiden. Eine Auslösung
|
||||
setzt außerdem die vorherige automatische Freigabe voraus.
|
||||
|
||||
Die Betriebsanzeige nutzt bei eingeschalteter Automatik deren Freigabe
|
||||
(„Bereit (Automatik)“ oder „Ruhiges Bild abwarten (Automatik)“). Der Knopf
|
||||
„Bereich frei (manueller Test)“ ist dafür nicht erforderlich und hebt die
|
||||
automatische Freigabeprüfung nicht auf. Die manuellen Testknöpfe bleiben für
|
||||
separate Versuche verfügbar.
|
||||
|
||||
Sehr langsame, zu schnelle, winzige oder
|
||||
strukturarme Bewegung kann übersehen werden. Nach Auslösung gelten zehn Sekunden
|
||||
Sperrzeit und erneut mindestens zwei Sekunden ruhiges Bild. Ein ruhiges Bild
|
||||
beweist **keinen menschenfreien Bereich**. Stopp, Fehler-Watchdog, bewusstes
|
||||
Rücksetzen und erneute Freigabe nach Start/Konfigurationswechsel bleiben wirksam.
|
||||
Bei bereits gesetzter Fehlersperre nach Auswahl und Speichern bewusst
|
||||
„Nach Stopp zurücksetzen“ drücken.
|
||||
|
||||
Dies ist ein **Bewegungs-Test für die Simulation**, keine Personenerkennung
|
||||
für den späteren Gartenbetrieb. Auch Kamera-/Hintergrundbewegung kann auslösen.
|
||||
Lichtwechsel werden nicht als Richtung behandelt, können aber die Ruhefreigabe
|
||||
verzögern. Bei akzeptiertem Trigger wird ein Bild des grünen Bereichs gespeichert;
|
||||
Besuchermerkmale werden nicht gespeichert.
|
||||
Testereignisse erscheinen separat als „Bewegungs-Test“ (`motion_direction_test`).
|
||||
`/api/detection` liefert zusätzlich flüchtige Bewegungswerte unter `motion`;
|
||||
Config/Status enthalten `method` (`person_line` oder `motion_test`).
|
||||
|
||||
Lokal mit synthetischen Bildern getestet: Richtung/Umkehr/gedrehte Linie,
|
||||
Gegenrichtung, seitliche Bewegung, Helligkeitswechsel, Bereichsgrenzen,
|
||||
Bestätigung, Bildlücken, Sperrzeit und Stopp. Browser-Demo bestätigt Auswahl,
|
||||
Speichern und Wiederherstellung nach Neuladen über die sichtbare UI-Struktur.
|
||||
Echte Pi-Kamera und Nahbereich noch nicht geprüft.
|
||||
|
||||
### Abnahme am echten Pi (noch offen)
|
||||
|
||||
- Angezeigte Rate und Reaktionsverzögerung prüfen; Livebild und Stopp müssen
|
||||
|
||||
Reference in new issue
Block a user