Introducción a Xamarin.Forms y Azure Cognitive Services

Microsoft Cognitive Services es un conjunto de API, SDK y servicios disponibles para que los desarrolladores hagan que sus aplicaciones sean más inteligentes mediante la adición de características como el reconocimiento facial, el reconocimiento de voz y el reconocimiento del lenguaje. En este artículo se proporciona una introducción a la aplicación de ejemplo que muestra cómo invocar algunas de las API de Microsoft Cognitive Service.

Información general

El ejemplo complementario es una aplicación de lista de tareas pendientes que proporciona funcionalidad para:

  • Visualizar una lista de tareas.
  • Agregue y edite tareas a través del teclado flexible o realice el reconocimiento de voz con la API de voz de Microsoft.
  • Tareas de revisión ortográfica mediante la API de Bing Spell Check. Para obtener más información, consulte Revisión ortográfica con la API de Bing Spell Check.
  • Traducir tareas de inglés a alemán mediante la API de Translator. Para obtener más información, consulte Traducción de texto mediante la API de Translator.
  • Eliminar tareas.
  • Establezca el estado de una tarea en "listo".

Advertencia

La API de Bing Speech ha quedado en desuso en favor del servicio de voz de Azure. Para obtener un ejemplo dedicado al servicio de voz de Azure, consulte Reconocimiento de voz con la API de servicio de voz.

Las tareas se almacenan en una base de datos de SQLite local. Para obtener más información sobre el uso de una base de datos de SQLite local, consulte Trabajar con una base de datos local.

El TodoListPage se muestra cuando se inicia la aplicación. En esta página se muestra una lista de las tareas almacenadas en la base de datos local y se permite al usuario crear una nueva tarea o evaluar la aplicación:

TodoListPage

Los nuevos elementos se pueden crear haciendo clic en el botón +, que navega al TodoItemPage. Esta página también se puede navegar a seleccionando una tarea:

TodoItemPage

El TodoItemPage permite crear, editar, revisar ortografías, traducir, guardar y eliminar tareas. El reconocimiento de voz se puede usar para crear o editar una tarea. Esto se logra presionando el botón de micrófono para iniciar la grabación y presionando el mismo botón una segunda vez para detener la grabación, que envía la grabación a la API de reconocimiento de voz de Bing.

Descripción de la anatomía de la aplicación

El proyecto de código compartido de la aplicación de ejemplo consta de cinco carpetas principales:

Carpeta Fin
Modelos Contiene las clases del modelo de datos para la aplicación. Esto incluye la clase TodoItem, que modela un solo elemento de datos utilizado por la aplicación. La carpeta también incluye clases que se usan para modelar respuestas JSON devueltas desde diferentes API de Microsoft Cognitive Service.
Repositorios Contiene la interfaz ITodoItemRepository y la clase TodoItemRepository que se usan para realizar operaciones de base de datos.
Servicios Contiene las interfaces y clases que se usan para acceder a diferentes API de Microsoft Cognitive Service, junto con las interfaces que usa la clase DependencyService para localizar las clases que implementan las interfaces en proyectos de plataforma.
Utilidades Contiene la clase Timer, que usa la clase AuthenticationService para renovar un token de acceso JWT cada 9 minutos.
Vistas Contiene las páginas de la aplicación.

El proyecto de código compartido también contiene algunos archivos importantes:

Archivo Fin
Constants.cs La clase Constants, que especifica las claves de API y los puntos de conexión de las API de Microsoft Cognitive Service que se invocan. Las constantes de clave de API requieren la actualización para acceder a las diferentes API de Cognitive Service.
App.xaml.cs La clase App es responsable de crear instancias de la primera página que mostrará la aplicación en cada plataforma y la clase TodoManager que se usa para invocar operaciones de base de datos.

Paquetes NuGet

La aplicación de ejemplo usa los siguientes paquetes NuGet:

  • Newtonsoft.Json: proporciona un marco JSON para .NET.
  • PCLStorage: proporciona un conjunto de API de E/S de archivos locales multiplataforma.
  • sqlite-net-pcl: proporciona almacenamiento de base de datos de SQLite.
  • Xam.Plugin.Media: proporciona api de toma y selección de fotos multiplataforma.

Además, estos paquetes NuGet también instalan sus propias dependencias.

Modelado de los datos

La aplicación de ejemplo usa la clase TodoItem para modelar los datos que se muestran y almacenan en la base de datos de SQLite local. En el ejemplo de código siguiente se muestra la clase TodoItem:

public class TodoItem
{
  [PrimaryKey, AutoIncrement]
  public int ID { get; set; }
  public string Name { get; set; }
  public bool Done { get; set; }
}

La propiedad ID se usa para identificar de forma única cada instancia de TodoItem y está decorada con atributos de SQLite que hacen de la propiedad una clave principal de incremento automático en la base de datos.

Invocar operaciones de base de datos

La clase TodoItemRepository implementa operaciones de base de datos y se puede acceder a una instancia de la clase a través de la propiedad App.TodoManager. La clase TodoItemRepository proporciona los métodos siguientes para invocar operaciones de base de datos:

  • GetAllItemsAsync: recupera todos los elementos de la base de datos de SQLite local.
  • GetItemAsync – recupera un elemento especificado de la base de datos local de SQLite.
  • SaveItemAsync: crea o actualiza un elemento en la base de datos local de SQLite.
  • DeleteItemAsync: elimina el elemento especificado de la base de datos de SQLite local.

Implementaciones de proyectos de plataforma

La carpeta Services del proyecto de código compartido contiene las interfaces IFileHelper y IAudioRecorderService que usan para la clase DependencyService para buscar las clases que implementan las interfaces en proyectos de plataforma.

La interfaz IFileHelper se implementa mediante la clase FileHelper en cada proyecto de plataforma. Esta clase consta de un único método, GetLocalFilePath, que devuelve una ruta de acceso del archivo local para almacenar la base de datos de SQLite.

La interfaz IAudioRecorderService se implementa mediante la clase AudioRecorderService en cada proyecto de plataforma. Esta clase consta de StartRecording, StopRecordingy métodos auxiliares, que usan API de plataforma para grabar audio desde el micrófono del dispositivo y almacenarlo como un archivo wav. En iOS, el AudioRecorderService usa la API de AVFoundation para grabar audio. En Android, el AudioRecordService usa la API de AudioRecord para grabar audio. En la Plataforma universal de Windows (UWP), el AudioRecorderService usa la API de AudioGraph para grabar audio.

Invocación de Cognitive Services

La aplicación de ejemplo invoca lo siguiente a Microsoft Cognitive Services: