Skip to Content

Gesichtserkennung mit XIAO ESP32-S3-Sense und SenseCraft AI

Gesichtserkennung mit XIAO ESP32-S3-Sense und SenseCraft AI

In diesem Schritt-für-Schritt-Tutorial lernst du, wie du ein Echtzeit-Gesichtserkennungsmodell auf dem XIAO ESP32-S3-Sense mit der SenseCraft AI-Plattform bereitstellst und ausführst. Das Modell läuft vollständig auf dem ESP32, ohne dass eine Verbindung zu einem Server für die eigentliche Gesichtserkennung erforderlich ist.

Wenn du nach einer einfachen und schnellen Möglichkeit suchst, Gesichtserkennung mit einem ESP32 durchzuführen, ist dieser Leitfaden perfekt für dich. Die SenseCraft AI-Plattform ermöglicht es dir, vortrainierte KI-Modelle direkt auf unterstützten Mikrocontrollern wie dem XIAO ESP32‑S3-Sense schnell zu laden und auszuführen, ohne dass du Machine-Learning-Code schreiben musst.

Die Plattform erlaubt es dir auch, verschiedene Ausgabeoptionen wie GPIO-Pins, UART, I2C, SPI oder MQTT zu konfigurieren, was die Integration des Gesichtserkennungsmodells in eigene Projekte erleichtert, z. B. ein Home-Automation-System, einen Gesichtszähler oder ein Einbruchserkennungssystem.

Abgesehen vom Mikrocontroller selbst verwendet dieses Tutorial nur die kostenlosen, ohne Anmeldung verfügbaren Funktionen der SenseCraft AI-Plattform. Du benötigst kein Cloud-Abonnement oder fortgeschrittene Entwicklerwerkzeuge.

Lass uns loslegen!

Benötigte Teile

Natürlich benötigst du ein XIAO ESP32-S3-Sense Board von Seeed Studio. Beachte, dass das Board bei hoher Rechenlast sehr heiß werden kann. Ich empfehle, einen kleinen Heatsink auf der Rückseite des Boards anzubringen (siehe unten aufgeführtes Teil).

Wenn du das Beispiel für die serielle Kommunikation ausprobieren möchtest, benötigst du einen zweiten Mikrocontroller. Ich habe einen älteren ESP32 lite gewählt, aber jeder andere ESP32 oder ein Arduino funktioniert ebenfalls gut.

Seeed Studio XIAO ESP32-S3-Sense

ESP32 lite Lolin32

ESP32-lite

USB-C-Kabel

Kleiner Kühlkörper 9×9 mm

Dupont wire set

Dupont-Kabelset

Half_breadboard56a

Breadboard

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Was ist SenseCraft AI?

SenseCraft AIist eine Edge-AI-Entwicklungsplattform von Seeed Studio, die es dir ermöglicht, Machine-Learning-Modelle einfach auf eingebettete Geräte zu bringen – ohne komplexen Code zu schreiben oder Toolchains zu verwalten.

Sie ist für Echtzeit-KI-Inferenz auf Mikrocontrollern und Edge-Computing-Boards konzipiert, speziell für Seeeds Hardware wie das XIAO ESP32S3 Sense, Grove Vision AI und die reComputer Jetson-Serie.

Mit SenseCraft AI kannst du:

  • Vortrainierte KI-Modelle schnell bereitstellen (wie Gesichtserkennung, Objekterkennung, Keyword Spotting)
  • Eigene Modelle trainieren mit deinen eigenen Datensätzen über eine Weboberfläche
  • Firmware und Modelle direkt flashen auf unterstützte Geräte
  • Echtzeitdaten und Kamerabilder visualisieren über deinen Browser
  • Ereignisse protokollieren, überwachen und analysieren mit der SenseCraft Data Cloud Plattform

Das folgende Architekturdiagramm zeigt die Komponenten der SenseCraft AI Plattform. Wie du siehst, ist es eine komplexe Plattform mit vielen Funktionen:

SenseCraft AI Plattform (source)

In diesem Tutorial verwenden wir nur die Teile von SenseCraft AI, die nötig sind, um ein öffentliches Gesichtserkennungsmodell auf einem XIAO ESP32-S3-Sense Board bereitzustellen, auszuführen und zu überwachen.

Gesichtserkennungsmodell auswählen

Zuerst musst du das Modell auswählen, das wir bereitstellen wollen. Gehe zur SenseCraft Modell-Auswahlseite unter https://sensecraft.seeed.cc/ai/model. Im Tab „Pretrained Models“ wähle unter Task „Detection“ und unter Supported Devices „XIAO ESP32S3 Sense“. Gib dann „Face“ in die Suchleiste ein, um nach Gesichtserkennungsmodellen zu filtern:

Model Selection
Modellauswahl

Stand Juli 2025 gibt es nur zwei Modelle. Klicke auf das Swift-YOLO Modell rechts (gelb markiert). Das andere Modell funktionierte bei mir nicht.

Dies öffnet eine neue Seite mit einer Beschreibung des Gesichtserkennungsmodells und einem grünen Button „Deploy Model“ auf der rechten Seite:

Description of selected Face Detection Model
Beschreibung des ausgewählten Gesichtserkennungsmodells

Verbinde dein XIAO ESP32-S3-Sense Board per USB mit deinem Computer und klicke dann auf „Deploy Model“.

Gesichtserkennungsmodell bereitstellen

Nach dem Klick auf „Deploy Model“ öffnet sich eine neue Seite namens „Deploy Face Detection“ mit einem Button „Connect Device“ unten:

Connect Device Page
Gerät verbinden Seite

Drücke diesen Button und es erscheint ein Bestätigungsdialog, in dem du einfach auf „Confirm“ klicken musst:


Confirmation Dialog for Model Deployment
Bestätigungsdialog für Modellbereitstellung

Danach muss die SenseCraft Plattform wissen, an welchem COM-Port das XIAO ESP32-S3-Sense Board angeschlossen ist. Sie zeigt dir eine Liste der verwendeten (gekoppelten) Ports – normalerweise nur einen, wenn du nur ein Board angeschlossen hast. Klicke auf den gewünschten COM-Port und dann auf den „Connect“ Button unten:

Select COM port where XIAO-ESP32-S3-Sense is connected
COM-Port auswählen, an dem XIAO-ESP32-S3-Sense angeschlossen ist

Dies startet den Download (die Bereitstellung) des Gesichtserkennungsmodells auf das XIAO-ESP32-S3-Sense Board.

Gesichtserkennungsmodell überwachen

Sobald das Modell bereitgestellt ist, startet es automatisch und sendet Bilder mit Gesichtserkennungsrahmen an deinen Webbrowser, wo du im Vorschau-Bereich einen Live-Stream sehen kannst:

Preview of detected faces
Vorschau erkannter Gesichter

Oben rechts im Vorschau-Bereich gibt es einen „Stop“-Button, um das laufende Modell zu stoppen. Du kannst auch die Bildrate mit einem Schieberegler im Geräte-Bereich anpassen:

Device Section with Slider for Framerate
Geräte-Bereich mit Schieberegler für Bildrate

Unter dem Video im Vorschau-Bereich befinden sich zwei wichtige Einstellungen (Confidence, IoU), um die Modellerkennungen anzupassen, die wir im Folgenden genauer besprechen.

Confidence Threshold

Der Confidence Thresholdfiltert Erkennungenbasierend darauf, wie sicher sich das Modell ist,dass etwas ein Gesicht ist. Jede Erkennung hat einen Confidence Scorezwischen 0 und 100 %. Liegt der Score einer Erkennung unter dem Confidence Threshold, wird sie verworfen.

Ein niedriger Schwellenwert führt zu mehr Gesichtserkennungen, verursacht aber auch mehr Fehler bei der Erkennung von Nicht-Gesichtern (False Positives). Ein höherer Schwellenwert führt zu weniger Gesichtserkennungen (mit weniger Fehlern), kann aber auch dazu führen, dass einige Gesichter übersehen werden (False Negatives). Das folgende Beispiel zeigt einen zu niedrigen Confidence Threshold mit vielen falschen Gesichtserkennungen:

False positive face detections
Falsch-positive Gesichtserkennungen

Es gibt immer einen Kompromiss zwischen der Sensitivität des Modells und der Anzahl der akzeptierten Fehler. Welcher Schwellenwert am besten ist, hängt von der Anwendung ab. Bei einem Einbruchserkennungssystem könnte man z. B. mehr Fehlalarme akzeptieren, um sicherzugehen, dass kein Eindringling unbemerkt bleibt.

IoU Threshold

Das Gesichtserkennungsmodell erzeugt intern mehrere Erkennungsrahmen, da ein Bild mehrere Gesichter enthalten kann. Das kann dazu führen, dass ein Gesicht von mehreren sich überlappenden Erkennungsrahmen erkannt wird. Das folgende Beispiel zeigt das:

Multiple Overlapping face detection boxes
Mehrere sich überlappende Gesichtserkennungsrahmen

Der IoU (Intersection over Union) Threshold hilft zu entscheiden, welche der überlappenden Rahmen behalten werden. Er wird als Verhältnis der Überlappung zwischen den Rahmen berechnet. Überlappen zwei Rahmen mehr als der IoU Threshold, wird der mit der niedrigeren Confidence entfernt.

Wenn du feststellst, dass Gesichter von mehreren Rahmen erkannt werden, senke den IoU Threshold. Du könntest dann aber zu kleine Rahmen erhalten. In diesem Fall erhöhe den IoU Threshold.

Ausgabe des Gesichtserkennungsmodells

Die Live-Überwachung des Gesichtserkennungsprozesses ist wichtig, um ein Gefühl für die Genauigkeit und das Verhalten des Modells zu bekommen. In den meisten Anwendungen möchte man jedoch eine Ausgabe des Modells, die man weiterverarbeiten kann. Zum Beispiel einen digitalen Ausgangspin, der bei Gesichtserkennung auf HIGH schaltet und so z. B. einen Alarm aktiviert.

SenseCraft AI Modelle bieten typischerweise drei verschiedene Arten von Ausgaben:

  • Digitaler Ausgang über GPIO
  • SerielleAusgabe über UART, I2C oder SPI
  • MQTT Ausgabe über WiFi

Diese verschiedenen Ausgabeoptionen kannst du konfigurieren, indem du im Sidebar-Menü auf den entsprechenden Eintrag klickst:

Sidebar with Output Options
Sidebar mit Ausgabeoptionen

Der digitale Ausgang über GPIO ist ideal für einfache Aktionen, wie das Öffnen einer Tür, wenn ein Gesicht erkannt wurde. Wenn du detailliertere Informationen brauchst, z. B. wie viele Gesichter erkannt wurden, wo und mit welcher Confidence, dann ist die SerielleAusgabe das Richtige. Wenn du den Gesichtserkenner mit einem Home-Automation-System wie Home Assistant verbinden möchtest, willst du wahrscheinlich MQTTverwenden.

In den nächsten Abschnitten schauen wir uns die GPIO- und serielle Ausgabeoptionen genauer an. Die MQTT-Option ist bereits im SenseCraft AI MQTT output for XIAO ESP32-S3 Tutorial beschrieben.

Digitaler GPIO-Ausgang

Um den GPIO-Ausgang zu konfigurieren, klicke im Sidebar-Menü auf den GPIO-Eintrag:

GPIO Output Item
GPIO-Ausgabe-Eintrag

Du kannst dann eine „Trigger-Aktion hinzufügen, wenn Ereignisbedingungen erfüllt sind“:

Adding a Trigger Action
Trigger-Aktion hinzufügen

Es öffnet sich folgender Dialog, in dem du die Details der Aktion festlegen kannst. Zum Beispiel möchtest du vielleicht die eingebaute LEDeinschalten, wenn ein Gesichtmit einem ConfidenceWert größer als 50 % erkannt wurde:

Specifying the Trigger Conditions
Trigger-Bedingungen festlegen

Wenn du auf „Confirm“ klickst, wird diese Aktion zur Liste der Trigger-Aktionen hinzugefügt und aktiviert:

List of Trigger Actions
Liste der Trigger-Aktionen

Die gelbe LED auf dem XIAO ESP32-S3-Sense Board sollte nun leuchten, wenn die Kamera ein Gesicht mit der angegebenen Confidence erkennt.

Statt der LED kannst du auch einen anderen GPIO-Pin auswählen und dessen Standard- und Aktivzustand definieren:

Specify GPIO pin as Output
GPIO-Pin als Ausgang festlegen

So kannst du z. B. ein Gerät wie einen Türöffner oder Alarm an GPIO1 anschließen und aktivieren, wenn die Kamera ein Gesicht sieht.

Die Trigger-Aktionen bleiben auch nach dem Trennen oder Ausstecken des ESP32 erhalten. Obwohl die Dokumentation etwas anderes sagt, funktionierten die Trigger-Aktionen bei mir auch, wenn das XIAO ESP32-S3-Sense nicht mit der Weboberfläche verbunden war.

Serielle Ausgabe über I2C

Die GPIO-Ausgabe ist auf „Gesicht erkannt“ oder „kein Gesicht erkannt“ beschränkt. Für detailliertere Informationen, wie die Anzahl erkannter Gesichter, deren Erkennungsrahmen und Confidence-Werte, kannst du die serielle Ausgabe verwenden. Dafür musst du jedoch einen zweiten Mikrocontrollerüber UART, I2C oder SPI anschließen, um die Erkennungen zu verarbeiten.

Der Code für die Gesichtserkennung wird über SenseCraft bereitgestellt und läuft auf dem XIAO ESP32-S3-Sense. Der Code zur Verarbeitung der Erkennungen wird über die Arduino IDE auf den zweiten Mikrocontroller geflasht – in meinem Fall ein ESP32-lite. Das Bild unten zeigt die Hauptbestandteile des Systems, wobei I2C für die Kommunikation verwendet wird:

Face detection system with detection processing
Gesichtserkennungssystem mit Erkennungsverarbeitung

Die Verbindung des ESP32-lite mit dem XIAO ESP32-S3-Sense über I2C ist einfach. Das folgende Bild zeigt das Schaltbild:

Connecting XIAO ESP32-S3-Sense to ESP32 lite via I2C
XIAO ESP32-S3-Sense mit ESP32-lite über I2C verbinden

Die I2C-Pins am ESP32-lite sind SDA=GPIO19 und SCL=GPIO23. Die entsprechenden Pins am ESP32-S3-Sense sind SDA=D4/GPIO5 und SCL=D5/GPIO4. Beachte, dass das Schaltbild oben die Rückseite der Boards zeigt, wo die digitalen Ausgänge beschriftet sind (D0…D10).

ESP32-liteXIAO
SDAGPIO19D4 / GPIO5
SCLGPIO23D5 / GPIO4

Unten die vollständige Pinbelegung des XIAO ESP32-S3-Sense von vorne. Du siehst die SDA- und SCL-Pins links am Board.

Pinout of XIAO ESP32-S3-Sense
Pinbelegung des XIAO ESP32-S3-Sense

Im nächsten Abschnitt schreiben wir den Code, der auf dem ESP32-lite läuft und die vom XIAO ESP32-S3-Sense generierten Gesichtserkennungen verarbeitet.

Code für serielle Kommunikation

Damit der folgende Code funktioniert, musst du zuerst die Seeed_Arduino_SSCMA Bibliothek installieren. Öffne den LIBRARY MANAGER, suche nach „Seeed_Arduino_SSCMA“ und klicke auf den INSTALL-Button:

Installing Seeed_Arduino_SSCMA library
Installation der Seeed_Arduino_SSCMA Bibliothek

Verbinde als Nächstes den ESP32-lite mit deinem Computer und lade den folgenden Code darauf:

#include <Wire.h>
#include <Seeed_Arduino_SSCMA.h>

SSCMA detector;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  detector.begin(&Wire);
  Serial.println("running...");
}

void loop() {
  if (!detector.invoke(1, false, false)) {
    for (int i = 0; i < detector.boxes().size(); i++) {
      boxes_t &b = detector.boxes()[i];
      Serial.printf("Box[%d] conf=%d [%3d %3d %3d %3d]\n",
                    i, b.score, b.x, b.y, b.w, b.h);
    }
  }
}

Dieser Code ruft den auf dem ESP32-S3-Sense laufenden Gesichtserkenner auf und gibt die Confidence-Werte und Erkennungsrahmen für erkannte Gesichter im Serial Monitor aus. Schauen wir uns den Code genauer an.

Bibliotheken

Zuerst binden wir die Wire- und die Seeed_Arduino_SSCMA Bibliotheken ein. Die Wire-Bibliothek benötigen wir für die I2C-Kommunikation und die Seeed_Arduino_SSCMA für die Kommunikation mit dem Gesichtserkenner.

#include <Wire.h>
#include <Seeed_Arduino_SSCMA.h>

Objekt

Als Nächstes erstellen wir das Detector-Objekt, das Funktionen zum Starten der Gesichtserkennung und zum Abrufen der Ergebnisse bereitstellt:

SSCMA detector;

Setup

In der setupFunktion initialisieren wir die serielle Kommunikation mit dem Serial Monitor und die I2C-Kommunikation mit dem Detector:

void setup() {
  Serial.begin(115200);
  Wire.begin();
  detector.begin(&Wire);
  Serial.println("running...");
}

Dies setzt voraus, dass du die Standard-I2C-Pins verwendest. Falls nicht, musst du sie durch Erstellen eines separaten WireObjekts angeben.

Loop

Schließlich rufen wir in der loopFunktion den Detector auf und geben die Confidence und die Begrenzungsrahmen der erkannten Gesichter im Serial Monitor aus:

void loop() {
  if (!detector.invoke(1, false, false)) {
    for (int i = 0; i < detector.boxes().size(); i++) {
      boxes_t &b = detector.boxes()[i];
      Serial.printf("Box[%d] conf=%d [%3d %3d %3d %3d]\n",
                    i, b.score, b.x, b.y, b.w, b.h);
    }
  }
}

Wenn alles richtig verkabelt und funktionsfähig ist, solltest du die Erkennungsergebnisse wie folgt im Serial Monitor sehen:

Face detection results on Serial Monitor
Ergebnisse der Gesichtserkennung im Serial Monitor

Du könntest den Code jetzt leicht ändern, z. B. um die Anzahl erkannter Gesichter zu zählen, Gesichtstracking durchzuführen oder eine Aktion auszulösen, wenn ein Gesicht nah kommt (großer Begrenzungsrahmen).

Beachte abschließend, dass die Confidence- und IoU-Schwellenwerte über die SenseCraft-Weboberfläche eingestellt und auf dem ESP32-S3-Sense gespeichert werden. Du könntest sie auf null setzen und deine eigene Schwellenwertlogik im Code implementieren.

Fazit und Kommentare

In diesem Tutorial hast du gelernt, wie du ein Echtzeit-Gesichtserkennungsmodell auf dem XIAO ESP32-S3-Sense mit der SenseCraft AI-Plattform bereitstellst und ausführst.

Die SenseCraft AI Plattform macht es sehr einfach, ein vortrainiertes KI-Modell in deine TinyML-Projekte zu integrieren. Du musst keinen Code schreiben, um das Modell bereitzustellen oder auszuführen.

Die Weboberfläche erlaubt es dir, verschiedene Ausgabeoptionen (GPIO, Serial, MQTT) zu konfigurieren, ebenfalls ohne Programmierung. Die serielle Schnittstelle ermöglicht es dir jedoch, eigenen Code zur weiteren Verarbeitung der Erkennungsergebnisse zu schreiben, falls nötig. Dafür musst du aber einen zweiten Mikrocontroller anschließen.

Ein Nachteil der SenseCraft AI Plattform ist, dass du den Code des bereitgestellten Modells im Grunde nicht erweitern kannst. Jegliche weitere Verarbeitung muss auf einem zweiten Mikrocontroller laufen. Andererseits ist die Rechenlast des Modells meist so hoch, dass ein separater Mikrocontroller ohnehin sinnvoll ist.

Angenommen, du möchtest deinen eigenen Face Tracking Gimbal bauen. Es wäre sinnvoll, die Gesichtserkennung auf einem Mikrocontroller laufen zu lassen und die Servosteuerung auf einem anderen.

Wenn du mehr über das XIAO ESP32-S3-Sense erfahren möchtest, schau dir unser Getting started with XIAO-ESP32-S3-Sense Tutorial an. Seeed Studio bietet außerdem viele weitere Informationen in seinem Getting Started Wiki.

Eine häufige Anwendung von Mikrocontroller-Boards mit Kamera sind Streaming und Überwachung. Wenn das dein Ziel ist, könnten die Stream Video with with XIAO-ESP32-S3-Sense und Surveillance Camera with ESP32-CAM Tutorials hilfreich sein.

Wenn du statt Gesichtern Personen erkennen möchtest, schau dir das Edge AI Room Occupancy Sensor with ESP32 and Person DetectionTutorial an.

Wenn du Fragen hast, hinterlasse sie gerne im Kommentarbereich.

Viel Spaß beim Tüfteln 😉