Cognitive Services para detección de palabras en tiempo real en Unity
Tags: azure, unity3d, cognitiveservices, csharp
Published: 2020-09-17 22:31:45





El uso de Cognitive Services a propiciado un gran auge de aplicaciones mas complejas elaboradas en menor tiempo, un caso de uso de esto es la capacidad de utilizar el servicio Speech to Text de Cognitive Services para detectar en tiempo real oraciones que pueden ser usadas para juegos, realidad aumentada, mejorar experiencias de usuario y muchas mas.

En esta ocasión quiero hablare acerca de un tema muy interesante, el servicio Speech to Text de Microsoft Azure nos proporciona una manera muy rápida de agregar interacción a nuestra app, en esta ocasión probaremos este servicio en una aplicación en Unity mostrándonos lo que hablemos en tiempo real!!.

##Requisitos
* Unity 2019.x.x o posterior.
* Cuenta en Azure (los recursos usados aquí utilizan créditos que puede costarte dinero real)
* SDK de voz de Azure Cognitive Services
* Cuenta en GitHub

##Comenzando

Como primer paso descargaremos el SDK del servicio Speech to Text de Azure, Puedes obtenerlo en el siguiente enlace: 
[SDK para Unity](https://aka.ms/csspeech/unitypackage)

También te recomiendo ampliamente que descargues todo el código de este proyecto en el repositorio de Github te dejo el enlace: [Obtener Codigo](https://github.com/Azure-Samples/cognitive-services-speech-sdk)

Como segundo paso es necesario crear un recurso en Azure llamado Cognitive Services, a continuación te enseño como hacerlo.

Ingresa al portal de Azure y da clic en nuevo recurso, en la barra de búsqueda escribe cognitive service y da clic en el servicio, posteriormente da clic en crear.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/fuldanr5r7cq3wvg9nvb.png)

Una vez des clic en crear te abrirá una pantalla parecida a la imagen que te dejo aquí abajo, a continuación te explico como llenarla.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/tsriembs39em5vz3liau.png)

* Suscripción: selecciona tu suscripción actual
* Grupo de recursos: selecciona el grupo de recursos que desees ocupar, si no tienes uno tendrás que crearlo.(Recuerda un grupo de recursos es muy parecido a una carpeta donde guardas tus archivos).
* Región: la región donde se almacenara tu recurso, selecciona la mas cercana a tu región.
* Nombre: Un nombre unico para tu servicio Cognitive Services.
* Plan de Tarifa: Selecciona el plan de tarifa según tus necesidades, **recuerda que según el plan de tarifa puede generar mas o menores costos**, En mi caso seleccionare el plan S0. 

Puedes consultar los precios en el siguiente enlace.

[Precios](https://azure.microsoft.com/es-es/pricing/details/cognitive-services/)

Confirma todos los campos y da clic en revisar y crear. Con esto tendremos listo nuestro recurso, recuerda ir a la pantalla principal de tu recurso en la sección Claves y puntos de conexión.
Mas adelante ocuparemos la clave 1 y la ubicación así que te recomiendo las copies para tenerlas a la mano. (la clave 2 funciona de igual manera, puedes optar por usar cualquiera de las dos claves).

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/yi1zcdo434xy179wv0qj.png)
##Pasemos a Unity!!.
Genial ahora abriremos Unity hub y daremos clic en el botón ADD esto nos abrirá el explorador de archivos, en el buscaremos la carpeta descargada del repositorio, navega a la siguiente ruta **cognitive-services-speech-sdk\samples\unity\from-unitymicrophone** y da clic en seleccionar carpeta.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/67tkzv3sd4vskd3tfjub.png)

Selecciona la versión de Unity que tengas instalado, te recomiendo usar versiones superiores a la 2019.x.x.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/rlz442sgp19kowum7fz2.png)

Dependiendo de tu equipo Unity de demorara en terminar de exportar el proyecto, no te preocupes estará listo pronto.

Una vez listo nuestro proyecto de Unity abre la escena Hello World, hecho esto deberías tener algo parecido a lo de la imagen.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/vstsey2xkrkq6gm8gnzl.png)

Genial ahora agregaremos el SDK de Speech to Text, esto arreglara los errores por falta de bibliotecas.

Para agregar el SDK da clic en Assets -> Import Package -> Custom Package. 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/t0r1jf6n2n4obbpxwpa5.png)

Esto abrirá el explorador de archivos, Selecciona el archivo se SDK que descargaste al inicio de este post y da clic en abrir, una vez hecho esto recuerda agregar todos los elementos que aparecen en la ventana de administrador de paquetes y dar clic en Import.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/eaarhw69ov5xna2axyp8.png)

Para el siguiente paso será necesario que habrás el Script de HelloWorld.cs, una vez abierto el archivo se vera como en la siguiente imagen.
Este Script controla los eventos del boton, las llamadas al servicio de Azure , el funcionamiento del microfono, el tratamiento de errores, la devolucion de los datos de parte del servicio de azure y algunos extras mas.
Te recomiendo que revises este código con mucho detenimiento e intentes averiguar para que funciona cada linea, comenta en este post dudas referentes a este fragmento de codigo y a la brevedad posible tratare de solucionarlas. 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/9lsv2cqdri1giv0y392q.png)
 
Genial ahora lo que nos interesa modificar sera la linea 155 la cual permite ingresar nuestra clave de servicio y la region donde se almacena nuetro servicio de azure, asi que ingresa las claves que obtuvimos al crear el servicio de cognitive services y recuerda guardar el archivo despues de ingresarlas.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/171pvahuj882bere6s0i.png)

Genial estamos listos para probar el proyecto pero antes recuerda revisar que las referencias en los objetos de unity estén bien, para esto da clic en el objeto canvas de la escena HelloWorld, ve al inspector y en el script Helloworld revisa que estén llenos estos campos.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/n02v1epg0r3vsyevzexw.png)

De no estarlo deberás arrastrar los siguientes elementos a su respectiva barra.
En la siguiente imagen e señalado los elementos a arrastrar conforme el color de la flecha.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/kgb7a4qbamzymhghyajf.png)

Genial ahora esta listo para dar clic en play, cuando este corriendo el programa da clic en el botón y prueba diciendo una frase en ingles, te darás cuenta que automáticamente aparecerá tu dialogo en la pantalla!!.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/j9hsnsn2bx0xkf2wslis.png)

Para finalizar me encantaría que imaginaras el potencial que nos otorga estas herramientas, desde simple traducciones en tiempo real, a videojuegos mas interactivos, ¿te imaginas un proyecto de Realidad Aumentada con este servicio y el poder del Machine learnig?. ¿Por que no intentas exportar este proyecto a tu celular? Solo necesitaras hacer la configuración recurrente como cualquier otra app. 

Referencias: [Guía para SDK en Unity](https://docs.microsoft.com/es-es/azure/cognitive-services/speech-service/quickstarts/setup-platform?tabs=unity%2Cwindows%2Cjre%2Cbrowser&pivots=programming-language-csharp)
[Código y mas ejemplos en GitHub](https://github.com/Azure-Samples/cognitive-services-speech-sdk)