Azure Cognitive Services | Conversión de voz a texto y análisis de sentimientos

Este ejemplo muestra como usar el servicio cognitivo de Azure Speech para traducir voz a texto dentro de una aplicación web capturando el audio del micrófono y luego analizaremos el texto convertido con el servicio de Text Analytics para analizar el sentimiento del texto.

Prerequisitos
Crear los recursos Azure Speech y Text Analytics

Primero vamos a crear un recurso Speech en el portal de Azure

Crear Azure Speech

Vamos a dejar las opciones por defecto y seleccionamos un nombre único, cuando el recurso esté creado vamos a copiar la clave (key) y la región en la sección «Claves y punto de conexión»

Azure Speech Keys

Ahora vamos a crear un recurso Text Analytics en el portal de Azure

Crear Text Analytics

Vamos a dejar las opciones por defecto y seleccionamos un nombre único, cuando el recurso esté creado vamos a copiar la clave (key) y el punto de conexión (End Point) en la sección «Claves y punto de conexión»

Ejecutar la aplicación web

Ya que necesitamos acceso al micrófono para poder capturar la voz, vamos a crear una aplicación web con React y consumir el servicio Speech con JavaScript y TypeScript.

Primero vamos a clonar la aplicación del siguiente repositorio de GitHub, esta aplicación fue construida basada en el siguiente ejemplo de conversión de voz a texto

Una vez clonada la aplicación vamos a modificar el archivo .env y colocamos la clave (key) y la región del recurso Speech creado en Azure y la clave (key) y end point del recurso Text Analytics creado en Azure.

Ahora podemos ejecutar la aplicación como cualquier aplicación React ejecutando los siguientes comandos en el directorio raíz del proyecto

  • npm install para instalar los paquetes necesarios
  • npm run dev para ejecutar la aplicación

En caso que no se instalen los paquetes necesarios para consumir los servicios de Speech y Text Analytics podemos instalarlos con los siguientes comandos:

  • npm install @azure/ai-text-analytics@5.2.0-beta.1
  • npm install microsoft-cognitiveservices-speech-sdk

Para probar la aplicación basta con presionar el botón de reconocimiento de voz y luego el botón de análisis de sentimiento

Código

Vamos a explorar el código, comenzando por el archivo src/App.js

Al inicio del archivo encontramos los importes necesarios tanto para el servicio de Speech como para Text Analytics

import { TextAnalyticsClient, AzureKeyCredential } from "@azure/ai-text-analytics";
//import enviroment variables
require('dotenv').config();

const speechsdk = require('microsoft-cognitiveservices-speech-sdk')

La función sttFromMic() es la encargada de iniciar la captura del micrófono y transformar la voz a texto invocando al servicio de Speech. Las primeras líneas inician la configuración usando las variables del archivo .env. las lineas comentadas son del proyecto original que iniciaba la configuración con un token obtenido del backend, la nueva forma permite que la aplicación se pueda compilar como SPA y se pueda publicar como sitio estático.

async sttFromMic() {
        //const tokenObj = await getTokenOrRefresh();
        //const speechConfig = speechsdk.SpeechConfig.fromAuthorizationToken(tokenObj.authToken, tokenObj.region);
        const speechKey = process.env.REACT_APP_SPEECH_KEY;
        const speechRegion = process.env.REACT_APP_SPEECH_REGION;
        const speechConfig = speechsdk.SpeechConfig.fromSubscription(speechKey,speechRegion);
        speechConfig.speechRecognitionLanguage = 'es-MX';
        
        const audioConfig = speechsdk.AudioConfig.fromDefaultMicrophoneInput();
        const recognizer = new speechsdk.SpeechRecognizer(speechConfig, audioConfig);

La función analysisText() toma el texto transformado con la función anterior y analiza el sentimiento del texto con el servicio Text Analytics. Las primeras lineas inician la configuración del servicio Text Analytics y ejecutan el análisis de sentimiento (Si, así de simple!!)

const endpoint = process.env.REACT_APP_TEXTANALYTICS_ENDPOINT;
        const apiKey = process.env.REACT_APP_TEXTANALYTICS_KEY;

        const documents = [
            this.state.displayText
        ];

        const client = new TextAnalyticsClient(endpoint, new AzureKeyCredential(apiKey));

        const results = await client.analyzeSentiment(documents);
        let resultText = "";

El proyecto completo puede ser descargado del siguiente proyecto en GitHub

Artículos relacionados

Científico de datos vs ingeniero de datos (y cuál debería elegir)

Machine Learning | Predecir el valor de una acción usando series de tiempo

Publicado por Diego Zumarraga Mera

Experto en transformación digital, Machine Learning, Desarrollo Web, Arquitecto Azure

A %d blogueros les gusta esto: