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.
61 lines
2.0 KiB
Desktop File
61 lines
2.0 KiB
Desktop File
# Detector als Dienst auf dem dedizierten Erkennungs-Host.
|
|
#
|
|
# Wird von scripts/setup_detector_host.sh installiert. Von Hand:
|
|
# sudo cp deploy/vogelalbum-detector.service /etc/systemd/system/
|
|
# sudo systemctl daemon-reload && sudo systemctl enable --now vogelalbum-detector
|
|
#
|
|
# Zugangsdaten in /etc/vogelalbum.env (chmod 600, root:root):
|
|
# VOGELALBUM_SOURCE=http://vogelkamera.local:8080/stream
|
|
# VOGELALBUM_API=https://vogelalbum.gaertner.onl
|
|
# VOGELALBUM_TOKEN=<Token aus 'manage.py camera add'>
|
|
# VOGELALBUM_SAVE_TO=/var/lib/vogelalbum/rohdaten
|
|
#
|
|
# Für eine zweite Kamera: Datei als vogelalbum-detector@.service ablegen, %i im
|
|
# EnvironmentFile-Pfad verwenden und je Kamera eine /etc/vogelalbum-<name>.env
|
|
# anlegen. Dann läuft `systemctl enable --now vogelalbum-detector@nistkasten`.
|
|
|
|
[Unit]
|
|
Description=Vogelalbum Detector (Arterkennung am Vogelhaus)
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=vogelalbum
|
|
Group=vogelalbum
|
|
WorkingDirectory=/opt/vogelalbum
|
|
EnvironmentFile=/etc/vogelalbum.env
|
|
Environment=PYTHONUNBUFFERED=1
|
|
|
|
# Die Schwellwerte stehen bewusst hier und nicht im Code: sie gehören zur
|
|
# Kamera, nicht zum Programm. 'gate detector' ignoriert Bewegung — nötig,
|
|
# weil unsere Kamera auf eine Hecke schaut, die im Wind steht.
|
|
# --nachtsicht ergaenzen, wenn die Kamera Infrarot hat. Ohne den Schalter
|
|
# pausiert die Analyse, sobald das Bild zu dunkel zum Erkennen ist.
|
|
ExecStart=/opt/vogelalbum/venv/bin/python -m detector watch \
|
|
--gate detector \
|
|
--classify-every 2 \
|
|
--cooldown 5 \
|
|
--min-bird-frames 1 \
|
|
--verbose
|
|
|
|
# Der Stream reißt nachts gern mal ab; einfach wieder hochkommen.
|
|
Restart=always
|
|
RestartSec=15
|
|
|
|
# Ein Bilderkenner braucht weder Schreibzugriff aufs System noch neue Rechte.
|
|
NoNewPrivileges=true
|
|
PrivateTmp=true
|
|
ProtectSystem=strict
|
|
ProtectHome=true
|
|
ProtectKernelTunables=true
|
|
ProtectControlGroups=true
|
|
RestrictSUIDSGID=true
|
|
ReadWritePaths=/var/lib/vogelalbum
|
|
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|