Files
vogelalbum/docs/genauigkeit.md
T
christian cc9e0786c2 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-14 18:55:23 +00:00

139 lines
5.2 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.
# 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.