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:
christian committed 2026-10-15 14:30:02 +00:00
commit c11fe9ab04
189 files changed
+29806

No files matched your search

+124
View File
@@ -0,0 +1,124 @@
menu "Vogelkamera"
# ⚠ Hier standen bis zum 23.09.2026 WLAN-Name und Passwort. Sie sind
# bewusst entfernt: Zugangsdaten, die beim Bauen eingebacken werden,
# zwingen jeden Nutzer dazu, die Firmware selbst zu uebersetzen. Fuer
# ein veroeffentlichtes Repo ist das untauglich.
#
# Stattdessen: Das Geraet macht beim ersten Start ein eigenes WLAN auf
# und fragt im Browser danach. Siehe netz.c, uebernommen aus Hey Fred.
config VK_PORT
int "HTTP-Port"
default 8080
help
Gleicher Port wie am Pi. Der Detector erwartet
http://<kamera>:8080/stream.
choice VK_BOARD
prompt "Pinbelegung der Kamera"
default VK_BOARD_S3_WROOM
help
Die Pins haengen am Board, nicht am Sensor. Stimmt die Belegung
nicht, scheitert esp_camera_init mit 0x105 (ESP_ERR_NOT_FOUND) —
dann ist es die falsche Wahl hier, nicht die Kamera.
config VK_BOARD_S3_WROOM
bool "ESP32-S3-WROOM CAM (Freenove, Heemol und Klone)"
config VK_BOARD_XIAO_S3
bool "Seeed XIAO ESP32S3 Sense"
config VK_BOARD_AI_THINKER
bool "AI-Thinker ESP32-CAM (klassisch, ESP32 statt S3)"
endchoice
config VK_FRAMESIZE
int "Bildgroesse"
default 13
range 0 21
help
⚠ Die Zahlen sind Positionen in framesize_t aus dem
Kameratreiber -- und die haben sich schon einmal verschoben.
Am 23.09.2026 stand hier "9 = XGA 1024x768"; tatsaechlich war
9 laengst HVGA 480x320. Die Kamera lief daraufhin monatelang
auf einem Sechstel der Flaeche, ohne dass etwas gemeldet haette.
Nach einem Treiber-Update deshalb gegen sensor.h pruefen:
managed_components/espressif__esp32-camera/driver/include/sensor.h
Stand des Treibers vom 23.09.2026:
11 = SVGA 800x600
12 = XGA 1024x768
13 = HD 1280x720 (Vorgabe, wie der Pi am Futterhaus)
14 = SXGA 1280x1024
15 = UXGA 1600x1200
Mehr ist nicht besser: ueber WLAN ist die Bildrate
bandbreitenbegrenzt, nicht rechenbegrenzt. Aber zu klein
findet keine Voegel -- unter 5-8 % Bildflaeche erkennt das
Modell sie nicht mehr.
config VK_JPEG_QUALITAET
int "JPEG-Qualitaet (10 = gut, 63 = grob)"
default 12
range 4 63
help
Kleinere Zahl heisst besseres Bild und groessere Dateien. Bei
knapper Funkstrecke bringt eine hoehere Zahl mehr Bilder pro
Sekunde — und mehr Bilder finden mehr Voegel als schoenere.
config VK_HFLIP
bool "Bild horizontal spiegeln"
default n
config VK_VFLIP
bool "Bild vertikal spiegeln (Kamera haengt ueber Kopf)"
default n
config VK_MAX_FPS
int "Bilder je Sekunde hoechstens senden (0 = ohne Bremse)"
range 0 30
default 5
help
Ohne Bremse sendet die Kamera so schnell die Funkstrecke
hergibt -- gemessen 16 Bilder/s. Das heizt den Chip und
saettigt bei schwachem Empfang die Strecke.
Gebraucht wird es nicht: Ein Vogelbesuch dauert Sekunden bis
Minuten, und der Detector bestimmt nur jedes sechste Bild.
Fuenf sind reichlich.
Gemessen am 25.09.2026 an der Traenke, in der Sonne:
17 B/s -> Plateau 78,8 °C, Empfang -69 dBm
5 B/s -> Plateau 76,7 °C, Empfang -57 dBm
Zwei Grad kuehler, und zwoelf dB mehr Reserve auf der
Funkstrecke. Letzteres war nicht beabsichtigt und ist der
groessere Gewinn.
config VK_SAETTIGUNG
int "Farbsaettigung (-2 bis 2)"
range -2 2
default 2
help
Der Sensor liefert von Haus aus ein flaues Bild. Neben der
Pi-Kamera am Futterhaus faellt das sofort auf. Farbe ist hier
nicht nur Geschmack: Die Arterkennung arbeitet damit.
config VK_KONTRAST
int "Kontrast (-2 bis 2)"
range -2 2
default 1
help
Nicht ans Maximum. Zu viel Kontrast frisst die Zeichnung im
dunklen Gefieder — und genau die braucht der Erkenner.
config VK_HELLIGKEIT
int "Helligkeit (-2 bis 2)"
range -2 2
default 0
help
Nur anfassen, wenn das Bild durchweg zu dunkel oder zu hell
ist. Gegen Gegenlicht hilft eher das Ausrichten.
endmenu