? Smartes Osterei: Der „Eierscanner 3000“ mit Gesichtserkennung & Belohnungssystem
? Projektidee in einem Satz:
Ein Raspberry Pi erkennt per Kamera, wer vor dem Gerät steht (z. B. Kind oder Familienmitglied), begrüßt die Person per Lautsprecher, und gibt ein Oster-Ei frei, wenn die Person erkannt wurde – natürlich nur einmal pro Tag ?
? Was brauchst du?
- Raspberry Pi 4 (mit WLAN)
- Kamera-Modul (Pi Cam oder USB-Cam)
- Lautsprecher (z. B. USB oder Bluetooth)
- Servo-Motor (zum Öffnen eines Ei-Behälters)
- Kleiner 3D-gedruckter oder gebastelter „Eierspender“
- Python mit OpenCV (für Gesichtserkennung)
- Optional: Display oder LED-Anzeige
? Wie funktioniert’s?
- Gesichtserkennung via Kamera:
Der Pi scannt das Gesicht. Wenn ein bekanntes Gesicht erkannt wird → nächster Schritt. - Sprachausgabe:
Z. B. „Hallo Felix! Frohe Ostern! Hol dir dein Ei!“ - Servo steuert Eierspender:
Ein kleiner Servo öffnet eine Klappe oder schiebt ein Ei in eine Rinne. - Tageszähler pro Person:
Das Skript merkt sich, ob die Person an dem Tag schon ein Ei bekommen hat (z. B. via Timestamp in JSON-Datei oder SQLite).
? Optionaler Nerd-Boost:
- Telegram- oder Discord-Bot → Pi schickt dir jedes Mal ein Bild, wenn ein Ei geholt wird.
- NFC oder QR-Code als „Alternative Authentifizierung“
- Admin-Webinterface für Eltern, um neue Gesichter hinzuzufügen oder die Tageslimits zurückzusetzen.
? Fazit:
Ein lustiges, praktisches und „nerdy“ Osterprojekt, das Kinder (oder Erwachsene ?) begeistert – und gleichzeitig Face Recognition, Hardwaresteuerung und etwas Bastelarbeit vereint.
Geil! Dann kriegst du jetzt das Grundgerüst für deinen „Eierspender 3000“ – ein Raspberry-Pi-Projekt mit Gesichtserkennung, Tageslimit und Servosteuerung.
? Voraussetzungen
Du brauchst:
- Raspberry Pi mit Raspbian OS (aktualisiert)
- PiCam oder USB-Cam
- Servo (z. B. SG90)
- Python 3
- Bibliotheken:
opencv-python
,numpy
,RPi.GPIO
,playsound
oderpygame
für Audio
? Installation vorbereiten (Terminal)
sudo apt update && sudo apt upgrade
sudo apt install python3-pip python3-opencv python3-pygame
pip3 install numpy face-recognition
Für GPIO und Servo:
sudo apt install python3-rpi.gpio
? Projektstruktur
eierspender/
├── faces/ # Gespeicherte Gesichter als Bilddateien
│ ├── toni.jpg
│ └── max.jpg
├── known_faces.py # Gesichtsdaten laden
├── eierspender.py # Hauptskript
├── log.json # Wer hat heute schon ein Ei bekommen?
├── sound.mp3 # Sprachausgabe (z. B. „Frohe Ostern!“)
? known_faces.py – Gesichter vorbereiten
import face_recognition
import os
def load_known_faces(path="faces"):
known_encodings = []
known_names = []
for filename in os.listdir(path):
if filename.endswith(".jpg"):
image_path = os.path.join(path, filename)
image = face_recognition.load_image_file(image_path)
encoding = face_recognition.face_encodings(image)
if encoding:
known_encodings.append(encoding[0])
known_names.append(os.path.splitext(filename)[0])
return known_encodings, known_names
? eierspender.py – Hauptskript
import cv2
import face_recognition
import numpy as np
import datetime
import json
import RPi.GPIO as GPIO
import time
import pygame
from known_faces import load_known_faces
# Setup
SERVO_PIN = 18
ANGLE_OPEN = 7.5 # Justieren je nach Servo
ANGLE_CLOSE = 2.5
LOG_FILE = "log.json"
AUDIO_FILE = "sound.mp3"
# Init GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(SERVO_PIN, GPIO.OUT)
servo = GPIO.PWM(SERVO_PIN, 50) # 50 Hz
servo.start(ANGLE_CLOSE)
# Init Sound
pygame.mixer.init()
# Laden der bekannten Gesichter
known_encodings, known_names = load_known_faces()
# Logik für Tageslimit
def load_log():
try:
with open(LOG_FILE, "r") as f:
return json.load(f)
except:
return {}
def save_log(log):
with open(LOG_FILE, "w") as f:
json.dump(log, f)
def has_received_today(name, log):
today = datetime.date.today().isoformat()
return log.get(name) == today
def update_log(name, log):
today = datetime.date.today().isoformat()
log[name] = today
save_log(log)
def play_audio():
pygame.mixer.music.load(AUDIO_FILE)
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
time.sleep(0.1)
def open_ei_klappe():
print("☀️ Klappe öffnet…")
servo.ChangeDutyCycle(ANGLE_OPEN)
time.sleep(1.5)
servo.ChangeDutyCycle(ANGLE_CLOSE)
# Kamera starten
cap = cv2.VideoCapture(0)
log = load_log()
print("? Warte auf bekannte Gesichter… Drücke STRG+C zum Beenden.")
try:
while True:
ret, frame = cap.read()
if not ret:
continue
rgb_frame = frame[:, :, ::-1] # BGR -> RGB
face_locations = face_recognition.face_locations(rgb_frame)
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
for face_encoding in face_encodings:
matches = face_recognition.compare_faces(known_encodings, face_encoding)
face_distances = face_recognition.face_distance(known_encodings, face_encoding)
best_match = np.argmin(face_distances)
if matches[best_match]:
name = known_names[best_match]
print(f"? {name} erkannt!")
if not has_received_today(name, log):
update_log(name, log)
play_audio()
open_ei_klappe()
else:
print(f"⚠️ {name} hat heute schon ein Ei bekommen.")
time.sleep(2)
except KeyboardInterrupt:
print("? Beende Eierspender.")
cap.release()
GPIO.cleanup()
pygame.quit()
? Was du noch tun musst:
- Lege ein paar
.jpg
-Dateien mit den Gesichtern infaces/
an (z. B.toni.jpg
) - Besorge eine nette MP3-Datei, z. B. „Frohe Ostern!“
- Justiere den Servo-Winkel ggf. nach, je nach Hardware
Inhalt:
eierspender.py
: Hauptskript für Gesichtserkennung und Eierausgabeknown_faces.py
: Lädt bekannte Gesichter aus demfaces/
-Ordnerlog.json
: Log-Datei zur Tagesüberwachungsound.mp3
: Platzhalter für die Abspiel-Audio-Dateifaces/
: Hier kommen deine JPG-Bilder rein (eine pro Person, Dateiname = Name)
Stell sicher, dass du:
sound.mp3
durch eine echte MP3-Datei ersetzt- Bilder deiner bekannten Gesichter in den
faces/
-Ordner legst - Das Ganze auf einem Pi mit Kamera und Servo (an GPIO 18) laufen lässt
