Laboratorio 6. Comandos por voz

Objetivos

  • Familiarizarse con el procesamiento de voz en nodos AI-IoT
  • Configurar un interfaz por voz offline/on-device para detección de comandos de voz
  • Integrar procesamiento con voz en una solución IoT genérica

Introducción

Procesamiento de voz

Hoy en día el procesamiento digital de la voz es empleado en múltiples ámbitos, siendo tal vez uno de los más extendidos el de los asistentes de voz virtuales (Amazon Alexa, Google Assitant, Apple Siri, ...).

Spoken Dialog System

En su mayoría estos sistemas combinan diversas técnicas de inteligencia artificial para proporcionar un dialogo hablado con el usuario (ver esquema). La complejidad computacional y el tamaño de los modelos empleados por estos algoritmos son elevados, por lo que en su mayoría se ejecutan (online) en servidores Cloud. No obstante, debido a razones de eficiencia energética, ancho de banda, latencia y privacidad se está tendiendo actualmente a trasladar parte de este procesamiento a los propios nodos.

Wake-Up Word (WUW)

Por ejemplo, para llevar a cabo el reconocimiento de habla, los asistentes virtuales utilizan, en su mayoría, algoritmos de detección de palabras clave despertador (Wake-Up Word) para detectar el comienzo de un enunciado por parte del usuario. Estos algoritmos, de menor complejidad que otros, se ejecutan offline en el propio dispositivo (smartphone, altavoz inteligente, etc.) lo que permite una mayor eficiencia y privacidad, ya que no es necesario transferir todo el audio al Cloud.

Es preciso señalar que, puesto que se están ejecutando constantemente, la complejidad computacional y la energía requeridas por estos algoritmos debe ser las menores posibles. Esto se consigue limitando su capacidad de identificación a una sola palabra o como máximo una única frase, generalmente corta.

Reconocimiento del habla (ASR/STT)

El reconocimiento del habla, también denominado reconocimiento automático de voz, o en inglés Automatic Speech Recognition (ASR) o también Speech To Text (STT) consiste en, dado un enunciado delimitado por WUW o por otro evento (como la pulsación de un botón en el caso de push to talk), transcribirlo a texto para su posterior procesamiento (transcripción, traducción, sistemas de respuesta automática, etc.). La complejidad computacional y el tamaño de los modelos empleados suponen un obstáculo para su procesamiento offline en la mayor parte de nodos IoT, exceptuando smartphones o dispositivos de similares prestaciones, para los que existen algunas implementaciones viables.

Wordspotting

En determinados contextos, como los dispositivos controlados por comandos de voz (voice command device, VCD) no es necesario llevar a cabo un reconocimiento completo del habla y tan sólo es necesario identificar un pequeño conjunto de palabras clave (comandos), lo que se conoce con el término genérico de wordspotting o keyword spotting. Este tipo algoritmos, aunque más complejos que la detección de WUW, son mucho más sencillos que los ASR/STT y con frecuencia pueden ejecutarse offline incluso en pequeños microcontroladores.

Espectrogramas y MFCCs

Todos los algoritmos de procesamiento de voz se basan en el uso de espectrogramas que son una representación gráfica (3D) del contenido frecuencial de una señal a lo largo del tiempo.

Espetrograma de las palabras "nineteenth century"

El proceso de obtención de un espectrograma adecuado para el procesamiento de voz sería el siguiente:

  1. Pre-emphasis: pre-amplificación (opcional) de las componentes de alta frecuencia de la señal de audio.
  2. Framing: división de la señal en un cierto número (nFrames) de ventanas temporales, habitualmente de entre 20 y 40 ms de duración.
  3. Windowing: consiste en la aplicación de una función ventana a cada frame.
  4. Transformación y cálculo de la densidad espectral: consiste en el cálculo de la Transformada de Fourier de Tiempo Reducido (Short-Time Fourier-Transform o STFT) para cada frame.
  5. MEL scale mapping: aplicación de un banco de filtros (nFilters) correspondientes a la Escala de Mel al espectro obtenido en el paso anterior.
  6. Normalización: aplicación de la Transformada Discreta de Coseno (DCT) y normalización mediante la resta de la media.

El espectrograma resultante es lo que se conoce como Coeficientes Cepstrales en las Frecuencias de Mel o MFCCs (Mel Frequency Cepstral Coefficients) y es la entrada que suelen emplear los algoritmos de procesamiento de voz.

Nota

Cabe mencionar que dependiendo de algoritmo empleado es posible usar directamente el espectrograma sin aplicar el escalado de Mel.

Reconocimiento de palabras clave y redes neuronales

Como hemos visto previamente los espectrogramas proporcionan una representación gráfica 3D a partir de una señal de audio, lo que ofrece la posibilidad de llevar a cabo el reconocimiento de palabras clave mediante CNNs similares a las empleadas en el reconocimiento de imágenes.

Ejemplo sencillo de CNN para el reconocimiento de palabras clave

El siguiente tutorial ilustra el proceso construcción de una CNN sencilla para el reconocimiento de 10 palabras, empleando para el entrenamiento un subconjunto de la base de datos "Speech Commands: A Dataset for Limited-Vocabulary Speech Recognition" y empleado las utilidades propias de Tensorflow para la decodificación de los ficheros audio y la generación de los espectrogramas.

Tarea (opcional)

Seguir el tutorial.

Tarea (opcional)

Convertir el modelo entrenado a TFLite, cuantizarlo y ejecutarlo en el acelerador Coral USB.

Micro Speech Example

El ejemplo “Micro Speech” de TFLM demuestra cómo implementar un sistema básico de reconocimiento de palabras clave en dispositivos con recursos limitados. Este ejemplo utiliza un modelo de red neuronal pequeño, entrenado para reconocer palabras cortas como “yes” y “no” a partir de audio en tiempo real capturado por un micrófono.

El flujo completo incluye la captura de audio, la extracción de características (específicamente espectrogramas de MFCC), la inferencia del modelo y la interpretación de los resultados, todo corriendo directamente en el microcontrolador sin necesidad de conexión a la nube. Es una referencia clave para desarrolladores que buscan añadir capacidades de reconocimiento de voz local en sistemas embebidos.

Tarea

Siguiendo la documentación del proyecto estudiar el modelo.

Version para ESP32

El componente esp-tflite-micro incluye una versión de este ejemplo adaptada para su uso en las placas de Espressif: examples\micro_speech.

Tarea

Probar el ejemplo siguiendo las instrucciones del repositorio.

Algunas herramientas adicionales

A continuación se enumeran algunas de las principales opciones para procesamiento de voz offline.

Tarea (opcional)

Probar algunas de estas herramientas en la Raspberry Pi 4.

Algunas referencias