Bemerkung

Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie mit anderen Enthusiasten tiefer in Raspberry Pi, Arduino und ESP32 ein.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Sneak Peeks.

  • Sonderrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Bereit, mit uns zu entdecken und zu gestalten? Klicken Sie auf [here] und treten Sie noch heute bei!

1. Gesichtserkennung

In diesem Abschnitt wird gezeigt, wie das MediaPipe Face Mesh-Modul auf einem Raspberry Pi für die Echtzeit-Gesichtserkennung und das Zeichnen eines Gesichts-Landmark-Meshes verwendet wird.

../_images/mp_face_mesh_demo.png

MediaPipe ist ein plattformübergreifendes Framework für Machine-Learning-Pipelines, das von Google entwickelt wurde und die Echtzeitverarbeitung von Video-Streams und Bildern unterstützt. Das Face-Mesh-Modul ist ein von MediaPipe bereitgestelltes Modell für Echtzeit-Gesichtserkennung und Landmark-Tracking und kann zur Entwicklung verschiedener Anwendungen für Gesichtserkennung und Interaktion verwendet werden.

Im Vergleich zur Haar-Erkennung von OpenCV verwendet MediaPipe ein Deep-Learning-Modell zur Erkennung und bietet:

  • Höhere Genauigkeit

  • Bessere Robustheit gegenüber unterschiedlichen Lichtverhältnissen und Blickwinkeln

  • Unterstützung für Gesichts-Landmark-Tracking (468 Punkte)

  • Nahtlose Integration mit OpenCV, wodurch die Erkennungsergebnisse direkt auf dem Videostream dargestellt werden können.

1. Code ausführen

Wichtig

Stellen Sie vor dem Start sicher, dass:

  • das Pan-Tilt-Modul montiert ist

  • Sie Zugriff auf den Raspberry Pi Desktop haben

  • das Codepaket installiert ist

  • das Fusion HAT+ installiert und konfiguriert ist

  • OpenCV installiert ist

Detaillierte Anweisungen finden Sie unter 0. OpenCV einrichten.

  1. Öffnen Sie das Terminal und geben Sie den folgenden Befehl ein:

    sudo python3 ~/ai-lab-kit/mediapipe/mp_face.py
    
  2. Nach dem Start des Skripts öffnet OpenCV ein Fenster mit dem Titel „Show Video“ und zeigt den Live-Videostream der Raspberry-Pi-Kamera an.

    • Wenn ein Gesicht vor der Kamera erscheint, erkennt das Programm es und zeichnet in Echtzeit ein detailliertes Gesichts-Landmark-Mesh auf das Gesicht. Das Mesh verfolgt Gesichtsbewegungen flüssig, während sich die Person bewegt, blinzelt oder ihre Mimik verändert.

    • Wenn kein Gesicht erkannt wird, zeigt das Fenster weiterhin den normalen Kamerastream ohne Landmarken an.

    Der Videostream läuft kontinuierlich weiter, bis der Benutzer das Programm beendet. Zum Beenden drücken Sie die Taste q auf der Tastatur. Die Kamera wird gestoppt und alle OpenCV-Ressourcen werden automatisch freigegeben.

2. Codebeispiel

Der vollständige Code ist unten dargestellt:

from picamera2 import Picamera2
import cv2
import mediapipe.python.solutions.face_mesh as mp_face_mesh
import mediapipe.python.solutions.drawing_utils as drawing
import mediapipe.python.solutions.drawing_styles as drawing_styles

# Initialize the mp_face_mesh model
face = mp_face_mesh.FaceMesh(
    static_image_mode=False,          # Set to False for video streams
    max_num_faces=1,                  # Maximum number of faces to detect
    refine_landmarks=True,           # Whether to refine landmarks
    min_detection_confidence=0.5     # Detection confidence threshold
)

# Open Raspberry Pi camera
picam2 = Picamera2()
config = picam2.create_preview_configuration(
    main={"size": (640, 480), "format": "XRGB8888"},
)
picam2.configure(config)
picam2.start()

print("Streaming... press 'q' to quit")

while True:
    frame_bgra = picam2.capture_array()               # XRGB8888 → BGRA
    frame_bgr  = cv2.cvtColor(frame_bgra, cv2.COLOR_BGRA2BGR)

    # Convert BGR to RGB (MediaPipe requires RGB)
    frame = cv2.cvtColor(frame_bgr, cv2.COLOR_BGR2RGB)

    # Face detection and landmark tracking
    results = face.process(frame)

    # Convert RGB back to BGR (for OpenCV display)
    frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)

    # Draw detected facial landmarks
    if results.multi_face_landmarks:
        for face_landmarks in results.multi_face_landmarks:
            drawing.draw_landmarks(
                image=frame,
                landmark_list=face_landmarks,
                connections=mp_face_mesh.FACEMESH_TESSELATION,
                landmark_drawing_spec=drawing.DrawingSpec(thickness=1, circle_radius=1),
                connection_drawing_spec=drawing_styles.get_default_face_mesh_tesselation_style()
            )

    cv2.imshow("Show Video", frame)
    if cv2.waitKey(1) & 0xff == ord('q'):
        break

picam2.stop_preview()
picam2.stop()
cv2.destroyAllWindows()

Nach dem Ausführen des Programms sehen Sie den Live-Kamerastream, und sobald ein Gesicht erkannt wird, wird automatisch ein Gesichts-Mesh darüber gelegt.


3. Erklärung der wichtigsten Schritte

  1. Bibliotheken importieren

    from picamera2 import Picamera2
    import cv2
    import mediapipe.python.solutions.face_mesh as mp_face_mesh
    import mediapipe.python.solutions.drawing_utils as drawing
    import mediapipe.python.solutions.drawing_styles as drawing_styles
    

    Diese Bibliotheken werden verwendet, um:

    • die Raspberry-Pi-Kamera zu steuern

    • Bilder zu verarbeiten und anzuzeigen

    • Gesichts-Landmarks zu erkennen

  2. FaceMesh initialisieren

    face = mp_face_mesh.FaceMesh(
        static_image_mode=False,
        max_num_faces=1,
        refine_landmarks=True,
        min_detection_confidence=0.5
    )
    

    Dadurch wird das Gesichtserkennungsmodell erstellt. Es verfolgt kontinuierlich ein Gesicht im Videomodus.

  3. Kamera starten

    picam2 = Picamera2()
    config = picam2.create_preview_configuration(
        main={"size": (640, 480), "format": "XRGB8888"},
    )
    picam2.configure(config)
    picam2.start()
    

    Die Kamera beginnt mit dem Streaming bei einer Auflösung von 640×480.

  4. Frames in einer Schleife erfassen

    while True:
        frame_bgra = picam2.capture_array()
        frame_bgr  = cv2.cvtColor(frame_bgra, cv2.COLOR_BGRA2BGR)
    

    In jeder Schleifeniteration wird ein Frame aufgenommen und für OpenCV in das passende Format konvertiert.

  5. Gesichts-Landmarks erkennen

    frame = cv2.cvtColor(frame_bgr, cv2.COLOR_BGR2RGB)
    results = face.process(frame)
    

    Das Frame wird in das RGB-Format konvertiert. MediaPipe analysiert anschließend das Bild und erkennt die Gesichts-Landmarks.

  6. Gesichts-Mesh zeichnen

    if results.multi_face_landmarks:
        drawing.draw_landmarks(
            image=frame,
            landmark_list=results.multi_face_landmarks[0],
            connections=mp_face_mesh.FACEMESH_TESSELATION
        )
    

    Wenn ein Gesicht erkannt wird, wird ein Mesh darüber gezeichnet.

  7. Ergebnis anzeigen und Programm beenden

    cv2.imshow("Show Video", frame)
    if cv2.waitKey(1) & 0xff == ord('q'):
        break
    

    Drücken Sie q, um das Programm zu beenden. Die Kamera wird anschließend automatisch geschlossen.

4. Häufige Probleme und Fehlerbehebung

  • Kamera kann nicht geöffnet werden

    • Stellen Sie sicher, dass das CSI-Kamerakabel korrekt angeschlossen ist

    • Aktivieren Sie die Kameraschnittstelle:

      sudo raspi-config → Interface Options → Camera

    • Starten Sie den Raspberry Pi nach der Aktivierung neu

  • Programm startet langsam

    Beim ersten Start wird das MediaPipe-Modell geladen, was einige Sekunden dauern kann. Das ist normal. Nachfolgende Starts erfolgen schneller.

  • Instabile Erkennung / Verzögerungen

    • Reduzieren Sie die Kameraauflösung (z. B. 320×240)

    • Deaktivieren Sie refine_landmarks, um die CPU-Auslastung zu reduzieren

    • Schließen Sie andere laufende Programme

  • Kein Modul namens mediapipe

    Installieren Sie MediaPipe:

    pip install mediapipe
    

    Stellen Sie sicher, dass Sie ein 64-Bit-Raspberry-Pi-OS verwenden.

5. Zusammenfassung

  • MediaPipe FaceMesh verwendet ein Deep-Learning-Modell, um hochpräzise Gesichtserkennung auf dem Raspberry Pi zu ermöglichen

  • Lässt sich sehr eng mit OpenCV integrieren

  • Geeignet für Szenarien wie Gesichtsausdruckserkennung, Avatar-Tracking und AR-Anwendungen

  • Robuster und einfacher erweiterbar als traditionelle Haar-Feature-Methoden

Im nächsten Abschnitt wird weiter erläutert, wie Face-Mesh-Landmarks für einfache Gesichtsmerkmalanalysen und interaktive Anwendungen genutzt werden können.