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
- Tener una suscripción de Microsoft Azure para poder crear un recurso de Speech
- Tener instalado Node.js
Crear los recursos Azure Speech y Text Analytics
Primero vamos a crear un recurso Speech en el portal de Azure

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»

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

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