Files
vogelalbum/docs/einstellungen.md
T
christian c11fe9ab04 Vogelalbum 1.0.0
Eine Kamera am Vogelhaus, ein Rechner der erkennt wer da war — und eine
Sammlung, die sich von allein fuellt.

Zwei neuronale Netze: eines findet den Vogel im Bild, eines bestimmt die
Art. 148 heimische Arten, auf Deutschland eingeschraenkt und neu normiert —
ohne diese Einschraenkung wird aus einer Kohlmeise eine nordamerikanische
Schwesterart. Daraus entsteht ein Sammelalbum: nummerierte Seiten,
gefundene Arten in Farbe, fehlende als Schatten, dazu Erstfang, Punkte,
Stufen und 15 Abzeichen.

Laeuft vollstaendig auf eigener Hardware. Kein Cloud-Dienst, kein Konto,
keine Telemetrie; die Bilder verlassen das eigene Netz nicht.

Zwei getrennt deploybare Teile: die Sammlung als Django-Anwendung, die
Erkennung als eigener Dienst. Der Erkennungs-Dienst fragt selbst an und
braucht deshalb weder eine erreichbare Adresse noch einen offenen Port —
er laeuft hinter einem gewoehnlichen Router.

Dabei: Firmware fuer Raspberry Pi und ESP32-S3, Anbindung an Home
Assistant ueber MQTT, Oberflaeche auf Deutsch und Englisch, Einstellungen
je Kamera aus dem Browser, und ein Weg fuer Fotos von unterwegs.

AGPL-3.0.
2026-10-15 14:30:02 +00:00

90 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Einstellungen
<sub>[← zurück zum Überblick](../README.md) · [alle Kapitel](README.md)</sub>
Alles, was Detector und Web-App über Umgebungsvariablen annehmen — und was
man stattdessen im Admin einstellen kann, ohne einen Prozess anzufassen.
### Detector
| Schalter | Standard | Zweck |
|---|---|---|
| `--source` | — | Stream-URL, RTSP-URL oder Ordner |
| `--api` / `--token` | — | Wohin gemeldet wird |
| `--save-to` | — | Ordner für Rohbilder je Sichtung |
| `--gate` | `motion` | `detector` ignoriert Bewegung — nötig bei unruhigem Hintergrund |
| `--habitats` | `garten` | Lebensräume, die in Frage kommen |
| `--min-bird-score` | `0.05` | Darunter gilt die Art als unbestimmt |
| `--detect-threshold` | `0.4` | Ab wann etwas als Vogel gilt |
| `--classify-every` | `3` | Nur jedes n-te Bild durchs Modell |
| `--cooldown` | `4.0` | Sekunden Ruhe, bis ein Besuch endet |
| `--min-bird-frames` | `2` | Weniger Treffer → verworfen |
| `--min-confidence` | `0.45` | Darunter „unbestimmt" statt geraten |
| `--nachtsicht` | aus | Nie bei Dunkelheit pausieren |
| `--dunkel-unter` / `--hell-ueber` | `15` / `30` | Helligkeitsschwellen 0–255 |
| `--motion-ratio` | `0.012` | Anteil bewegter Pixel für einen Besuch |
Alles auch als Umgebungsvariable mit Präfix `VOGELALBUM_`, etwa
`VOGELALBUM_SOURCE`, `VOGELALBUM_TOKEN`, `VOGELALBUM_HABITATS`.
### Web-App
| Variable | Zweck |
|----------|-------|
| `DJANGO_SECRET_KEY` | **Pflicht**, sobald `DJANGO_DEBUG=0`. Ohne startet die App nicht. |
| `DJANGO_DEBUG` | `0` im Betrieb |
| `DJANGO_ALLOWED_HOSTS` | kommagetrennt |
| `DJANGO_CSRF_TRUSTED_ORIGINS` | kommagetrennt, mit Schema |
| `VOGELALBUM_INGEST_TOKEN` | Sammel-Token; leer lassen, wenn jede Kamera einen eigenen hat |
| `SQLITE_DIR` | Datenbank auf ein Volume legen |
| `MEDIA_ROOT` | Fotos auf ein Volume legen |
## Einstellungen im Admin statt auf der Kommandozeile
Bis vor kurzem stand die Konfiguration des Detectors nur auf seiner
Kommandozeile: Stream-Adresse, Schwellen, Lebensräume. Wer eine Kamera
umstellen wollte, brauchte eine Shell auf dem Rechner, auf dem der Detector
läuft. Jetzt fragt der Detector die Web-App:
```bash
python -m detector watch --api http://vogelalbum:8000 --token <Kamera-Token>
```
Damit holt er sich bei `/api/config/` alle 300 Sekunden, was für *seine*
Kamera gilt — und übernimmt Änderungen **ohne Neustart**. Einstellbar im
Django-Admin unter der Kamera:
| Feld | Wirkung |
|---|---|
| Stream-Adresse | Woher die Bilder kommen. `--source` hat Vorrang. |
| Lebensräume | Welche Arten der Klassifikator erwägt (`garten`, `wald`, `offenland`, `wasser`, `gebirge`) |
| Schwelle Vogelerkennung | Ab welcher Sicherheit etwas als Vogel gilt |
| Mindestanteil heimischer Arten | Darunter gilt die Sichtung als unbestimmt |
Die **Artenliste kommt mit** — sie ist eine inhaltliche Entscheidung und
gehört in den Admin, nicht in eine Python-Datei. Der wissenschaftliche Name
ist dabei der Schlüssel ins Label-File des Modells; ein zweites Mapping
braucht es nicht.
Zwei Eigenschaften sind wichtiger als die Funktion selbst:
- **Die Kommandozeile bleibt gültig.** Ohne `--token` ändert sich nichts, und
ein ausdrücklich gesetztes `--source` gewinnt immer.
- **Ein Ausfall ändert nichts.** Antwortet die Web-App nicht, läuft die
Erkennung mit dem letzten bekannten Stand weiter. Wer zwei Wochen auf den
ersten Vogel wartet, will ihn nicht verpassen, weil ein Webserver neu
gestartet wurde.
`--konfig-alle 0` schaltet das Nachfragen ab.
### Regionen
Das iNat-Modell kennt 965 Arten und ist **auf Nordamerika trainiert** — ohne
Einschränkung wird aus einer Kohlmeise eine Carolina Chickadee. Welche Arten
gelten, entscheidet deshalb `VOGELALBUM_REGION` (Standard `de`) gegen das Feld
`regions` der Art.
Eine weitere Region ist damit kein Umbau mehr, sondern ein Katalog: Arten mit
dem passenden Kürzel anlegen und die Variable umstellen. Für Nordamerika
arbeitet das Modell sogar in seiner Trainingsverteilung, also besser als hier.