Implemente rápidamente los diseños de IoT de "Alexa incorporada" mediante un kit basado en microcontroladores
Colaboración de Editores de DigiKey de América del Norte
2020-02-11
Los asistentes de voz han evolucionado rápidamente para convertirse en una característica importante en cualquier producto inteligente. Entre las soluciones actuales basadas en la nube, el Servicio de voz Alexa (AVS) de Amazon se ha convertido en el asistente de voz dominante. Este brinda una capacidad preconfigurada que aprovecha los recursos de nube de Amazon para el reconocimiento de voz y el procesamiento del lenguaje natural.
Sin embargo, para los desarrolladores, los requisitos de rendimiento y la complejidad del diseño de AVS han demostrado ser un obstáculo significativo de acceso para los dispositivos basados en microprocesadores más pequeños para el hogar conectado e IoT (Internet de las cosas). Ideado como una solución directa y un diseño de referencia para aplicaciones personalizadas, un kit de NXP Semiconductors proporciona una oferta de AVS de Amazon diseñada específicamente para dispositivos con recursos limitados.
Este artículo muestra cómo los desarrolladores pueden implementar rápidamente diseños de "Alexa incorporada" mediante una solución lista para usar de NXP.
¿Qué es el AVS?
Desde su aparición hace una década, la tecnología de asistente de voz ha evolucionado rápidamente y ha impulsado un mercado en crecimiento para altavoces inteligentes que, según los analistas del mercado, ya incluye aproximadamente un tercio de la población de los EE. UU. Entre las soluciones de la competencia, los altavoces inteligentes de Amazon Echo han obtenido una participación dominante y han aprovechado el éxito de Amazon Web Services (AWS) al brindar recursos basados en la nube para admitir aplicaciones Echo de terceros o Skills.
Mediante el Alexa Skills Kit (ASK) y las interfaces de programación de aplicaciones (API) relacionadas, los desarrolladores pueden aprovechar la base instalada en rápida expansión de los altavoces inteligentes Echo para agregar cierto nivel de control de voz a sus dispositivos conectados. Con este enfoque, los productos conectados, como televisores inteligentes o termostatos que "funcionan con Alexa", pueden responder a las solicitudes de voz de los usuarios y las directivas relacionadas que reciben de la nube de Alexa (Figura 1). Esto resume AVS y brinda una idea de su potencial.
Figura 1: Al crear aplicaciones de Alexa, o Skills, los desarrolladores pueden permitir que los productos conectados interactúen con los comandos hablados de los usuarios a través de los productos de Amazon Echo. (Fuente de la imagen: Amazon Web Services)
Diseño de Alexa incorporada
A diferencia de los productos que "funcionan con Alexa", los productos inteligentes con "Alexa incorporada" logran una interfaz más perfecta y de baja latencia entre el dispositivo habilitado para voz de Alexa y los recursos de AWS. Estos productos integran el AVS directamente a un diseño de dispositivos conectados. Al usar el AVS en combinación con la plataforma de AWS IoT Core, los desarrolladores pueden implementar sofisticadas aplicaciones de IoT que permiten a los usuarios usar comandos de voz con los productos habilitados para Alexa para controlar dispositivos conectados y recibir respuestas de voz de esos dispositivos (Figura 2).
Figura 2: Los dispositivos habilitados para Alexa brindan a los usuarios una interfaz de voz para controlar dispositivos (arriba) o recibir notificaciones de dispositivos de IoT (abajo) conectados a recursos de Amazon Web Services a través de AWS IoT Core. (Fuente de la imagen: Amazon Web Services)
Sin embargo, en el pasado, los diseños para los dispositivos habilitados para Alexa en el centro de este tipo de aplicación de IoT han requerido grandes esfuerzos de diseño por sí mismos. Para utilizar los servicios de Alexa basados en la nube, un dispositivo necesitaría ejecutar las múltiples bibliotecas de servicios de AVS proporcionadas a través del kit de desarrollo de software (SDK) del dispositivo de AVS que se ejecuta en plataformas Android o Linux para detectar la palabra de activación, comunicarse con la nube de Alexa y procesar directivas para capacidades compatibles (Figura 3).
Figura 3: Este diagrama ilustra los componentes del SDK del dispositivo de AVS y cómo fluyen los datos entre ellos. (Fuente de la imagen: Amazon Web Services)
Para admitir estas bibliotecas de servicios, los diseños de dispositivos habilitados para Alexa normalmente necesitarían un procesador de la aplicación de alto rendimiento y al menos 50 megabytes (Mbytes) de memoria para cumplir con las demandas de procesamiento de AVS. Además, estos diseños con frecuencia incorporarían un procesador de señal digital (DSP) para ejecutar los complejos algoritmos necesarios para extraer audio de voz de los entornos ruidosos y admitir las capacidades de voz de campo lejano que se esperan para los dispositivos del asistente de voz. Por último, los requisitos del sistema para crear un dispositivo eficaz habilitado para Alexa generalmente han ido más allá del nivel de costo y complejidad necesarios para dispositivos de IoT prácticos.
Sin embargo, con el lanzamiento de su integración de AVS para AWS IoT Core, Amazon redujo drásticamente la carga de trabajo del procesador y el espacio de memoria requerido para implementar los productos de Alexa incorporada. Con este servicio, las tareas intensivas de computación y memoria se transfieren desde el dispositivo habilitado para Alexa hasta un dispositivo virtual relacionado en la nube (Figura 4).
Figura 4: AVS para AWS IoT Core transfiere las tareas intensivas de computación y memoria a la nube para permitir la implementación de las capacidades del asistente de voz de Alexa en dispositivos de IoT con recursos limitados. (Fuente de la imagen: Amazon Web Services)
Las responsabilidades de procesamiento del dispositivo físico se reducen a brindar servicios más básicos, como mensajes seguros, entrega confiable de datos de audio desde y hacia Alexa, gestión de tareas y notificaciones de eventos dentro del dispositivo y con Alexa. La transferencia de datos, comandos y notificaciones entre el dispositivo físico y Alexa se realiza a través de mensajes eficientes de MQTT (Transporte de telemetría de mensajes en cola), con algunos temas reservados en el protocolo de publicación y suscripción de MQTT. Por último, una aplicación móvil complementaria interactúa con la nube de Alexa para el registro del dispositivo y cualquier interacción con el usuario adicional requerida con el dispositivo habilitado para Alexa.
Al transferir el procesamiento pesado a la nube, el AVS para AWS IoT Core permite a los desarrolladores crear productos de Alexa incorporada con plataformas que son más conocidas para los desarrolladores de sistemas integrados. En lugar de procesadores de aplicaciones con 50 Mbytes de memoria que se ejecutan en Linux o Android, los desarrolladores pueden implementar estos diseños con microcontroladores más modestos que tengan menos de 1 Mbyte de RAM y ejecuten software de sistema operativo en tiempo real (RTOS). De hecho, los diseños habilitados para Alexa creados con el AVS para AWS IoT Core pueden lograr una reducción del 50% en la lista de materiales, en comparación con los diseños creados para ejecutar el conjunto completo de servicios de AVS localmente.
Si bien el AVS para AWS IoT Core admite una plataforma de tiempo de ejecución más rentable, la implementación de un producto certificado con Alexa incorporada sigue siendo una tarea compleja. Los desarrolladores nuevos en AVS e IoT Core pueden enfrentar una curva de aprendizaje considerable al trabajar sobre los requisitos de AWS para seguridad, comunicaciones, administración de cuentas, diseño de experiencia de usuario (UX) y mucho más. Independientemente de su familiaridad con el ecosistema de AWS, todos los desarrolladores de productos de Alexa deben asegurarse de que sus diseños cumplan con un extenso conjunto de especificaciones y requisitos para obtener la certificación de Amazon Alexa.
La solución basada en microcontroladores de NXP para Alexa ofrece una solución de sistema preconfigurada que implementa totalmente los requisitos de hardware y software secundarios del dispositivo para el AVS de Amazon para AWS IoT Core.
Solución de Alexa basada en microcontroladores
Construido en torno al microcontrolador de NXP i.MX RT106A, el kit del AVS SLN-ALEXA-IOT de NXP ofrece conectividad de AWS lista para usar, algoritmos de audio de campo lejano calificados por el AVS, cancelación de eco, capacidad de la palabra de activación de Alexa y código de aplicación. Basado en un núcleo Arm Cortex-M7, el microcontrolador i.MX RT106A del kit es miembro de la familia de procesadores híbridos i.MX RT106x de NXP diseñados específicamente para la computación periférica de IoT. Diseñado para aplicaciones de voz integradas, el RT106A agrega funcionalidad especializada al conjunto integral de interfaces periféricas, vasta memoria interna y amplio soporte para opciones de memoria externa de la arquitectura de base de la familia de procesadores híbridos i.MX RT1060 de NXP (Figura 5).
Figura 5: La familia de procesadores híbridos i.MX RT1060 de NXP integra un núcleo de microcontroladores Arm Cortex-M7 con un conjunto completo de interfaces periféricas, memoria y otras capacidades generalmente requeridas en un dispositivo de IoT. (Fuente de la imagen: NXP)
Con su funcionalidad integrada, el microcontrolador i.MX RT106A necesita solo unos pocos componentes adicionales para proporcionar la base de hardware necesaria para implementar el AVS para AWS IoT Core. En su kit SLN-ALEXA-IOT, NXP integra el microcontrolador i.MX RT106A a un módulo del sistema con memoria flash de 256 megabits (Mb), módulo de transceptor de Wi-Fi/Bluetooth LBEE5KL1DX de Murata Electronics y convertidor reductor AP2202K-3.3TRG1 de Diodes (Figura 6).
Figura 6: El diseño del módulo del sistema del kit del AVS SLN-ALEXA-IOT de NXP aprovecha la sencilla interfaz de hardware necesaria para integrar el microcontrolador i.MX RT106A de NXP con flash externo y un transceptor inalámbrico. (Fuente de la imagen: NXP)
Para complementar este módulo del sistema, una placa de voz en el kit SLN-ALEXA-IOT proporciona tres micrófonos MEMS de modulación de densidad de pulso (PDM) SPH0641LM4H-1 de Knowles, un altavoz AS01808AO de PUI Audio y un amplificador de audio clase D TFA9894D de NXP. Junto con un conector USB tipo C para alimentar el kit y ejecutar una consola de línea de comandos desde una computadora personal, la placa de voz proporciona cabeceras para Ethernet, periféricos en serie y entrada/salida de propósito general (GPIO) de microcontrolador i.MX RT106A. Por último, la placa incluye interruptores para la entrada de control básica, así como LED de retroalimentación visual que cumplen con los requisitos del Sistema de atención de UX de AVS de Amazon y utiliza diferentes colores de LED y patrones de ciclo de encendido/apagado.
Con su módulo de sistema y placa de voz, el hardware SLN-ALEXA-IOT ofrece una plataforma completa para el procesamiento secundario del dispositivo de AVS para el software de AWS IoT Core. Sin embargo, como se señaló anteriormente, los diseños de dispositivos de IoT habilitados para Alexa dependen tanto del software optimizado como del hardware. Crear ese software desde cero con AVS de Amazon para AWS IoT API puede demorar considerablemente los proyectos a medida que los desarrolladores trabajan en el proceso de creación de los objetos de datos requeridos y la implementación de los protocolos relacionados. Pueden surgir más demoras a medida que los desarrolladores que trabajan para obtener la certificación de Alexa incorporada intentan cumplir con el Sistema de atención de UX de AVS, las prácticas de seguridad de AWS y otros requisitos relacionados con cada aspecto de las interacciones de los usuarios con los servicios de Alexa en el diseño. NXP aborda estas preocupaciones con su completo entorno de software de control de voz en tiempo de ejecución basado en Amazon FreeRTOS integrado a una capa de controladores de software para flash de ejecución en el lugar (XIP), conectividad y otros componentes de hardware (Figura 7).
Figura 7: Creado sobre Amazon FreeRTOS, el entorno del sistema de control de voz de NXP ofrece un amplio conjunto de servicios de middleware, como rutinas de firmware para inferencia de aprendizaje automático y procesamiento de front-end de audio. (Fuente de la imagen: NXP)
Por debajo de las capacidades de procesamiento de voz de este entorno de software, el firmware Intelligent Toolbox de NXP ofrece funciones optimizadas para todas las tareas de audio, incluido el motor de inferencia de aprendizaje automático (ML) y el front-end de audio de ML para el acondicionamiento y la optimización de señales de audio. Otros servicios de middleware admiten conectividad segura, comunicaciones de AWS y capacidades de audio. Por encima de esta capa de servicio integral, el software para AWS IoT Core, el proceso de incorporación y otras funciones de control de aplicaciones interceden en el inicio desde un gestor de arranque de dos etapas con soporte para actualizaciones inalámbricas (OTA) integradas en el servicio de OTA de AWS IoT y el cliente de OTA de FreeRTOS de Amazon.
Mediante el software instalado de fábrica que se ejecuta en este entorno, los desarrolladores pueden abrir de inmediato el kit de hardware SLN-ALEXA-IOT con una aplicación completa habilitada para Alexa diseñada para usar una cuenta de demostración de NXP para AWS IoT. La documentación de NXP brinda un tutorial detallado que describe el proceso para abrir el kit, aprovisionar credenciales de Wi-Fi y completar la autenticación del dispositivo de AWS con la cuenta de demostración. Como parte de este proceso, los desarrolladores interactúan con el kit y AWS mediante una aplicación móvil de Android incluida en el paquete de distribución de software, que está disponible en el sitio de NXP con un código de activación proporcionado con cada kit SLN-ALEXA-IOT. Después de algunos pasos sencillos, los desarrolladores pueden comenzar a interactuar inmediatamente con el kit a través del mismo tipo de interacciones de voz de Alexa, mediante los altavoces inteligentes Echo.
Para la creación rápida de prototipos de productos con capacidades de Alexa, el kit SLN-ALEXA-IOT y el software instalado de fábrica ofrecen una plataforma lista. Al mismo tiempo, el hardware y el software del kit actúan como una plataforma de desarrollo rápido para crear diseños personalizados habilitados para Alexa basados en el microcontrolador i.MX RT106A.
Desarrollo personalizado
El software para las soluciones de Alexa basadas en i.MX RT106A aprovecha las capacidades del entorno de tiempo de ejecución de control de voz de NXP a través del SDK de Alexa Voice IoT de la MCU de NXP proporcionado como parte del paquete de distribución de software disponible en la activación del producto. Diseñado como un complemento para el entorno completo de desarrollo integrado (IDE) MCUXpresso basado en Eclipse de NXP, este SDK combina el código fuente completo para aplicaciones de muestra, controladores y middleware con cabeceras para distribuciones binarias de capacidades de firmware especializadas como Intelligent Toolbox de NXP, motor de inferencia de ML y front-end de audio de ML.
Los desarrolladores que necesitan implementar rápidamente un producto habilitado para Alexa en principio pueden usar la aplicación de demostración completa de Alexa con modificaciones menores. En el caso más simple, estas modificaciones simplemente retrasarían la aplicación a la cuenta de AWS del desarrollador con sus propias credenciales de seguridad. NXP ofrece una descripción paso a paso para completar este proceso.
Para el desarrollo personalizado, las aplicaciones de muestra incluidas en la distribución de software proporcionan ejemplos ejecutables que muestran cómo trabajar con el SDK de Alexa Voice IoT de la MCU de NXP. En lugar de pasar directamente a la aplicación de demostración completa de Alexa, los desarrolladores pueden explorar las aplicaciones de muestra que les permiten enfocarse más estrictamente en las capacidades específicas que incluyen el front-end de audio, la conectividad Wi-Fi y Bluetooth, la gestión de arranque y otros. Por ejemplo, la aplicación de muestra front-end de audio ilustra los patrones de diseño básicos para efectuar la detección con palabra de activación mediante tareas de Amazon FreeRTOS.
En la aplicación de muestra front-end de audio, la rutina principal demuestra cómo los desarrolladores inicializarían los subsistemas de software y hardware y luego usarían la función xTaskCreate de FreeRTOS para iniciar la tarea de la aplicación principal (appTask) y una tarea de línea de comandos de la consola (sln_shell_task) antes de liberar el control al planificador de FreeRTOS (Listado 1). (Nota: La llamada vTaskStartScheduler de inicio del planificador de FreeRTOS solo se devolvería si al planificador le faltase memoria suficiente).
Copia void main(void) { /* Enable additional fault handlers */ SCB->SHCSR |= (SCB_SHCSR_BUSFAULTENA_Msk | /*SCB_SHCSR_USGFAULTENA_Msk |*/ SCB_SHCSR_MEMFAULTENA_Msk); /* Init board hardware. */ BOARD_ConfigMPU(); BOARD_InitBootPins(); BOARD_BootClockRUN(); .
.
.
RGB_LED_Init(); RGB_LED_SetColor(LED_COLOR_GREEN); sln_shell_init(); xTaskCreate(appTask, "APP_Task", 512, NULL, configMAX_PRIORITIES - 1, &appTaskHandle); xTaskCreate(sln_shell_task, "Shell_Task", 1024, NULL, tskIDLE_PRIORITY + 1, NULL); /* Run RTOS */ vTaskStartScheduler(); .
.
.
}
Listado 1: Incluida en la distribución del SDK de Alexa Voice IoT de la MCU de NXP, una aplicación de muestra front-end de audio indica los requisitos básicos de inicialización y la creación de tareas de FreeRTOS para la tarea de la aplicación principal y una tarea de línea de comandos de la consola. (Fuente del código: NXP)
Después de inicializar el subsistema de audio, la tarea de la aplicación principal appTask a su vez inicia un par de tareas de FreeRTOS. Una tarea ejecuta una rutina de servicio, audio_processing_task, que procesa la entrada de audio, mientras que la otra maneja la conversión de la salida de PDM del micrófono en la modulación de código de pulso (PCM). Después de una limpieza adicional, appTask se instala en un bucle sin fin, esperando una notificación del RTOS que indique que se detectó la palabra de activación (Listado 2).
Copia void appTask(void *arg) { .
.
.
// Create audio processing task if (xTaskCreate(audio_processing_task, "Audio_processing_task", 1536U, NULL, audio_processing_task_PRIORITY, &xAudioProcessingTaskHandle) != pdPASS) .
.
.
// Create pdm to pcm task if (xTaskCreate(pdm_to_pcm_task, "pdm_to_pcm_task", 1024U, NULL, pdm_to_pcm_task_PRIORITY, &xPdmToPcmTaskHandle) != pdPASS) .
.
.
RGB_LED_SetColor(LED_COLOR_OFF); SLN_AMP_WriteDefault(); uint32_t taskNotification = 0; while (1) { xTaskNotifyWait(0xffffffffU, 0xffffffffU, &taskNotification, portMAX_DELAY); switch (taskNotification) { case kWakeWordDetected: { RGB_LED_SetColor(LED_COLOR_BLUE); vTaskDelay(100); RGB_LED_SetColor(LED_COLOR_OFF); break; } default: break; } taskNotification = 0; } }
Listado 2: En la aplicación de muestra front-end de audio, la tarea de la aplicación principal, appTask, inicia las tareas para manejar el procesamiento de audio y la conversión de datos del micrófono y luego espera una notificación de FreeRTOS (taskNotification) de que se detectó la palabra de activación (kWakeWordDetected). (Fuente del código: NXP)
A su vez, la tarea de procesamiento de audio en esta aplicación de muestra inicializa la función de firmware de la palabra de activación y los parámetros de detección de la palabra de activación antes de que también entre en un bucle sin fin, donde espera una notificación de FreeRTOS de la tarea de conversión de datos del micrófono de que los datos procesados del micrófono están disponibles. En ese punto, la tarea de procesamiento de audio llama a las funciones de firmware de Intelligent Toolbox que procesan los datos de audio y realizan la detección de la palabra de activación mediante el motor de inferencia de ML (Listado 3).
Copia void audio_processing_task(void *pvParameters) { .
.
.
SLN_AMAZON_WAKE_Initialize(); SLN_AMAZON_WAKE_SetWakeupDetectedParams(&wakeWordActive, &wwLen); while (1) { // Suspend waiting to be activated when receiving PDM mic data after Decimation xTaskNotifyWait(0U, ULONG_MAX, &taskNotification, portMAX_DELAY); .
.
.
// Process microphone streams int16_t *pcmIn = (int16_t *)((*s_micInputStream)[pingPongIdx]); SLN_Voice_Process_Audio(g_externallyAllocatedMem, pcmIn, &s_ampInputStream[pingPongAmpIdx * PCM_SINGLE_CH_SMPL_COUNT], &cleanAudioBuff, NULL, NULL); // Pass output of AFE to wake word SLN_AMAZON_WAKE_ProcessWakeWord(cleanAudioBuff, 320); taskNotification &= ~currentEvent; if (wakeWordActive) { wakeWordActive = 0U; // Notify App Task Wake Word Detected xTaskNotify(s_appTask, kWakeWordDetected, eSetBits); } } }
Listado 3: En la aplicación de muestra front-end de audio, la tarea de procesamiento de audio inicializa el motor de la palabra de activación del firmware, espera una notificación de FreeRTOS de que los datos del micrófono están disponibles y finalmente llama al front-end analógico del firmware Intelligent Toolbox (SLN_Voice_Process_Audio) de NXP y al motor de inferencia de ML (SLN_AMAZON_WAKE_ProcessWakeWord) para la detección de la palabra de activación. (Fuente del código: NXP)
Después de la detección de la palabra de activación, la tarea de procesamiento de audio emite una notificación de tarea de FreeRTOS para informar a la tarea de la aplicación principal, appTask, sobre ese evento. Al recibir esa notificación, appTask destella momentáneamente con un LED de color azul (consulte el Listado 2 nuevamente).
La aplicación de muestra de Alexa completa se basa en los mismos patrones descritos para la aplicación front-end de audio más simple, pero extiende sustancialmente esa base de código básica para admitir la funcionalidad completa de Alexa. Por ejemplo, después de que el motor de inferencia de ML detecta la palabra de activación en la aplicación de muestra de Alexa, la tarea de procesamiento de audio realiza una serie de notificaciones de FreeRTOS relacionadas con cada etapa en la secuencia de procesamiento de Alexa (Listado 4).
Copia void audio_processing_task(void *pvParameters) { .
.
.
SLN_AMAZON_WAKE_Initialize(); SLN_AMAZON_WAKE_SetWakeupDetectedParams(&u8WakeWordActive, &wwLen); while (1) { // Suspend waiting to be activated when receiving PDM mic data after Decimation xTaskNotifyWait(0U, ULONG_MAX, &taskNotification, portMAX_DELAY); .
.
.
int16_t *pcmIn = (int16_t *)((*s_micInputStream)[pingPongIdx]); SLN_Voice_Process_Audio(g_w8ExternallyAllocatedMem, pcmIn, &s_ampInputStream[pingPongAmpIdx * PCM_SINGLE_CH_SMPL_COUNT], &pu8CleanAudioBuff, NULL, NULL); SLN_AMAZON_WAKE_ProcessWakeWord((int16_t*)pu8CleanAudioBuff, 320); taskNotification &= ~currentEvent; // If devices is muted, then skip over state machine if (s_micMuteMode) { if (u8WakeWordActive) { u8WakeWordActive = 0U; } memset(pu8CleanAudioBuff, 0x00, AUDIO_QUEUE_ITEM_LEN_BYTES); } if (u8WakeWordActive) { configPRINTF(("Wake word detected locally\r\n")); } // Execute intended state switch (s_audioProcessingState) { case kIdle: /* add clean buff to cloud wake word ring buffer */ continuous_utterance_samples_add(pu8CleanAudioBuff, PCM_SINGLE_CH_SMPL_COUNT * PCM_SAMPLE_SIZE_BYTES); if (u8WakeWordActive) { continuous_utterance_buffer_set(&cloud_buffer, &cloud_buffer_len, wwLen); u8WakeWordActive = 0U; wwLen = 0; // Notify App Task Wake Word Detected xTaskNotify(s_appTask, kWakeWordDetected, eSetBits); // App Task will now determine if we begin recording/publishing data } break; .
.
.
case kWakeWordDetected: audio_processing_reset_mic_capture_buffers(); // Notify App_Task to indicate recording xTaskNotify(s_appTask, kMicRecording, eSetBits); if (s_audioProcessingState != kMicRecording) { s_audioProcessingState = kMicCloudWakeVerifier; } configPRINTF(("[audio processing] Mic Recording Start.\r\n")); // Roll into next state case kMicCloudWakeVerifier: case kMicRecording: micRecordingLen = AUDIO_QUEUE_ITEM_LEN_BYTES; if (u8WakeWordActive) { u8WakeWordActive = 0U; } // Push data into buffer for consumption by AIS task status = audio_processing_push_mic_data(&pu8CleanAudioBuff, &micRecordingLen); .
.
.
} }
Listado 4: En la aplicación completa de Alexa, la tarea de procesamiento de audio aumenta los pasos de procesamiento realizados en la aplicación front-end de audio con el código adicional para administrar las etapas de procesamiento de audio posteriores en la secuencia de Alexa. (Fuente del código: NXP)
Después de la detección de la palabra de activación de ML local, la tarea de procesamiento de audio de la aplicación completa de Alexa notifica a la tarea de la aplicación principal, como se describió anteriormente. Además, ahora debe administrar los estados de procesamiento de audio donde el micrófono permanece abierto para capturar la entrada de audio completa para el procesamiento de voz en la nube de Alexa, sin perder el flujo de datos original que contiene la palabra de activación detectada localmente. Este flujo de datos completo se pasa a la nube de Alexa para la verificación de la palabra de activación, así como para el procesamiento de voz adicional.
En cada etapa de esta secuencia de procesamiento, la tarea de procesamiento de audio emite las notificaciones de FreeRTOS correspondientes a la tarea de la aplicación principal. Al igual que con la tarea de procesamiento de audio, la aplicación completa de Alexa amplía el patrón de tareas de la aplicación principal presentado de forma más simple en la aplicación front-end de audio. Aquí, la tarea principal de la aplicación completa de Alexa, appTask, genera eventos para la transmisión a la nube de Alexa y para la gestión de los LED del kit de acuerdo con los requisitos del Sistema de atención de UX de AVS de Amazon. Por ejemplo, al mantener el micrófono abierto después de la detección de la palabra de activación, la tarea de procesamiento de audio notifica a la tarea de la aplicación principal, la cual establece el estado de atención de UX adecuado (indicador LED de color cian sólido) (consulte los puntos resaltados en amarillo en el Listado 5 y el punto resaltado correspondiente en el Listado 4 nuevamente).
Copia void appTask(void *arg) { .
.
.
// Create audio processing task if (xTaskCreate(audio_processing_task, "Audio_proc_task", 1536U, NULL, audio_processing_task_PRIORITY, &xAudioProcessingTaskHandle) != pdPASS) .
.
.
// Create pdm to pcm task if (xTaskCreate(pdm_to_pcm_task, "pdm_to_pcm_task", 512U, NULL, pdm_to_pcm_task_PRIORITY, &xPdmToPcmTaskHandle) != pdPASS) .
.
.
while(1) { xTaskNotifyWait( ULONG_MAX, ULONG_MAX, &taskNotification, portMAX_DELAY ); if (kIdle & taskNotification) { // Set UX attention state ux_attention_set_state(uxIdle); taskNotification &= ~kIdle; } if (kWakeWordDetected & taskNotification) { if (reconnection_task_get_state() == kStartState) { if (!AIS_CheckState(&aisHandle, AIS_TASK_STATE_MICROPHONE)) { // Set UX attention state ux_attention_set_state(uxListeningStart); .
.
.
// Begin sending speech micOpen.wwStart = aisHandle.micStream.audio.audioData.offset + 16000; micOpen.wwEnd = aisHandle.micStream.audio.audioData.offset + audio_processing_get_wake_word_end(); micOpen.initiator = AIS_INITIATOR_WAKEWORD; AIS_EventMicrophoneOpened(&aisHandle, &micOpen); // We are now recording audio_processing_set_state(kWakeWordDetected); } } else { ux_attention_set_state(uxDisconnected); audio_processing_set_state(kReconnect); } taskNotification &= ~kWakeWordDetected; } .
.
.
if (kMicRecording & taskNotification) { // Set UX attention state and check if mute is active // so we don't confuse the user if (audio_processing_get_mic_mute()) { ux_attention_set_state(uxMicOntoOff); } else { ux_attention_set_state(uxListeningActive); } taskNotification &= ~kMicRecording; } .
.
.
Listado 5: En la aplicación completa de Alexa, la tarea de la aplicación principal organiza la secuencia de procesamiento de Alexa, incluido el control de las luces LED de acuerdo con los requisitos de certificación de Alexa. (Fuente del código: NXP)
La rutina principal en la aplicación completa de Alexa amplía de manera similar el patrón indicado de forma más simple en la aplicación front-end de audio. En este caso, la aplicación principal también crea tareas de FreeRTOS adicionales para un procedimiento de inicialización más importante, así como tareas para manejar los botones del kit y admitir actualizaciones OTA.
Al crear estas aplicaciones de muestra, los desarrolladores pueden implementar con confianza la funcionalidad de Alexa incorporada mediante el SDK de Alexa Voice IoT de la MCU de NXP en sus propios diseños basados en i.MX RT106A. Debido a que aprovecha al máximo el AVS para AWS IoT Core, esta plataforma de ejecución permite a los desarrolladores implementar las soluciones habilitadas para Alexa de manera más amplia en dispositivos de bajo costo con recursos limitados en la base de aplicaciones de IoT cada vez más sofisticadas.
Conclusión
El Servicio de voz Alexa de Amazon ha permitido a los desarrolladores implementar la misma funcionalidad de asistente de voz que impulsa el rápido crecimiento de los altavoces inteligentes Echo. En el pasado, los productos capaces de obtener la codiciada certificación de Alexa incorporada requerían plataformas de ejecución con memoria local importante y capacidades de procesamiento de alto rendimiento. Creado con el AVS para AWS IoT Core, un kit de NXP ofrece una solución directa para la funcionalidad de Alexa incorporada mediante un microcontrolador y un entorno de ejecución de software relacionado.
Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.




