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.
125 lines
4.5 KiB
Plaintext
125 lines
4.5 KiB
Plaintext
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
|