Zugeschnittene Fotos ohne Sucher bestimmen

Ein Handyfoto ist das Gegenteil einer Kameraaufnahme: Jemand zielt auf den
Vogel. Unterhalb von rund einem Viertel Bildflaeche findet SSD-MobileNet ihn
nicht mehr (12 % Flaeche: 38 % gefunden, 6 %: 10 %, 2 %: 0 %) — und auf einem
Zuschnitt, der nur noch aus Vogel besteht, meldet es sich ueberhaupt nicht.

run_zuschnitt() ueberspringt den Sucher. Gemessen an schwierigen Aufnahmen:
aus 'nichts gefunden' wird Haussperling 93 %.

Dabei faellt der Sucher als Torwaechter weg. Die erste Fassung liess
min_bird_score (0.05) entscheiden und gab fuer eine graue Wand Fischadler
20 % zurueck; ueber 148 Vogelbilder und 71 Hintergrundausschnitte kommen bei
dieser Schwelle 82 % der Hintergruende durch. Das Tor ist jetzt die
Sicherheit des besten Treffers (0.45: 96 % der Voegel, 14 % Hintergrund)
zusammen mit min_bird_score.

Alle Messungen stehen in docs/handyfotos.md, auch die dort als verworfen
dokumentierte Kachelsuche.

Die Pruefbilder liegen bewusst NICHT hier: Dieses Repo ist oeffentlich, die
Aufnahmen sind privat. Sie liegen in der Nextcloud unter
Projekte/Vogelalbum/Pruefbilder; 'pruefbilder/' steht in der .gitignore.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
christianandClaude Opus 5 committed 2026-10-24 17:34:52 +00:00
1 parent c11fe9ab04
commit dc7db4b603
4 files changed
+252

No files matched your search

+121
View File
@@ -0,0 +1,121 @@
# Handyfotos: was gemessen wurde
Stand 24.10.2026. Anlass war Christians Befürchtung, die Erkennungsrate bei
Handyaufnahmen werde „grauenhaft schlecht". Sie war berechtigt — nur aus
einem anderen Grund als zunächst vermutet.
🔴 **Die Prüfbilder liegen NICHT im Repo** — es ist öffentlich, die
Aufnahmen sind private Fotos (Garten, Reisen, Zoo). Sie liegen in der
Nextcloud unter `Projekte/Vogelalbum/Pruefbilder`: `handy/` (18 Aufnahmen)
und `handy-schwer/` (4 bewusst schwierige). Zum Messen dorthin kopieren;
`pruefbilder/` steht in der `.gitignore`, damit sie nicht versehentlich
mitwandern.
Wer an der Erkennung etwas ändert, misst gegen diesen Satz.
## Was die Kette heute leistet
18 echte Handyaufnahmen, Sollwerte von Hand gesetzt:
| Verfahren | richtig | falsch | verpasst |
|---|---|---|---|
| Kette wie sie ist | 15/18 | 2 | 1 |
| nur ganzes Bild bestimmen | 14/18 | 4 | 0 |
| besser von beidem | 15/18 | 3 | 0 |
Sechs der achtzehn zeigen Arten, die nicht im Katalog stehen (Pfau, Pelikan,
zwei Hähne, Huhn, eine amerikanische Möwe). Fünf davon lehnt die Kette
richtig ab — das ist kein Fehlschlag, sondern die gewünschte Zurückhaltung.
🔑 **Der Sucher vor der Bestimmung ist kein Ballast.** Ihn wegzulassen und
immer das ganze Bild zu bestimmen macht das Ergebnis schlechter, nicht
besser. Beim Höckerschwan auf dem Teich wird daraus ein Silberreiher.
## Wo es wirklich bricht: die Bildfläche
Dieselben Referenzvögel, künstlich verkleinert in eine Szene gesetzt:
| Vogel füllt | Sucher findet ihn |
|---|---|
| 81 % der Fläche | 98 % |
| 49 % | 93 % |
| 25 % | 75 % |
| 12 % | 38 % |
| 6 % | 10 % |
| 2 % | 0 % |
Unterhalb von etwa einem Viertel Bildfläche bricht es weg. Der Grund ist
mechanisch: Der Sucher skaliert jedes Bild auf 300 × 300 Pixel. Ein Vogel bei
12 % der Breite ist danach 36 Pixel groß.
**Das ist der Normalfall für Gartenvögel.** Eine Blaumeise aus fünf Metern
füllt ein bis zwei Prozent.
## Die Lösung: zuschneiden und den Sucher überspringen
Von Hand auf den Vogel gezogen, an den schwierigen Aufnahmen gemessen:
| Bild | Kette heute | zugeschnitten |
|---|---|---|
| schwer-03 | nichts gefunden | **Haussperling 93 %** |
| schwer-04 | nichts gefunden | Haussperling 50 % |
| schwer-01 | Haussperling 17 % | Feldsperling, weiterhin wackelig |
| schwer-02 | nichts gefunden | nichts — Silhouette gegen Himmel, da ist keine Information drin |
🔴 **Auf keinem dieser Zuschnitte meldet sich der Sucher.** SSD-MobileNet ist
auf Objekte in einer Szene trainiert, nicht auf formatfüllende Tiere. Ein
perfekt zugeschnittenes Bild bekäme also weiterhin „kein Vogel gefunden" —
deshalb `Pipeline.run_zuschnitt`, das ihn übergeht.
### Und warum das ein eigenes Tor braucht
Ohne Sucher fehlt dessen Torwächterrolle. Die erste Fassung ließ
`min_bird_score` (0,05) entscheiden und gab für eine **graue Wand**
„Fischadler 20 %" zurück. Über 148 Vogelbilder und 71 Hintergrundausschnitte
gemessen:
| Schwelle auf die Sicherheit | Vögel durch | Hintergrund fälschlich durch |
|---|---|---|
| 0,33 | 100 % | 34 % |
| 0,40 | 97 % | 17 % |
| **0,45** | **96 %** | **14 %** |
| 0,50 | 93 % | 8 % |
`min_bird_score` allein bei 0,05: 97 % der Vögel — aber auch **82 % der
Hintergründe**. Als Tor taugt er nicht; er beantwortet „welche Art", nicht
„überhaupt ein Vogel".
Gewählt ist 0,45 **und** `bird_score ≥ 0,05`, weil die beiden Verschiedenes
prüfen. Die verbleibenden 14 % sind Laub und Geäst, das bei dieser Auflösung
wirklich wie ein Vogel aussieht — deshalb zeigt die App die Alternativen mit
an.
## Verworfen: Kacheln
Die Idee, das Bild in überlappende Kacheln zu zerlegen und in jeder zu
suchen, sah zunächst sehr gut aus:
| Vogel füllt | heute | 2×2 | 3×3 |
|---|---|---|---|
| 12 % | 38 % | 85 % | 92 % |
| 6 % | 10 % | 72 % | 75 % |
| 2 % | 0 % | 5 % | 22 % |
⚠️ **Diese Zahlen hingen am Hintergrund.** Die Vögel saßen auf neutralem
Grau; zoomt man dort hinein, steht der Vogel allein und scharf da. Vor echten
Hintergründen schrumpft der Gewinn auf ein schmales Band (bei 6 % Fläche
3 % → 40 %, darunter nichts), und an den 22 echten Fotos änderte sich **ein**
Ergebnis — zum Schlechteren: Die Kacheln zerschneiden eine Gänsegruppe und
machen daraus eine Straßentaube.
Dazu zehnfache Rechenzeit (118 ms → 1362 ms).
**Christians Entscheidung am 24.10.2026: nicht einbauen.** Der Weg über den
Zuschnitt von Hand deckt denselben Fall ab, ohne zu raten. Der Code ist
wieder entfernt; diese Notiz steht hier, damit die Idee nicht in einem halben
Jahr noch einmal von vorn ausprobiert wird.
🔑 **Die Lehre, die über dieses Projekt hinausgeht:** Ein synthetischer
Prüfstand, der den Hintergrund wegvereinfacht, misst die Aufgabe nicht mehr,
die gelöst werden soll. Ich hatte aus ihm einen Gewinn von 38 auf 92 Prozent
abgeleitet und war bereit, danach zu bauen.