HEIC annehmen, und "Vogel ohne Art" nicht als "kein Vogel" melden
ZWEI FEHLER, BEIDE HEUTE ENTSTANDEN, BEIDE BEIM BENUTZEN GEFUNDEN. 1. 🔴 HEIC. Minuten nach dem Ausrollen der Bildpruefung wies die Instanz jedes Foto von Christians iPhone mit 400 ab. Die Pruefung war richtig -- sie kannte nur das Format nicht, das die Haelfte aller Telefone erzeugt. Eine App fuer iOS, die kein HEIC annimmt, nimmt nichts an. pillow-heif in requirements-web.txt, Opener registriert, AVIF gleich mit. Fehlt das Paket, sagt die Meldung das jetzt ausdruecklich -- sonst sucht man den Fehler beim Telefon, und er liegt an einem fehlenden Paket auf dem Server. 2. 🔴 "VOGEL JA, ART NEIN" KAM ALS "KEIN VOGEL" AN. Pipeline.run gibt in drei Faellen kein Ergebnis zurueck: nichts gefunden, Beinahe-Treffer, und -- der interessante -- ein sicher erkannter Vogel, dessen Art keine heimische ist. Die Box unterscheidet die Faelle; die Warteschlange hat sie weggeworfen und 0.0 gemeldet. Folge: Ein Foto mit einem Vogel, den der Detektor mit 93 % gefunden hatte, kam in der App als "Kein Vogel erkannt. Auf dem Foto war nichts zu finden" an. Christian hat daraufhin zugeschnitten, wieder und wieder -- gegen ein Problem, das nie der Zuschnitt war. 🔑 EINE FALSCHE AUSKUNFT IST TEURER ALS GAR KEINE. Sie schickt jemanden mit voller Ueberzeugung in die falsche Richtung. Jetzt traegt mean_bird_score den Wert der Box, und frames_with_bird haengt am Vogel statt an der Art. 7 neue Tests. 235 Web + 131 Detector gruen.
This commit is contained in:
1 parent
dbec78aa7a
commit
f7184d193c
6 files changed
+161
-6
No files matched your search
@@ -191,3 +191,41 @@ class UploadWegTests(TestCase):
|
||||
from .models import Sighting
|
||||
|
||||
self.assertEqual(Sighting.objects.count(), 0)
|
||||
|
||||
|
||||
class HeicTests(TestCase):
|
||||
"""🔴 iPhones fotografieren HEIC — eine App für iOS muss es annehmen.
|
||||
|
||||
Am 14.10.2026 wies die Instanz jedes Foto vom Telefon mit 400 ab, Minuten
|
||||
nachdem die Bildprüfung ausgerollt war. Die Prüfung war richtig, nur kannte
|
||||
sie das Format nicht, das die Hälfte aller Telefone erzeugt.
|
||||
"""
|
||||
|
||||
def heic(self, groesse=(400, 300)) -> SimpleUploadedFile:
|
||||
im = Image.new("RGB", groesse, (90, 140, 70))
|
||||
puffer = io.BytesIO()
|
||||
im.save(puffer, format="HEIF")
|
||||
return SimpleUploadedFile("IMG_0042.HEIC", puffer.getvalue(), "image/heic")
|
||||
|
||||
def test_heic_wird_angenommen_und_zu_jpeg(self):
|
||||
from .bilder import HEIC_LESBAR
|
||||
|
||||
self.assertTrue(HEIC_LESBAR, "pillow-heif fehlt — iPhone-Fotos gehen nicht")
|
||||
sauber = saeubern(self.heic())
|
||||
self.assertEqual(gelesen(sauber).format, "JPEG")
|
||||
self.assertTrue(sauber.name.endswith(".jpg"))
|
||||
|
||||
def test_heic_verliert_seine_metadaten_genauso(self):
|
||||
sauber = saeubern(self.heic())
|
||||
self.assertFalse(dict(gelesen(sauber).getexif()))
|
||||
|
||||
def test_heic_ueber_den_app_weg(self):
|
||||
from .tests import make_camera
|
||||
|
||||
make_camera(token="kamera-geheim", mobil=True)
|
||||
resp = self.client.post(
|
||||
"/api/hochladen/",
|
||||
{"bilder": self.heic()},
|
||||
HTTP_AUTHORIZATION="Bearer kamera-geheim",
|
||||
)
|
||||
self.assertEqual(resp.status_code, 201, resp.content)
|
||||
Reference in new issue
Block a user