Files
vogelalbum/docs/handyfotos.md
T
christianandClaude Opus 5 dc7db4b603 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>
2026-10-24 17:34:52 +00:00

4.8 KiB
Raw Blame History

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.