Skip to Content

Detección facial con XIAO ESP32-S3-Sense y SenseCraft AI

Detección facial con XIAO ESP32-S3-Sense y SenseCraft AI

En este tutorial paso a paso, aprenderás cómo desplegar y ejecutar un modelo de detección de rostros en tiempo real en el XIAO ESP32-S3-Sense usando la plataforma SenseCraft AI. El modelo se ejecutará completamente en el ESP32 sin necesidad de interactuar con un servidor para realizar la detección de rostros.

Si buscas una forma sencilla y rápida de hacer detección de rostros con un ESP32, esta guía es perfecta para ti. La plataforma SenseCraft AI te permite cargar y ejecutar modelos de IA preentrenados directamente en microcontroladores compatibles como el XIAO ESP32‑S3-Sense, sin necesidad de escribir código de machine learning.

La plataforma también te permite configurar diferentes opciones de salida como pines GPIO, UART, I2C, SPI o MQTT, lo que facilita integrar el detector de rostros en tus propios proyectos, por ejemplo, un sistema de domótica, un contador de personas o un sistema de detección de intrusos.

Además del microcontrolador, este tutorial utiliza solo las funciones gratuitas de la plataforma SenseCraft AI que no requieren registro. No necesitarás una suscripción en la nube ni herramientas avanzadas de desarrollo.

¡Vamos a empezar!

Piezas necesarias

Obviamente, necesitarás una placa XIAO ESP32-S3-Sense de Seeed Studio. Ten en cuenta que la placa puede calentarse mucho bajo una carga computacional alta. Te recomiendo que coloques un pequeño Heatsink en la parte trasera de la placa (ver la pieza listada abajo).

Si quieres probar el ejemplo de comunicación serial, necesitarás un segundo microcontrolador. Yo elegí un ESP32 lite antiguo, pero cualquier otro ESP32 o un Arduino también funcionarán bien.

Seeed Studio XIAO ESP32-S3-Sense

ESP32 lite Lolin32

ESP32-lite

Cable USB C

Pequeño disipador de calor 9×9 mm

Dupont wire set

Juego de cables Dupont

Half_breadboard56a

Protoboard

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é es SenseCraft AI?

SenseCraft AI es una plataforma de desarrollo de IA en el edge creada por Seeed Studio que te permite desplegar fácilmente modelos de machine learning en dispositivos embebidos, sin escribir código complejo ni gestionar toolchains.

Está diseñada para inferencia de IA en tiempo real en microcontroladores y placas de edge computing, específicamente para hardware de Seeed como el XIAO ESP32S3 Sense, Grove Vision AI y la serie reComputer Jetson.

Con SenseCraft AI puedes:

  • Desplegar rápidamente modelos de IA preconstruidos (como detección de rostros, clasificación de objetos, reconocimiento de palabras clave)
  • Entrenar modelos personalizados con tus propios conjuntos de datos usando una interfaz web
  • Flashear firmware y modelos directamente a dispositivos compatibles
  • Visualizar datos en tiempo real y transmisiones de cámara desde tu navegador
  • Registrar, monitorear y analizar eventos usando la plataforma en la nube SenseCraft Data

El siguiente diagrama de arquitectura muestra los componentes de la plataforma SenseCraft AI. Como puedes ver, es una plataforma compleja con muchas funciones:

Plataforma SenseCraft AI (source)

En este tutorial usaremos solo las partes de SenseCraft AI necesarias para desplegar, ejecutar y monitorear un modelo público de detección de rostros en una placa XIAO ESP32-S3-Sense.

Seleccionar modelo de detección de rostros

Primero necesitas seleccionar el modelo que queremos desplegar. Ve a la página de selección de modelos de SenseCraft en https://sensecraft.seeed.cc/ai/model. En la pestaña «Pretrained Models» selecciona bajo Task «Detection» y bajo Supported Devices «XIAO ESP32S3 Sense». Luego escribe «Face» en la barra de búsqueda para filtrar los modelos de detección de rostros:

Model Selection
Selección de modelo

A julio de 2025 solo hay dos modelos. Haz clic en el modelo Swift-YOLO a la derecha (marcado en amarillo). El otro modelo no me funcionó cuando lo probé.

Esto abrirá una nueva página con la descripción del modelo de detección de rostros y un botón verde llamado «Deploy Model» a la derecha:

Description of selected Face Detection Model
Descripción del modelo de detección de rostros seleccionado

Conecta tu placa XIAO ESP32-S3-Sense vía USB a tu ordenador y luego haz clic en «Deploy Model».

Desplegar modelo de detección de rostros

Después de hacer clic en «Deploy Model» se abrirá una nueva página llamada «Deploy Face Detection» con un botón «Connect Device» en la parte inferior:

Connect Device Page
Página de conexión de dispositivo

Púlsalo y verás un cuadro de diálogo de confirmación, donde solo tienes que pulsar «Confirm»:


Confirmation Dialog for Model Deployment
Cuadro de diálogo de confirmación para el despliegue del modelo

Después, la plataforma SenseCraft necesita saber a qué puerto COM está conectada la placa XIAO ESP32-S3-Sense. Te mostrará una lista de puertos usados (emparejados), normalmente solo uno si conectas una sola placa. Haz clic en el puerto COM que quieres usar y luego en el botón «Connect» abajo:

Select COM port where XIAO-ESP32-S3-Sense is connected
Seleccionar puerto COM donde está conectado el XIAO-ESP32-S3-Sense

Esto iniciará la descarga (despliegue) del modelo de detección de rostros a la placa XIAO-ESP32-S3-Sense.

Monitoreo del modelo de detección de rostros

Una vez desplegado, el modelo se inicia automáticamente y envía imágenes con cuadros de detección de rostros a tu navegador web, donde puedes ver una transmisión en vivo en la sección Preview:

Preview of detected faces
Vista previa de rostros detectados

En la esquina superior derecha de la sección Preview hay un botón «Stop» para detener el modelo en ejecución. También puedes ajustar la tasa de frames con un deslizador en la sección Device:

Device Section with Slider for Framerate
Sección Device con deslizador para la tasa de frames

Debajo del vídeo en la sección Preview hay dos ajustes importantes (Confidence, IoU) para ajustar las detecciones del modelo, que discutiremos en detalle a continuación.

Umbral de confianza

Elumbral de confianza filtra las detecciones basándose en qué tan seguro está el modelo de que algo es un rostro. Cada detección tiene un valor de confianza entre 0 y 100%. Si el valor de una detección está por debajo del umbral de confianza, se descarta.

Un umbral más bajo resultará en la detección de más rostros pero también causará más errores en la detección de no-rostros (falsos positivos). Un umbral más alto causará la detección de menos rostros (con menos errores) pero también hará que se pierdan algunos rostros (falsos negativos). El ejemplo a continuación muestra un caso de umbral de confianza demasiado bajo, resultando en muchas detecciones espurias de rostros:

False positive face detections
Falsas detecciones positivas de rostros

Siempre hay un equilibrio entre cuán sensible quieres que sea el modelo y cuántos errores estás dispuesto a aceptar. Dependerá de la aplicación cuál es el mejor umbral. Por ejemplo, en un sistema de detección de intrusos podrías aceptar más falsas detecciones para asegurarte de que ningún ladrón entre.

Umbral IoU

Internamente, el modelo de detección de rostros genera múltiples cuadros de detección, ya que una imagen puede contener varios rostros. Sin embargo, esto puede resultar en que un rostro sea detectado por varios cuadros superpuestos. El ejemplo a continuación muestra un caso:

Multiple Overlapping face detection boxes
Múltiples cuadros de detección de rostros superpuestos

El umbral IoU (Intersección sobre Unión) ayuda a decidir cuál de los cuadros superpuestos conservar. Se calcula como la proporción de la superposición entre cuadros. Si dos cuadros se superponen más que el umbral IoU, se elimina el que tenga menor confianza.

Si ves que los rostros son detectados por múltiples cuadros, baja el umbral IoU. Podrías terminar con cuadros demasiado pequeños. En ese caso, aumenta el umbral IoU.

Salida del modelo de detección de rostros

Monitorear el proceso de detección de rostros en vivo es importante para tener una «sensación» de la precisión y comportamiento del modelo. Pero en la mayoría de aplicaciones queremos una salida del modelo que podamos procesar más adelante. Por ejemplo, una salida digital que se active cuando se detecta un rostro, que a su vez encienda una alarma.

Los modelos SenseCraft AI típicamente ofrecen tres tipos diferentes de salidas:

  • Salida digital vía GPIO
  • Salida serial vía UART, I2C o SPI
  • Salida MQTT sobre WiFi

Puedes configurar estas diferentes opciones de salida haciendo clic en el elemento correspondiente en la barra lateral:

Sidebar with Output Options
Barra lateral con opciones de salida

La salida digital vía GPIO es ideal para acciones simples, como abrir una puerta cuando se detecta un rostro. Si necesitas información más detallada como cuántos rostros se detectaron, dónde y con qué confianza, entonces la salida Serial es lo que buscas. Finalmente, si quieres conectar el detector de rostros a un sistema de domótica, como Home Assistant, probablemente querrás usar MQTT.

En las siguientes secciones veremos más de cerca las opciones de salida GPIO y Serial. La opción MQTT ya está descrita en elSenseCraft AI MQTT output for XIAO ESP32-S3tutorial.

Salida digital GPIO

Para configurar la salida GPIO haz clic en el elemento GPIO en la barra lateral:

GPIO Output Item
Elemento de salida GPIO

Luego puedes añadir una «Acción disparadora cuando se cumplan las condiciones del evento»:

Adding a Trigger Action
Añadiendo una acción disparadora

Esto abre el siguiente diálogo, donde puedes especificar los detalles de la acción. Por ejemplo, puedes querer encender el LED incorporado si se detecta un rostro con un valor de confianza mayor que 50 %:

Specifying the Trigger Conditions
Especificando las condiciones del disparador

Si pulsas el botón «Confirmar» esta acción se añade a la lista de acciones disparadoras y se activa:

List of Trigger Actions
Lista de acciones disparadoras

El LED amarillo en la placa XIAO ESP32-S3-Sense debería encenderse ahora si la cámara detecta un rostro con la confianza especificada.

En lugar del LED, también puedes seleccionar otro pin GPIO y definir su estado por defecto y activo:

Specify GPIO pin as Output
Especificar pin GPIO como salida

Esto te permitiría conectar un dispositivo, por ejemplo un abrepuertas o una alarma al GPIO1 y activarlo si la cámara ve un rostro.

Las acciones disparadoras permanecen configuradas incluso después de desconectar o desenchufar el ESP32. Aunque la documentación indica lo contrario, en mi caso las acciones disparadoras funcionaron incluso cuando el XIAO ESP32-S3-Sense no estaba conectado a la interfaz web.

Salida serial vía I2C

La salida GPIO está limitada a «rostro detectado» o «no detectado». Para información más detallada, como el número de rostros detectados, sus cuadros de detección y valor de confianza, puedes usar la salida serial. Sin embargo, necesitarás conectar un segundo microcontrolador vía UART, I2C o SPI para procesar la detección.

El código para la detección de rostros se despliega vía SenseCraft y corre en el XIAO ESP32-S3-Sense. El código para procesar las detecciones se flashea vía Arduino IDE y corre en el segundo microcontrolador – en mi caso un ESP32-lite. La imagen abajo muestra las partes principales del sistema, usando I2C para la comunicación:

Face detection system with detection processing
Sistema de detección de rostros con procesamiento de detección

Conectar el ESP32-lite al XIAO ESP32-S3-Sense vía I2C es fácil. La imagen abajo muestra el diagrama de conexiones:

Connecting XIAO ESP32-S3-Sense to ESP32 lite via I2C
Conexión XIAO ESP32-S3-Sense a ESP32-lite vía I2C

Los pines I2C en el ESP32-lite son SDA=GPIO19 y SCL=GPIO23. Los pines correspondientes en el ESP32-S3-Sense son SDA=D4/GPIO5 y SCL=D5/GPIO4. Nota que el diagrama muestra la parte trasera de las placas, donde están etiquetadas las salidas digitales (D0…D10).

ESP32-liteXIAO
SDAGPIO19D4 / GPIO5
SCLGPIO23D5 / GPIO4

Abajo está el pinout completo del XIAO ESP32-S3-Sense visto desde el frente. Puedes ver los pines SDA y SCL a la izquierda de la placa.

Pinout of XIAO ESP32-S3-Sense
Pinout del XIAO ESP32-S3-Sense

En la siguiente sección vamos a escribir el código que corre en el ESP32-lite y procesa las detecciones de rostros generadas por el XIAO ESP32-S3-Sense.

Código para comunicación serial

Para que el siguiente código funcione primero necesitas instalar la Seeed_Arduino_SSCMA biblioteca. Abre el LIBRARY MANAGER, busca «Seeed_Arduino_SSCMA» y haz clic en el botón INSTALL:

Installing Seeed_Arduino_SSCMA library
Instalando la biblioteca Seeed_Arduino_SSCMA

Luego conecta el ESP32-lite a tu ordenador y descarga el siguiente código en él:

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

Este código invoca al detector de rostros que corre en el ESP32-S3-Sense e imprime los valores de confianza y los cuadros de detección para cualquier rostro detectado en el Monitor Serial. Veamos el código más de cerca.

bibliotecas

Primero incluimos las bibliotecas Wire y la Seeed_Arduino_SSCMA. Necesitamos la biblioteca Wire para la comunicación I2C y la Seeed_Arduino_SSCMA para comunicarnos con el detector de rostros.

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

objeto

Luego creamos el objeto detector, que provee funciones para iniciar una detección de rostros y para obtener los resultados de la detección:

SSCMA detector;

setup

En la funciónsetupinicializamos la comunicación Serial con el Monitor Serial y la comunicación I2C con el detector:

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

Esto asume que usas los pines I2C por defecto. Si no, tendrás que especificarlos creando un objetoWireseparado.

loop

Finalmente, en la funciónloopinvocamos al detector y luego imprimimos la confianza y el cuadro delimitador de los rostros detectados en el Monitor Serial:

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 todo está correctamente conectado y funcionando deberías ver los resultados de detección impresos en el Monitor Serial así:

Face detection results on Serial Monitor
Resultados de detección de rostros en el Monitor Serial

Ahora podrías cambiar fácilmente el código, por ejemplo, para contar el número de rostros detectados, realizar seguimiento de rostros o provocar una acción si un rostro se acerca (cuadro delimitador grande).

Finalmente, ten en cuenta que los umbrales de confianza e IoU se configuran vía la interfaz web de SenseCraft y se almacenan en el ESP32-S3-Sense. Podrías ponerlos a cero y hacer tu propio filtrado en el código.

Conclusiones y comentarios

En este tutorial aprendiste cómo desplegar y ejecutar un modelo de detección de rostros en tiempo real en el XIAO ESP32-S3-Sense usando la plataforma SenseCraft AI.

La plataforma SenseCraft AI facilita mucho integrar un modelo de IA preentrenado en tus proyectos TinyML. No necesitas escribir código para desplegar o ejecutar el modelo.

La interfaz web te permite configurar diferentes opciones de salida (GPIO, Serial, MQTT), también sin programar. Pero la interfaz Serial te permite escribir tu propio código para procesar los resultados de detección si lo necesitas. Sin embargo, para eso necesitarás conectar un segundo microcontrolador.

Una desventaja de la plataforma SenseCraft AI es que esencialmente no puedes extender el código del modelo desplegado. Todo el código de procesamiento adicional debe correr en un segundo microcontrolador. Por otro lado, en la mayoría de casos la carga computacional del modelo es tan alta que de todas formas es mejor usar un microcontrolador separado.

Por ejemplo, si quieres construir tu propio gimbal con seguimiento de rostros, tendría sentido ejecutar la detección de rostros en un microcontrolador y el control de servos en otro.

Si quieres aprender más sobre el XIAO ESP32-S3-Sense, echa un vistazo a nuestro Getting started with XIAO-ESP32-S3-Sense tutorial. Y Seeed Studio tiene mucha más información en su Getting Started Wiki.

Una aplicación común de placas con cámara es la transmisión y vigilancia. Si eso es lo que buscas, los Stream Video with with XIAO-ESP32-S3-SenseySurveillance Camera with ESP32-CAM tutoriales pueden ser útiles.

Finalmente, si quieres detectar personas en lugar de rostros, echa un vistazo al Edge AI Room Occupancy Sensor with ESP32 and Person Detection tutorial.

Si tienes alguna pregunta, no dudes en dejarla en la sección de comentarios.

¡Feliz bricolaje! 😉