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.1 KiB
Plaintext
61 lines
2.1 KiB
Plaintext
# Ziel ist der ESP32-S3 mit 8 MB PSRAM (N16R8-Module).
|
|
CONFIG_IDF_TARGET="esp32s3"
|
|
|
|
# Ohne PSRAM passt kein JPEG-Framebuffer in den Speicher. Octal ist bei den
|
|
# R8-Modulen richtig; bei einem R2/R8-Quad-Modul stattdessen QUAD waehlen,
|
|
# sonst findet die Kamera keinen Puffer.
|
|
CONFIG_SPIRAM=y
|
|
CONFIG_SPIRAM_MODE_OCT=y
|
|
CONFIG_SPIRAM_SPEED_80M=y
|
|
CONFIG_SPIRAM_USE_MALLOC=y
|
|
CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
|
|
|
|
# 16 MB Flash (N16R8).
|
|
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
|
|
CONFIG_PARTITION_TABLE_CUSTOM=y
|
|
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
|
|
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
|
|
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
|
|
|
|
# Die Funkstrecke ist der Engpass, nicht die CPU: mehr und groessere
|
|
# Sendepuffer heben die Bildrate deutlich mehr als ein schnellerer Takt.
|
|
CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM=16
|
|
CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32
|
|
CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32
|
|
CONFIG_ESP_WIFI_TX_BA_WIN=16
|
|
CONFIG_ESP_WIFI_RX_BA_WIN=16
|
|
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65534
|
|
CONFIG_LWIP_TCP_WND_DEFAULT=65534
|
|
|
|
# Volle Taktrate — JPEG kommt fertig aus dem Sensor, aber das Umkopieren in
|
|
# die Sendepuffer laeuft auf der CPU.
|
|
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
|
|
|
|
# Der Stream haelt einen Socket dauerhaft offen; /status braucht daneben Platz.
|
|
CONFIG_LWIP_MAX_SOCKETS=10
|
|
|
|
# Ein Geraet im Garten soll sich selbst erholen statt stumm zu bleiben.
|
|
CONFIG_ESP_TASK_WDT_EN=y
|
|
CONFIG_ESP_TASK_WDT_TIMEOUT_S=30
|
|
CONFIG_ESP_INT_WDT=y
|
|
|
|
# Kameraframes gehoeren ins PSRAM, nicht ins knappe interne RAM.
|
|
CONFIG_CAMERA_CORE0=y
|
|
|
|
# Kamera haengt ueber Kopf: beide Spiegelungen zusammen ergeben 180 Grad.
|
|
# ⚠ Gilt fuer JEDES Geraet aus diesem Baum -- wer eine Kamera anders
|
|
# herum montiert, braucht hier einen eigenen Stand. Gemeldet am
|
|
# 24.09.2026, nachdem die Traenke haengt: "Bild muss um 180 grad gedreht
|
|
# werden."
|
|
# CONFIG_VK_HFLIP is not set
|
|
CONFIG_VK_VFLIP=y
|
|
|
|
# Farbe: der Sensor liefert von Haus aus ein flaues Bild.
|
|
CONFIG_VK_SAETTIGUNG=2
|
|
CONFIG_VK_KONTRAST=1
|
|
CONFIG_VK_HELLIGKEIT=0
|
|
|
|
# Bremse fuer den Bildstrom. Ohne sie sendet die Kamera mit Anschlag --
|
|
# das heizt und saettigt die Funkstrecke, ohne der Erkennung zu nuetzen.
|
|
CONFIG_VK_MAX_FPS=5
|