Files
vogelalbum/docker-compose.detector.yml
T
christian cc9e0786c2 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.
2026-10-14 18:55:23 +00:00

67 lines
2.9 KiB
YAML

# Nur die Erkennung: der Rechner mit Sichtverbindung zur Kamera, der an eine
# Sammlung woanders liefert.
#
# cp .env.beispiel .env # Abschnitt "Nur der Detector" ausfuellen
# docker compose -f docker-compose.detector.yml up -d
#
# Der typische Fall: Die Sammlung steht oeffentlich im Internet, die Kameras
# stehen zu Hause. Dieser Container gehoert ins Heimnetz, in dasselbe Netz wie
# die Kamera.
#
# 🔑 **Nach aussen muss dafuer kein Port offen sein.** Die Verbindung geht nur
# in eine Richtung: Der Detector meldet ausgehend an die Sammlung, die
# Sammlung erreicht ihn nie. Kein Portforwarding, kein Tunnel, kein DynDNS.
#
# ⚠️ Architektur: ai-edge-litert gibt es als Wheel fuer x86_64 und arm64. Ein
# Raspberry Pi 4/5 mit 64-Bit-System traegt den Detector, ein Pi Zero nicht —
# dem fehlt nicht das Wheel, sondern die Rechenleistung.
#
# Fuer mehrere Kameras: diese Datei je Kamera mit eigenem Projektnamen und
# eigenem Token starten, siehe docs/betrieb.md.
name: vogelalbum-detector
services:
detector:
build:
context: .
dockerfile: Dockerfile.detector
restart: unless-stopped
environment:
VOGELALBUM_SOURCE: ${VOGELALBUM_SOURCE:?Stream-URL der Kamera, siehe .env.beispiel}
# Wohin gemeldet wird. Anders als bei docker-compose.heim.yml steht die
# Sammlung hier NICHT im selben Compose-Netz, also die volle Adresse —
# mit https://, wenn sie oeffentlich steht.
VOGELALBUM_API: ${VOGELALBUM_API:?Adresse der Sammlung, z.B. https://vogelalbum.example.org}
# Der Token DIESER Kamera, angelegt mit 'manage.py camera add'. Auf
# einer oeffentlichen Instanz hat jede Kamera ihren eigenen; der
# gemeinsame VOGELALBUM_INGEST_TOKEN bleibt dort leer.
VOGELALBUM_TOKEN: ${VOGELALBUM_TOKEN:?Token dieser Kamera, siehe manage.py camera add}
VOGELALBUM_GATE: ${VOGELALBUM_GATE:-detector}
VOGELALBUM_SAVE_TO: /daten/rohdaten
VOGELALBUM_PROTOKOLL: /daten/protokoll.csv
VOGELALBUM_NACHTSICHT: ${VOGELALBUM_NACHTSICHT:-}
VOGELALBUM_REGION: ${VOGELALBUM_REGION:-de}
# Schwellwerte und Artenliste holt sich der Detector von der Sammlung.
# Faellt sie aus, laeuft er mit dem letzten Stand weiter und warnt nur.
VOGELALBUM_KONFIG_ALLE: ${VOGELALBUM_KONFIG_ALLE:-300}
VOGELALBUM_LIVE_PORT: ${VOGELALBUM_LIVE_PORT:-0}
command:
- watch
- --classify-every=2
- --cooldown=5
- --min-bird-frames=1
- --verbose
# Gueltige Portnummer als Vorgabe, nicht 0 — Compose weist "0:0" ab, siehe
# die ausfuehrliche Begruendung in docker-compose.heim.yml. Ob etwas
# lauscht, entscheidet VOGELALBUM_LIVE_PORT oben.
ports:
- "${VOGELALBUM_LIVE_PORT:-8131}:${VOGELALBUM_LIVE_PORT:-8131}"
volumes:
# Rohbilder und Protokoll. Die Rohbilder sind spaeter das Material fuer
# ein Nachtraining — deshalb ein Volume und kein tmpfs.
- vogelalbum-rohdaten:/daten
volumes:
vogelalbum-rohdaten: