| assets | ||
| systemd | ||
| .gitignore | ||
| capture.py | ||
| LICENSE | ||
| README.md | ||
| setup.sh | ||
| webserver.py | ||
🐧 Messe-Zeitraffer mit KI-Personenerkennung
Zeitraffer-Kamera für Messestände. Macht regelmäßig Fotos, erkennt Personen per KI direkt auf dem Gerät und legt ein Emoji über jeden Kopf — DSGVO-freundlich, ohne Cloud, komplett lokal.
Was es macht
- Alle N Sekunden ein Foto mit der Raspberry Pi Kamera
- Personen im Bild erkennen (YOLOv11 auf Hailo AI HAT+ 2)
- Pinguin-Emoji 🐧 über jeden erkannten Kopf legen
- Original + Emoji-Version speichern
- Webinterface zeigt live das letzte verarbeitete Bild
Die Originalbilder (ohne Emoji) bleiben für den Zeitraffer erhalten. Die Emoji-Versionen sind DSGVO-konform veröffentlichbar.
Hardware
- Raspberry Pi 5 (8 GB)
- Raspberry Pi AI HAT+ 2 (Hailo-10H, 40 TOPS)
- Raspberry Pi Kamera (CSI-Flachbandkabel)
- Raspberry Pi OS Lite (64-bit, Trixie)
Architektur
┌─────────────┐ Queue ┌──────────────────┐
│ CAPTURE │───────────────▶│ PROCESSING │
│ alle Ns │ (LIFO) │ eigenes Tempo │
│ Foto machen │ │ Hailo-Inferenz │
│ Original │ │ Emoji-Overlay │
│ speichern │ │ Web-Update │
└─────────────┘ └──────────────────┘
Zwei entkoppelte Threads: Capture macht pünktlich Fotos (kein Bild geht verloren), Processing arbeitet die Queue ab und priorisiert immer das neueste Bild fürs Webinterface.
Erkennungsstrategie
| Modell | Erkennt | Empfehlung |
|---|---|---|
yolov5s_personface |
Personen + Gesichter | ⭐ Beste Wahl |
yolov11m / yolov8m |
Personen (COCO) | Gut mit Head-Fallback |
scrfd_2.5g |
Nur Gesichter | Schnell, robust |
| OpenCV Haar-Cascade | Gesichter + Oberkörper | Fallback ohne Hailo |
Head-Fallback: Wenn eine Person erkannt wird aber kein Gesicht (weggedreht, verdeckt, zu weit weg), wird der geschätzte Kopfbereich trotzdem mit Emoji überdeckt.
Das Skript erkennt automatisch die Hailo-Architektur (H10/H8/H8L) und wählt nur kompatible Modelle.
Installation
Voraussetzungen
Raspberry Pi OS Lite (64-bit) mit Hailo-Software:
sudo apt install -y hailo-h10-all # Für AI HAT+ 2
# ODER
sudo apt install -y hailo-all # Für AI HAT+
sudo reboot
# Prüfen
hailortcli fw-control identify
Projekt einrichten
git clone https://code.nerdzoom.media/Marius/Messe-Zeitraffer.git
cd Messe-Zeitraffer
sudo apt install -y python3-picamera2 python3-opencv python3-pil fonts-noto-color-emoji
Setup (Autostart + Netzwerk)
sudo bash setup.sh --user $(whoami)
sudo reboot
Das Setup-Skript:
- Konfiguriert eine statische IP (
10.42.0.1) auf eth0 für Direktverbindung per LAN-Kabel - Richtet Systemd-Services mit Autostart ein
- Erkennt automatisch NetworkManager, dhcpcd oder Netplan
- DHCP bleibt parallel aktiv
Manuell testen
python3 capture.py --interval 10
# In einem zweiten Terminal:
python3 webserver.py --port 8080
Nutzung
Automatisch (nach Setup)
Strom anschließen → Pi bootet → Capture + Webserver starten automatisch.
Webinterface
| Verbindung | Adresse |
|---|---|
| LAN-Kabel direkt | http://10.42.0.1 |
| Netzwerk (DHCP) | http://<ip> oder http://<hostname>.local |
Bilder abholen
# Per rsync
rsync -avz pi@<ip>:~/Messe-Zeitraffer/originals/ ./originals/
rsync -avz pi@<ip>:~/Messe-Zeitraffer/penguins/ ./penguins/
Zeitraffer-Video erstellen (auf einem anderen Rechner)
# Aus Originalbildern (NICHT veröffentlichen — Gesichter sichtbar)
ffmpeg -framerate 24 -pattern_type glob -i 'originals/*.jpg' \
-c:v libx264 -pix_fmt yuv420p -crf 18 timelapse_original.mp4
# Aus Pinguin-Bildern (für Veröffentlichung)
ffmpeg -framerate 24 -pattern_type glob -i 'penguins/*.jpg' \
-c:v libx264 -pix_fmt yuv420p -crf 18 timelapse_penguin.mp4
Konfiguration
python3 capture.py --interval 30 # Sekunden zwischen Aufnahmen
--width 2592 # Bildbreite (Standard: voller Sensor)
--height 1944 # Bildhöhe
--model-path X.hef # Expliziter Modellpfad
--no-head-fallback # Kopfbereich-Schätzung deaktivieren
--max-queue 100 # Max Bilder in Warteschlange
Intervall ändern (im laufenden Betrieb)
sudo sed -i 's/--interval [0-9]*/--interval 20/' /etc/systemd/system/timelapse-capture.service
sudo systemctl daemon-reload
sudo systemctl restart timelapse-capture
Eigenes Emoji
Eigenes PNG mit transparentem Hintergrund (min. 128×128 px) nach assets/penguin.png kopieren und Service neustarten.
Ordnerstruktur
Messe-Zeitraffer/
├── capture.py # Hauptskript (Producer/Consumer)
├── webserver.py # Webinterface
├── setup.sh # Einrichtungsskript
├── LICENSE
├── README.md
├── systemd/
│ ├── timelapse-capture.service
│ └── timelapse-web.service
├── assets/
│ └── penguin.png # Emoji-Overlay (austauschbar)
├── originals/ # Originalfotos (unverpixelt!)
├── penguins/ # Fotos mit Emoji über Köpfen
└── web/
├── latest.jpg # Aktuelles Bild für Webinterface
└── meta.json # Metadaten
Performance
| Schritt | Dauer |
|---|---|
| Foto aufnehmen | ~200 ms |
| Hailo-Inferenz (YOLOv11m) | ~100–150 ms |
| Emoji-Overlay (PIL) | ~50–100 ms |
| JPEG speichern | ~100–200 ms |
| Gesamt | ~0.5–1 s |
Speicherplatz: ~900 KB pro Bild bei 2592×1944. Bei 10s Intervall und 10h Messetag: ~6,4 GB (Original + Pinguin).
Hinweise
- DSGVO: Hinweisschild am Messestand aufstellen. Originalbilder enthalten unverpixelte Gesichter — nur die Pinguin-Version veröffentlichen.
- Kamera: Etwas erhöht aufstellen für besseren Überblick. Voller Sensor-Modus nutzt das komplette Sichtfeld.
- Offline: Funktioniert komplett ohne Netzwerk. LAN-Kabel nur fürs Webinterface.
- Powerbank: Pi 5 + AI HAT+ 2 braucht ein USB-PD-Netzteil mit 5V/5A Profil. Manche Powerbanks liefern das nicht —
PSU_MAX_CURRENT=5000im EEPROM kann helfen.
Lizenz
MIT — siehe LICENSE.