# Der Detector als Image — fuer alle, die nicht erst einen Host einrichten # wollen (venv, Modelle, systemd). Fuer den Dauerbetrieb auf einem eigenen # Erkennungs-Host ist scripts/setup_detector_host.sh weiterhin der direktere # Weg; dieses Image ist der kurze Einstieg. # # Achtung Architektur: ai-edge-litert liefert Wheels fuer x86_64 und arm64. # Ein Raspberry Pi 4/5 mit 64-Bit-System geht damit, ein Pi Zero nicht — dem # fehlt nicht das Wheel, sondern die Rechenleistung. FROM python:3.13-slim WORKDIR /app # curl fuer fetch_models.sh. Bleibt drin, damit sich die Modelle in einem # laufenden Container nachladen lassen, wenn eine Datei kaputt ist. RUN apt-get update \ && apt-get install -y --no-install-recommends curl ca-certificates \ && rm -rf /var/lib/apt/lists/* COPY requirements-detector.txt . RUN pip install --no-cache-dir -r requirements-detector.txt # Die Modelle liegen nicht im Repo (zusammen rund 10 MB) und aendern sich nie # — deshalb beim Bauen holen und nicht bei jedem Start. Eigene Schicht: an den # Modellen aendert sich nichts, wenn sich der Code aendert. COPY scripts/fetch_models.sh scripts/ RUN bash scripts/fetch_models.sh # Beispielfotos fuer 'detector karte' und 'detector test'. # # 🔴 Hier stand bis zum 09.10.2026 "COPY testdata/ ./testdata/" — und damit # liess sich dieses Image aus einem frischen Klon ueberhaupt nicht bauen: # testdata/ steht in .gitignore. Gemerkt hat es niemand, weil immer aus einer # Arbeitskopie gebaut wurde, in der der Ordner lag. # # Die Fotos bleiben aus einem guten Grund draussen: Sie stammen von Wikimedia # Commons, stehen unter CC-Lizenzen und verlangen Namensnennung. Das Skript # holt sie samt Urheber und Lizenz. # # Mit '|| echo', weil ein Bauvorgang nicht daran scheitern soll, dass # Wikimedia gerade drosselt. Ohne die Fotos fehlt nur der Standardwert von # 'detector karte' — die Erkennung selbst braucht sie nicht. COPY scripts/fetch_testdata.sh scripts/ RUN bash scripts/fetch_testdata.sh \ || echo "WARNUNG: Beispielfotos nicht geholt — 'detector karte' braucht dann --vogel" COPY detector/ ./detector/ # Sonst haengen die Ausgaben im Blockpuffer und 'docker logs' ist erst nach # Stunden lesbar — genau dann, wenn man es nicht braucht. ENV PYTHONUNBUFFERED=1 # Rohbilder und Protokoll gehoeren auf ein Volume, sonst sind sie nach dem # naechsten 'docker compose up --build' weg. VOLUME ["/daten"] ENTRYPOINT ["python", "-m", "detector"] CMD ["watch"]