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

+33
View File
@@ -0,0 +1,33 @@
# Generated by Django 6.1 on 2026-10-14 18:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dex', '0015_camera_min_mean_bird_score'),
]
operations = [
migrations.AddField(
model_name='sighting',
name='box_x0',
field=models.FloatField(blank=True, null=True, verbose_name='Vogel: links'),
),
migrations.AddField(
model_name='sighting',
name='box_x1',
field=models.FloatField(blank=True, null=True, verbose_name='Vogel: rechts'),
),
migrations.AddField(
model_name='sighting',
name='box_y0',
field=models.FloatField(blank=True, null=True, verbose_name='Vogel: oben'),
),
migrations.AddField(
model_name='sighting',
name='box_y1',
field=models.FloatField(blank=True, null=True, verbose_name='Vogel: unten'),
),
]