Skip to Content

Détection de visage avec XIAO ESP32-S3-Sense et SenseCraft AI

Détection de visage avec XIAO ESP32-S3-Sense et SenseCraft AI

Dans ce tutoriel étape par étape, vous apprendrez comment déployer et exécuter un modèle de détection de visage en temps réel sur le XIAO ESP32-S3-Sense en utilisant la plateforme SenseCraft AI. Le modèle fonctionnera entièrement sur l’ESP32 sans avoir besoin d’interagir avec un serveur pour effectuer la détection de visage.

Si vous cherchez un moyen simple et rapide de faire de la détection de visage avec un ESP32, ce guide est parfait pour vous. La plateforme SenseCraft AI vous permet de charger et d’exécuter rapidement des modèles d’IA pré-entraînés directement sur des microcontrôleurs compatibles comme le XIAO ESP32‑S3-Sense, sans avoir à écrire de code de machine learning.

La plateforme vous permet également de configurer différentes options de sortie telles que les broches GPIO, UART, I2C, SPI ou MQTT, ce qui facilite l’intégration du détecteur de visage dans vos propres projets, par exemple un système de domotique, un compteur de visages ou un système de détection d’intrus.

À part le microcontrôleur lui-même, ce tutoriel utilise uniquement les fonctionnalités gratuites de la plateforme SenseCraft AI, sans inscription requise. Vous n’aurez pas besoin d’un abonnement cloud ni d’outils de développement avancés.

Commençons !

Pièces requises

Évidemment, vous aurez besoin d’une carte XIAO ESP32-S3-Sense de Seeed Studio. Notez que la carte peut devenir très chaude sous une charge de calcul élevée. Je vous recommande d’y fixer un petit Heatsink à l’arrière de la carte (voir la pièce listée ci-dessous).

Si vous souhaitez essayer l’exemple de communication série, vous aurez besoin d’un second microcontrôleur. J’ai choisi un ESP32 lite plus ancien, mais tout autre ESP32 ou un Arduino conviendra également très bien.

Seeed Studio XIAO ESP32-S3-Sense

ESP32 lite Lolin32

ESP32-lite

Câble USB C

Petit dissipateur thermique 9×9 mm

Dupont wire set

Jeu de fils Dupont

Half_breadboard56a

Plaque d’essai (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.

Qu’est-ce que SenseCraft AI ?

SenseCraft AI est une plateforme de développement d’IA embarquée créée par Seeed Studio qui vous permet de déployer facilement des modèles de machine learning sur des appareils embarqués—sans écrire de code complexe ni gérer des chaînes d’outils.

Elle est conçue pour l’inférence IA en temps réel sur microcontrôleurs et cartes de calcul en périphérie, spécifiquement pour le matériel Seeed comme le XIAO ESP32S3 Sense, Grove Vision AI, et la série reComputer Jetson.

Avec SenseCraft AI, vous pouvez :

  • Déployer rapidement des modèles d’IA préconstruits (comme la détection de visage, la classification d’objets, la reconnaissance de mots-clés)
  • Entraîner des modèles personnalisés avec vos propres jeux de données via une interface web
  • Flasher le firmware et les modèles directement sur les appareils compatibles
  • Visualiser les données en temps réel et les flux caméra via votre navigateur
  • Enregistrer, surveiller et analyser les événements grâce à la plateforme cloud SenseCraft Data

Le diagramme d’architecture suivant montre les composants de la plateforme SenseCraft AI. Comme vous pouvez le voir, c’est une plateforme complexe avec de nombreuses fonctions :

Plateforme SenseCraft AI (source)

Dans ce tutoriel, nous utiliserons uniquement les parties de SenseCraft AI nécessaires pour déployer, exécuter et surveiller un modèle public de détection de visage sur une carte XIAO ESP32-S3-Sense.

Sélection du modèle de détection de visage

Tout d’abord, vous devez sélectionner le modèle que vous souhaitez déployer. Rendez-vous sur la page de sélection des modèles SenseCraft à https://sensecraft.seeed.cc/ai/model. Dans l’onglet « Pretrained Models », sélectionnez sous Task « Detection » et sous Supported Devices « XIAO ESP32S3 Sense ». Ensuite, tapez « Face » dans la barre de recherche pour filtrer les modèles de détection de visage :

Model Selection
Sélection du modèle

En juillet 2025, il n’y a que deux modèles. Cliquez sur le modèle Swift-YOLO à droite (marqué en jaune). L’autre modèle ne fonctionnait pas pour moi lors de mes essais.

Cela ouvrira une nouvelle page avec une description du modèle de détection de visage et un bouton vert « Deploy Model » sur la droite :

Description of selected Face Detection Model
Description du modèle de détection de visage sélectionné

Connectez votre carte XIAO ESP32-S3-Sense via USB à votre ordinateur, puis cliquez sur « Deploy Model ».

Déployer le modèle de détection de visage

Après avoir cliqué sur « Deploy Model », une nouvelle page nommée « Deploy Face Detection » s’ouvrira avec un bouton « Connect Device » en bas :

Connect Device Page
Page de connexion de l’appareil

Appuyez dessus et une boîte de dialogue de confirmation apparaîtra, où il vous suffira de cliquer sur « Confirm » :


Confirmation Dialog for Model Deployment
Boîte de dialogue de confirmation pour le déploiement du modèle

Ensuite, la plateforme SenseCraft doit savoir à quel port COM la carte XIAO ESP32-S3-Sense est connectée. Elle vous affichera une liste des ports utilisés (appairés) – généralement un seul si vous connectez une seule carte. Cliquez sur le port COM que vous souhaitez utiliser, puis sur le bouton « Connect » en bas :

Select COM port where XIAO-ESP32-S3-Sense is connected
Sélection du port COM où le XIAO-ESP32-S3-Sense est connecté

Cela lancera le téléchargement (déploiement) du modèle de détection de visage sur la carte XIAO-ESP32-S3-Sense.

Surveillance du modèle de détection de visage

Une fois le modèle déployé, il démarre automatiquement et envoie des images avec des cadres de détection de visage à votre navigateur web, où vous pouvez voir un flux en direct dans la section Aperçu :

Preview of detected faces
Aperçu des visages détectés

En haut à droite de la section Aperçu se trouve un bouton « Stop » pour arrêter le modèle en cours d’exécution. Vous pouvez aussi ajuster la fréquence d’images avec un curseur dans la section Appareil :

Device Section with Slider for Framerate
Section Appareil avec curseur pour la fréquence d’images

Sous la vidéo dans la section Aperçu, deux réglages importants (Confidence, IoU) permettent d’ajuster les détections du modèle, que nous allons détailler maintenant.

Seuil de confiance

Le seuil de confiance filtre les détections en fonction de la certitude du modèle qu’il s’agit d’un visage. Chaque détection a un score de confiance compris entre 0 et 100 %. Si le score d’une détection est inférieur au seuil de confiance, elle est rejetée.

Un seuil plus bas détectera plus de visages mais entraînera aussi plus d’erreurs avec des faux positifs. Un seuil plus élevé détectera moins de visages (avec moins d’erreurs) mais manquera certains visages (faux négatifs). L’exemple ci-dessous montre un seuil de confiance trop bas, entraînant de nombreuses fausses détections de visage :

False positive face detections
Fausse détection de visages

Il y a toujours un compromis entre la sensibilité du modèle et le nombre d’erreurs acceptables. Le meilleur seuil dépendra de l’application. Par exemple, dans un système de détection d’intrus, vous pourriez accepter plus de fausses détections pour être sûr qu’aucun cambrioleur ne passe.

Seuil IoU

En interne, le modèle de détection de visage génère plusieurs cadres de détection, car une image peut contenir plusieurs visages. Cela peut entraîner qu’un même visage soit détecté par plusieurs cadres qui se chevauchent. L’exemple ci-dessous illustre cela :

Multiple Overlapping face detection boxes
Multiples cadres de détection de visage qui se chevauchent

Le seuil IoU (Intersection over Union) aide à décider quel cadre chevauchant conserver. Il est calculé comme le ratio de la zone de chevauchement entre cadres. Si deux cadres se chevauchent plus que le seuil IoU, celui avec la confiance la plus faible est supprimé.

Si vous constatez que des visages sont détectés par plusieurs cadres, baissez le seuil IoU. Vous risquez alors d’avoir des cadres trop petits. Dans ce cas, augmentez le seuil IoU.

Sortie du modèle de détection de visage

Surveiller le processus de détection de visage en direct est important pour se faire une idée de la précision et du comportement du modèle. Mais dans la plupart des applications, on souhaite une sortie du modèle que l’on peut traiter ensuite. Par exemple, une sortie numérique qui passe à l’état haut lorsqu’un visage est détecté, ce qui active une alarme.

Les modèles SenseCraft AI offrent généralement trois types de sorties :

  • Sortie numérique via GPIO
  • Sortie série via UART, I2C ou SPI
  • Sortie MQTT via WiFi

Vous pouvez configurer ces différentes options de sortie en cliquant sur l’élément correspondant dans la barre latérale :

Sidebar with Output Options
Barre latérale avec options de sortie

La sortie numérique via GPIO est idéale pour des actions simples, comme ouvrir une porte lorsqu’un visage est détecté. Si vous avez besoin d’informations plus détaillées, comme le nombre de visages détectés, leur position et leur confiance, la sortie Série est ce qu’il vous faut. Enfin, si vous souhaitez connecter le détecteur de visage à un système de domotique, comme Home Assistant, vous voudrez probablement utiliser MQTT.

Dans les sections suivantes, nous examinerons de plus près les options de sortie GPIO et Série. L’option MQTT est déjà décrite dans le SenseCraft AI MQTT output for XIAO ESP32-S3 tutoriel.

Sortie numérique GPIO

Pour configurer la sortie GPIO, cliquez sur l’élément GPIO dans la barre latérale :

GPIO Output Item
Élément de sortie GPIO

Vous pouvez alors ajouter une « Action déclenchée lorsque les conditions d’événement sont remplies » :

Adding a Trigger Action
Ajout d’une action déclencheur

Cela ouvre la boîte de dialogue suivante, où vous pouvez spécifier les détails de l’action. Par exemple, vous pouvez vouloir allumer la LED intégrée si un visage est détecté avec une valeur de confiance supérieure à 50 % :

Specifying the Trigger Conditions
Spécification des conditions du déclencheur

Si vous appuyez sur le bouton « Confirm », cette action est ajoutée à la liste des actions déclencheurs et devient active :

List of Trigger Actions
Liste des actions déclencheurs

La LED jaune sur la carte XIAO ESP32-S3-Sense devrait maintenant s’allumer si la caméra détecte un visage avec la confiance spécifiée.

Au lieu de la LED, vous pouvez aussi sélectionner une autre broche GPIO et définir son état par défaut et son état actif :

Specify GPIO pin as Output
Spécifier une broche GPIO en sortie

Cela vous permettrait de connecter un appareil, par exemple un ouvre-porte ou une alarme, à GPIO1 et de l’activer si la caméra détecte un visage.

Les actions déclencheurs restent configurées même après déconnexion ou débranchement de l’ESP32. Bien que la documentation indique le contraire, pour moi les actions déclencheurs fonctionnaient même lorsque le XIAO ESP32-S3-Sense n’était pas connecté à l’interface web.

Sortie série via I2C

La sortie GPIO est limitée à « visage détecté » ou « pas de visage détecté ». Pour des informations plus détaillées, comme le nombre de visages détectés, leurs cadres de détection et la valeur de confiance, vous pouvez utiliser la sortie série. Cependant, vous devrez connecter un second microcontrôleur via UART, I2C ou SPI pour traiter les détections.

Le code pour la détection de visage est déployé via SenseCraft et s’exécute sur le XIAO ESP32-S3-Sense. Le code pour traiter les détections est flashé via l’IDE Arduino et s’exécute sur le second microcontrôleur – dans mon cas un ESP32-lite. L’image ci-dessous montre les parties principales du système, utilisant I2C pour la communication :

Face detection system with detection processing
Système de détection de visage avec traitement des détections

Connecter le ESP32-lite au XIAO ESP32-S3-Sense via I2C est simple. L’image ci-dessous montre le schéma de câblage :

Connecting XIAO ESP32-S3-Sense to ESP32 lite via I2C
Connexion du XIAO ESP32-S3-Sense à l’ESP32-lite via I2C

Les broches I2C sur l’ESP32-lite sont SDA=GPIO19 et SCL=GPIO23. Les broches correspondantes sur l’ESP32-S3-Sense sont SDA=D4/GPIO5 et SCL=D5/GPIO4. Notez que le schéma ci-dessus montre l’arrière des cartes, où les sorties numériques sont étiquetées (D0…D10).

ESP32-liteXIAO
SDAGPIO19D4 / GPIO5
SCLGPIO23D5 / GPIO4

Ci-dessous, le brochage complet du XIAO ESP32-S3-Sense vu de face. Vous pouvez voir les broches SDA et SCL sur la gauche de la carte.

Pinout of XIAO ESP32-S3-Sense
Brochage du XIAO ESP32-S3-Sense

Dans la section suivante, nous allons écrire le code qui s’exécute sur l’ESP32-lite et traite les détections de visage générées par le XIAO ESP32-S3-Sense.

Code pour la communication série

Pour que le code suivant fonctionne, vous devez d’abord installer la Seeed_Arduino_SSCMA bibliothèque. Ouvrez le LIBRARY MANAGER, cherchez « Seeed_Arduino_SSCMA » et cliquez sur le bouton INSTALL :

Installing Seeed_Arduino_SSCMA library
Installation de la bibliothèque Seeed_Arduino_SSCMA

Ensuite, connectez l’ESP32-lite à votre ordinateur et téléchargez-y le code suivant :

#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);
    }
  }
}

Ce code invoque le détecteur de visage qui tourne sur l’ESP32-S3-Sense et affiche les scores de confiance ainsi que les cadres de détection pour chaque visage détecté dans le Moniteur Série. Regardons le code de plus près.

bibliothèques

Nous incluons d’abord les bibliothèques Wire et Seeed_Arduino_SSCMA. Nous avons besoin de la bibliothèque Wire pour la communication I2C et de Seeed_Arduino_SSCMA pour communiquer avec le détecteur de visage.

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

objet

Ensuite, nous créons l’objet détecteur, qui fournit des fonctions pour démarrer une détection de visage et récupérer les résultats :

SSCMA detector;

setup

Dans la fonction setup, nous initialisons la communication série avec le Moniteur Série et la communication I2C avec le détecteur :

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

Cela suppose que vous utilisez les broches I2C par défaut. Sinon, vous devrez les spécifier en créant un objet Wire séparé.

loop

Enfin, dans la fonction loop, nous invoquons le détecteur puis affichons la confiance et le cadre des visages détectés dans le Moniteur Série :

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);
    }
  }
}

Si tout est correctement câblé et fonctionne, vous devriez voir les résultats de détection s’afficher dans le Moniteur Série comme suit :

Face detection results on Serial Monitor
Résultats de détection de visage sur le Moniteur Série

Vous pouvez maintenant facilement modifier le code, par exemple pour compter le nombre de visages détectés, effectuer un suivi de visage ou déclencher une action si un visage s’approche (grand cadre).

Enfin, notez que les seuils de confiance et IoU sont réglés via l’interface web SenseCraft et stockés sur l’ESP32-S3-Sense. Vous pouvez les mettre à zéro et effectuer votre propre seuillage dans le code.

Conclusions et commentaires

Dans ce tutoriel, vous avez appris comment déployer et exécuter un modèle de détection de visage en temps réel sur le XIAO ESP32-S3-Sense en utilisant la plateforme SenseCraft AI.

La plateforme SenseCraft AI facilite grandement l’intégration d’un modèle d’IA pré-entraîné dans vos projets TinyML. Vous n’avez pas besoin d’écrire de code pour déployer ou exécuter le modèle.

L’interface web vous permet de configurer différentes options de sortie (GPIO, Série, MQTT), encore une fois sans coder. Mais l’interface Série vous permet d’écrire votre propre code pour traiter les résultats de détection plus en détail, si besoin. Cependant, vous devrez connecter un second microcontrôleur pour cela.

Un inconvénient de la plateforme SenseCraft AI est que vous ne pouvez pas vraiment étendre le code du modèle déployé. Tout code de traitement supplémentaire doit s’exécuter sur un second microcontrôleur. D’un autre côté, dans la plupart des cas, la charge de calcul du modèle est si élevée qu’il est préférable d’avoir un microcontrôleur séparé de toute façon.

Disons que vous voulez construire votre propre cardan de suivi de visage. Il serait logique d’exécuter la détection de visage sur un microcontrôleur et le contrôle des servos sur un autre.

Si vous souhaitez en savoir plus sur le XIAO ESP32-S3-Sense, jetez un œil à notre Getting started with XIAO-ESP32-S3-Sense tutoriel. Et Seeed Studio propose beaucoup plus d’informations dans sa Getting Started Wiki.

Une application courante des cartes microcontrôleurs avec caméra est le streaming et la surveillance. Si c’est ce que vous recherchez, les tutoriels Stream Video with with XIAO-ESP32-S3-Sense et Surveillance Camera with ESP32-CAM peuvent vous être utiles.

Enfin, si vous souhaitez détecter des personnes plutôt que des visages, consultez le tutoriel Edge AI Room Occupancy Sensor with ESP32 and Person Detection.

Si vous avez des questions, n’hésitez pas à les poser dans la section commentaires.

Bon bricolage 😉