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.
This commit is contained in:
commit
cc9e0786c2
189 files changed
+29792
No files matched your search
@@ -0,0 +1,57 @@
|
||||
# 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"]
|
||||
Reference in new issue
Block a user