Todos los que estamos en el campo de la IT y ya tenemos una edad, hemos visto como Microsoft ha ido evolucionando desde el MS-Dos del 1981 hasta ahora. En esta evolución ha habido varios puntos de inflexión, quizás uno de los más importantes haya sido el salto al Cloud con su plataforma AZURE en 2010. Si hacemos un rápido resumen de que es AZURE, diríamos que es un servicio de computación en la nube creado para construir, probar, desplegar y administrar aplicaciones y servicios mediante el uso de los centros de datos de Microsoft. Disponen de tres líneas principales de servicios:
- Software como servicio (SaaS)
- Plataforma como servicio (PaaS)
- Infraestructura como servicio (IaaS)
Dentro de Paas, algunos de los servicios más conocidos son los servicios de base de datos, Active Directory, etc. Uno de los menos conocidos es Azure Cognitive Services.
Este servicio se apoya en inteligencias artificiales entrenadas y optimizadas por Microsoft que por medio de API’s, nos permiten que integremos en nuestras aplicaciones diferentes aspectos de inteligencia artificial.
Estas API’s agrupan sus servicios en 5 grandes áreas,
Algunos ejemplos de uso:
- Análisis de texto y escritura.
- Chatbots que entienden el lenguaje natural del usuario.
- Reconocimiento facial.
- Reconocimiento de objetos, su entorno y el contexto en imágenes.
- Reconocimiento de voz.
Veamos un caso práctico real sobre cómo podemos mejorar nuestras aplicaciones con el uso de estas API’s. El contexto sería el siguiente, disponemos de una aplicación desarrollada con Xamarin Froms que da soporte a un CRM donde existe un formulario para dar de alta un artículo. Para mejorar la experiencia de usuario y conseguir un alta más rápida y efectiva, utilizamos la transformación de voz a texto, con el objetivo de que un usuario con solo seleccionar en la aplicación alta por voz, pueda describir con sus palabras como es el artículo, mientras va hablando se irán rellenando automáticamente los campos del formulario hasta haberse rellenado por completo o detectar que el usuario dice las palabras clave “Finalizar” o “Cancelar”.
El primer paso para poder implementar esta funcionalidad en la aplicación es obtener la Api Key que nos permitirá consumir la API. Para obtenerla hay que conectarse a la plataforma de Microsoft Azure, seleccionamos todos los servicios en el menú lateral y nos desplazamos hacia abajo hasta llegar a la sección de “AI + aprendizaje automático”.
Seleccionamos “Cognitive Services”. Una vez dentro, sino tenemos ningún servicio de voz le damos a la opción “+ Crear”:
Seleccionamos la subscripción.
Seleccionamos o creamos el grupo de recursos donde se agrupará el servicio.
Seleccionamos una región y un nombre para la instancia.
Seleccionamos la tarifa que queremos. Las tarifas disponibles son: Ver tarifas
Una vez introducidos los datos le damos a “Revisar y crear” y luego “Crear”.
Cuando la instancia se haya creado, podréis copiar la key de la siguiente pantalla:
Bien, ahora que ya tenemos la key nos podemos ir a la parte más emocionante en el desarrollo.
Primero de todo debemos instalar el siguiente paquete nuget en los proyectos de UI.
Como cada uno de los sistemas operativos de los dispositivos móviles tienen sus particularidades, debemos programar una parte de forma específica para cada uno de ellos, por tanto, crearemos un DependencyService, para este post nos centraremos solo en la plataforma de Android.
Añadimos la interface para la dependencia:
En el método Start añadimos un parámetro para indicar el idioma del hablante, si solo queréis reconocer un idioma no haría falta.
En el proyecto de Andoid creamos la dependencia al nuevo servicio:
En la dependencia de Android, no implementaremos el método “StopSpeechToText” ya que no hace falta hacer nada específico para finalizar el reconocimiento de voz en esta plataforma. Si será necesario implementarlo en otras plataformas.
Creamos el método que permitirá iniciar el reconocimiento de Voz:
- Lo primero que hace el método es comprobar que se tiene acceso al micrófono antes de la escucha.
- Podemos tunear un poco el comportamiento de la IA con los parámetros de configuración. El más importante es “ExtraLanguage” donde indicaremos el idioma del hablante.
- En este caso, la IA nos enviará el texto reconocido cuando el hablante deje de hablar los milisegundos que le indiquemos en los parámetros “Silence”. Si queremos frases largas ampliaremos este tiempo, si buscamos captar palabras lo reduciremos.
- Una vez configurado se inicia la actividad de escucha y proceso de pasar voz a texto, para poder recibir el texto escuchado, debemos capturarlo desde el método “OnActivityResult” del archivo MainActivity.cs.
Si el resultado capturado corresponde con la actividad lanzada a nuestra IA y además nos devuelve algún texto, lo enviamos a quien haya hecho la llamada por medio del “MessagingCenter”.
Con esto ya tenemos el dispositivo Android listo para conectarse a la IA, enviarle el audio y recibir el texto. Ahora toca ir al proyecto compartido.
En el ViewModel de la página, crearemos los métodos necesarios para gestionar el reconocimiento de voz. Primero de todo añadiremos la referencia a la Api CognitiveService:
Añadiremos una variable privada en la clase para acceder a los endpoints de la Api:
Creamos un método para inicializar el reconocimiento de Voz:
- Primero solicitamos el acceso al micrófono y si nos lo conceden inicializamos la Api.
- Configuramos el idioma del hablante.
- Creamos un nuevo evento con el que procesaremos el texto reconocido por la Api.
- El método “UpdateTranscription” es el método encargado de procesar el texto. Reconoce el texto y rellena los campos del formulario y finaliza o cancela el proceso al detectar las palabras clave. Para procesar el texto podemos utilizar otras Api’s de IA, como hacerlo lo dejo para otro post ?
Creamos un método para iniciar el reconocimiento de voz:
- Podemos iniciar el reconocimiento de varias formas, para este caso, lo que nos interesa es que este reconociendo la voz continuamente hasta que nosotros paremos el servicio de forma manual, bien porque ya se haya rellenado todos los datos del formulario o porque reconozcamos una palabra clave de finalización o cancelación.
Creamos un método para finalizar el reconocimiento de voz:
Con estos tres métodos en el ViewModel ya tenemos suficiente, ahora para iniciar y parar el reconocimiento de voz, añadiremos en el código de la página “xaml.cs” las llamadas a los métodos del ViewModel en los métodos “OnAppearing” y “OnDisappearing”, esto lo hacemos así, porque en este caso se desea que al entrar en la página esta active automáticamente el reconocimiento de voz hasta que se cierre la página.
Con esto ya tenemos el ejemplo completo. Es relativamente sencillo consumir las IA’s de AZURE por medio de las Api’s. Animaos a llevar vuestras aplicaciones un paso más allá…
Referencias | Links de interes
Cognitive Services: API para soluciones de inteligencia artificial | Microsoft Azure
Xamarin.Forms Documentación – Xamarin | Microsoft Docs
https://azure.microsoft.com/es-es/pricing/details/cognitive-services/speech-services/
Introducción a DependencyService de Xamarin.Forms – Xamarin | Microsoft Docs