addet test set

This commit is contained in:
marcinator_2 committed 2026-10-14 17:40:31 +02:00
1 parent d370f992ce
commit b0f35bf3cc
21 files changed
+1796 -183

No files matched your search

+127 -20
View File
@@ -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