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.
This commit is contained in:
commit
c11fe9ab04
189 files changed
+29806
No files matched your search
@@ -0,0 +1,138 @@
|
||||
# Wie gut ist das wirklich
|
||||
|
||||
<sub>[← zurück zum Überblick](../README.md) · [alle Kapitel](README.md)</sub>
|
||||
|
||||
Gemessene Zahlen statt Versprechen: 43 von 44 Arten richtig, keine falsch
|
||||
bestimmt — und daneben das, was im Feld tatsächlich passiert ist, nämlich
|
||||
wochenlang nichts. Beides gehört zusammen.
|
||||
|
||||
`scripts/benchmark.py` jagt echte Vogelfotos durch dieselbe Pipeline, die auch
|
||||
an der Kamera läuft, und vergleicht mit der bekannten Art:
|
||||
|
||||
```bash
|
||||
./venv/bin/python scripts/benchmark.py --referenz web/media/referenz
|
||||
./venv/bin/python scripts/benchmark.py --hole # mehr Bilder von Commons
|
||||
```
|
||||
|
||||
Über 44 Referenzfotos, ein Bild je Gartenvogelart:
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Richtig bestimmt | **43 / 44 — 97,7 %** |
|
||||
| Als unbestimmt verworfen | 1 (Mauersegler, füllt 6 % des Bildes) |
|
||||
| **Falsch bestimmt** | **0** |
|
||||
|
||||
Die Null bei den Falschbestimmungen ist das eigentliche Ergebnis. Bei
|
||||
Unsicherheit schweigt das System, statt zu raten.
|
||||
|
||||
**Diese Zahl ist eine Obergrenze, keine Prognose.** Commons-Fotos sind gut
|
||||
belichtete Nahaufnahmen von Fotografen, die den Vogel im Sucher hatten. Eine
|
||||
feste Kamera am Futterhaus liefert Gegenlicht, Bewegungsunschärfe und halb
|
||||
verdeckte Vögel.
|
||||
|
||||
### Was im Feld tatsächlich passiert ist
|
||||
|
||||
Die Null oben stammt aus Referenzfotos. **Am eigenen Futterhaus sieht es
|
||||
anders aus** — hier die Fälle, die bis zum 30.09.2026 aufgetreten sind.
|
||||
|
||||
#### 🔴 Eine Falschbestimmung mit 94,5 % Sicherheit
|
||||
|
||||
Am 30.09.2026 bestimmte das Modell eine **Kohlmeise als Blaumeise** — und war
|
||||
sich dabei sicherer als bei jeder richtigen Bestimmung davor.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Sicherheit | 0,945 |
|
||||
| Bilder mit Vogel | 5 von 31 |
|
||||
| Der Grund | **Der Kopf war verwischt** |
|
||||
|
||||
Die gelbe Brust mit dem dunklen Längsstreifen war zu sehen, die blaue Kappe
|
||||
nicht — und genau die unterscheidet die beiden Arten. Das Modell musste ohne
|
||||
das entscheidende Merkmal entscheiden und tat es trotzdem mit voller
|
||||
Überzeugung.
|
||||
|
||||
🔑 **Die Sicherheit misst nicht, ob genug zu sehen war.** Sie sagt nur, wie gut
|
||||
das Sichtbare zu einer Art passt. Bei Bewegungsunschärfe kann sie hoch sein und
|
||||
trotzdem falsch liegen — genau der Fall, den der Absatz über die Obergrenze
|
||||
vorhersagt.
|
||||
|
||||
**Korrigieren:**
|
||||
|
||||
```bash
|
||||
./venv/bin/python web/manage.py sichtung_bestimmen 228 kohlmeise --trocken
|
||||
./venv/bin/python web/manage.py sichtung_bestimmen 228 kohlmeise
|
||||
```
|
||||
|
||||
⚠️ **Nicht einfach das Feld im Admin ändern.** An einer Bestimmung hängt der
|
||||
Dex-Eintrag der falschen Art, der Erstfang und die dreifachen Punkte. Der
|
||||
Befehl räumt das mit auf und rechnet die Punkte mit derselben Formel neu, die
|
||||
auch bei der Vergabe gilt.
|
||||
|
||||
#### 🔴 24 Sichtungen von Spiegelungen auf Wasser
|
||||
|
||||
Am 27.09.2026 lieferte die Kamera an der Vogeltränke zwischen **19:01 und
|
||||
19:40** vierundzwanzig Sichtungen. Keine einzige davon war ein Vogel.
|
||||
|
||||
| | Tränke | Futterhaus |
|
||||
|---|---|---|
|
||||
| mittlerer Vogel-Wert | **0,000** | 0,431 |
|
||||
| Bilder mit Vogel | 3,5 % | 25,7 % |
|
||||
|
||||
Die Diagnose am selben Tag: *„Die Fehlmeldungen sind Spiegelungen vom
|
||||
Mond auf der Wasseroberfläche."* Die Uhrzeiten bestätigen es — **alle 24 in
|
||||
derselben Stunde, keine einzige tagsüber.**
|
||||
|
||||
⚠️ **Die Vogelerkennung hat korrekt gearbeitet: Sie meldete null.** Gespeichert
|
||||
wurde trotzdem. **Das ist der eigentliche Fehler** — ein Besuch wird angelegt,
|
||||
obwohl die Erkennung ausdrücklich „kein Vogel" sagt.
|
||||
|
||||
📌 **Noch offen:** eine Untergrenze für den *mittleren* Vogel-Wert. `--min-bird-frames`
|
||||
steht auf 1, `min_bird_score` auf 0,05 — aber nichts prüft den Durchschnitt über
|
||||
den ganzen Besuch. Bei 0,000 dürfte nichts entstehen.
|
||||
|
||||
🔑 **Wasser ist ein anderer Fall als ein Futterhaus.** Eine Tränke spiegelt
|
||||
Himmel, Sonne und Mond, und eine wandernde Lichtfläche sieht für eine
|
||||
Bewegungserkennung aus wie ein Tier.
|
||||
|
||||
#### Das „beste Foto" ist nicht das mit der höchsten Sicherheit
|
||||
|
||||
Beim Korrigieren der Falschbestimmung fiel auf, dass dieselbe verwischte
|
||||
Aufnahme zum besten Foto der Art geworden war:
|
||||
|
||||
```
|
||||
#228 Sicherheit 0,945 5/31 Bilder ← war "bestes Foto"
|
||||
#200 Sicherheit 0,936 23/67 Bilder ← die scharfe Aufnahme
|
||||
```
|
||||
|
||||
**Die Sicherheit sagt, wie sicher sich das Modell bei der Art ist — nicht, ob
|
||||
das Bild etwas taugt.** Seitdem entscheidet `scoring.bildguete`:
|
||||
|
||||
```
|
||||
Anteil der Bilder mit Vogel × mittlerer Vogel-Wert
|
||||
```
|
||||
|
||||
Beides misst dasselbe: *Der Vogel war wirklich und deutlich da.* Wer lange klar
|
||||
im Bild stand, hat auch ein gutes Einzelbild.
|
||||
|
||||
⚠️ **Das ist ein Hilfsmaß, keine Schärfemessung.** Richtig wäre die
|
||||
Laplace-Varianz des gespeicherten Bildes, gemessen im Detector. Das hier kommt
|
||||
ohne Bildverarbeitung aus und trifft in der Praxis dieselbe Wahl.
|
||||
|
||||
### Warum `--min-bird-score` bei 5 % steht
|
||||
|
||||
Gemessen, nicht geraten:
|
||||
|
||||
| `--min-bird-score` | richtig |
|
||||
|---|---|
|
||||
| 0.02 – 0.05 | 43 / 44 |
|
||||
| 0.10 | 40 / 44 |
|
||||
| 0.20 | 38 / 44 |
|
||||
|
||||
Ein zu hoher Wert wirft richtige Bestimmungen weg. Beim Mäusebussard gewinnt
|
||||
global der amerikanische *Buteo lineatus* mit 57 %, unser *Buteo buteo* kommt
|
||||
auf 5 % — innerhalb der deutschen Arten liegt er trotzdem klar vorn. Genau das
|
||||
ist die Nordamerika-Schlagseite, und genau deshalb ist `bird_score` ein Maß
|
||||
für „kenne ich diese Weltgegend", nicht für „ist das ein Vogel".
|
||||
|
||||
Der Katalogumfang kostet dabei nichts: 47 oder 148 Arten in der Whitelist
|
||||
liefern dasselbe Ergebnis.
|
||||
Reference in new issue
Block a user