Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Cómo Usar Servicios de Aprendizaje Automático de Google Cloud para Android

by
Difficulty:IntermediateLength:MediumLanguages:

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Las noticias estos días están llenas de palabras de moda tales como automatización, inteligencia artificial y aprendizaje automático. Eso es probablemente por lo que más y más usuarios de teléfonos inteligentes están comenzando a buscar aplicaciones más inteligentes. Como desarrollador regular de aplicaciones Android, sin embargo, probablemente careces de los recursos necesarios para crear tales aplicaciones desde cero.

Afortunadamente, Google recientemente lanzó una plataforma de Aprendizaje Automático en la Nube, que ofrece redes neuronales que han sido pre-entrenadas para realizar una variedad de tareas. La mayoría de sus modelos no solo son altamente precisos, sino también están en constante mejora. ¿Y adivina qué? ¡Puedes usarlos simplemente haciendo unas cuantas llamadas API REST!

En este tutorial te presentará la plataforma de Aprendizaje Automático en la Nube y te mostraré cómo usarla para crear una aplicación Android inteligente que puede reconocer objetos del mundo real y nombrarlos en múltiples lenguajes.

Prerrequisitos

Para sacar lo mejor de este tutorial, todo lo que necesitas es:

1. Adquiriendo una Llave API

Para poder usar los servicios de aprendizaje automático de Google en tu aplicación Android, necesitas una llave API. Puedes obtener una creando un nuevo proyecto en la consola de Plataforma Google Cloud.

Comienza iniciando sesión en la consola y presionando el botón Crear Nuevo Proyecto. En el diálogo que emerge, dale un nombre significativo al proyecto.

Create new project

Una vez que el proyecto ha sido creado, ve a Administrador API > Tablero y presiona el botón Habilitar API.

En la siguiente pantalla, bajo el encabezado Aprendizaje Automático Google Cloud, podrás ver todas las diferentes APIs de aprendizaje automático disponibles para ti. En este tutorial, estaremos usando solo las APIs Visión y Traducción

Machine learning library

Para habilitar la API Visión, da clic en su enlace y presiona el botón Habilitar.

Enable Vision API

De manera similar, para habilitar la API Traducción, da clic sobre su enlace y presiona el botón Habilitar.

Solo necesitarás una llave para usar ambas APIs. Para obtenerla, ve a la pestaña de Credenciales, presiona el botón Crear credenciales, y selecciona llave API.

Select API key

Ahora deberías ver una ventana emergente conteniendo tu llave API secreta.

2. Creando un Nuevo Proyecto Android

Inicia Android Studio y crea un nuevo proyecto con una actividad vacía. Te sugiero que elijas al menos API nivel 19 para el SDK mínimo soportado.

Aunque no tienes que hacerlo, siempre es una buena idea usar una librería robusta de trabajo en red para comunicar con la plataforma de Aprendizaje Automático Google Cloud. En este tutorial, estaremos usando una de esas librerías llamada Fuel. Agrégala como una dependencia compile en el archivo build.gradle del módulo de app:

Presiona Sync Now para actualizar tu proyecto.

Después, nuestra aplicación necesitará el permiso INTERNET para comunicarse con los servidores de Google. Así pues, agrega la siguiente línea dentro del archivo manifest del proyecto:

Por último, agrega tu llave API al archivo values/strings.xml:

3. Usando la API Visión

La API Visión te ayuda a crear aplicaciones que pueden ver y hacer sentido del entorno del usuario. La detección de rostros, detección de emociones, reconocimiento de caracter óptico, y comentario de imagen son algunas de sus muchas características. Por ahora, nos estaremos concentrando solo en la poderosa característica de comentario de imagen, también llamada detección de etiqueta---la cual, en mi opinión, es muy útil.

Como podrías esperar, la API espera una imagen como una de sus entradas. Así pues, creemos una pantalla en donde el usuario puede capturar imágenes usando la cámara del dispositivo.

Paso 1. Crea un Diseño

El diseño de nuestra pantalla debería tener widget Button que el usuario puede presionar para tomar una fotografía, un widget ImageView para mostrar la imagen, y un widget TextView para mostrar las etiquetas, o comentarios, generados por la API. De manera acorde, agrega el siguiente código al archivo XML de diseño de tu actividad:

Nota que hemos asociado un manejador onClick con el botón. Lo definiremos en el siguiente paso.

Paso 2: Crea un Intent

Creando un nuevo intent con la acción ACTION_IMAGE_CAPTURE y pasándolo al método startActivityForResult(), puedes pedir a la aplicación de cámara por defecto del dispositivo del usuario tomar fotografías y pasarlas a tu aplicación. Así pues, agrega el siguiente código a tu clase Activity:

Para poder recibir las imágenes capturadas por la aplicación de cámara por defecto, debes anular el método onActivityResult() de tu clase Activity. Dentro del método, tendrás acceso a un objeto Bundle conteniendo toda la información de la imagen. Puedes generar la información de la imagen simplemente convirtiéndola a un Bitmap y pasándola al widget ImageView.

Si ejecutas la aplicación ahora y tomas una foto, verás que el tamaño de la imagen es bastante pequeño. Eso está bien, sin embargo---la API Cloud Vision es muy precisa incluso con miniaturas de imagen.

Paso 3: Codifica la Imagen

La API Visión no puede usar objetos Bitmap directamente. En su lugar, espera una cadena de texto codificada en Base64 de información comprimida de imagen.

Para comprimir la información de la imagen, puedes usar el método compress() de la clase Bitmap. Como sus argumentos, el método espera el formato de compresión a usar, la calidad de salida deseada, y un objeto ByteArrayOutputStream. El siguiente código comprime el bitmap usando el formato JPEG y también asegura que la calidad de la imagen resultante es lo suficientemente alta:

Ahora puedes generar la cadena Base64 usando el método encodeToString() de la clase Base64().

Paso 4: Procesa la Imagen 

Después de todo ese arduo trabajo, tienes todo lo que necesitas para interactuar con la API Visión. Comienza creando una cadena que contenga la URL de la API y tu llave API:

Para enviar información a la API, debes crear una petición HTTP POST. El cuerpo de la petición debe ser un documento JSON conteniendo la información de la imagen codificada en Base64. Para detección de etiqueta, el documento también debe tener un arreglo features conteniendo el valor LABEL_DETECTION. Aquí está el formato del documento JSON.

Aunque es posible codificar a mano el documento JSON, crearlo de manera programática es menos propenso al error. El siguiente código te muestra cómo hacerlo usando las clases JSONObject y JSONArray:

En este punto, podemos usar el método post() de la clase Fuel para hacer la petición HTTP POST. Como su único argumento, el método espera la URL de la API. También debes incluir los encabezados content-length y content-type en la petición. Para hacerlo, usa el método header(). De manera similar, para poder agregar el documento JSON al cuerpo de la petición POST, usa el método post().

Por último, llamando al método responseString() y pasando una nueva instancia de la clase Handler a este, puedes obtener de manera asíncrona la respuesta de la petición como una cadena. De manera acorde, agrega el siguiente código:

Cuando usas la característica de detección de etiqueta, la API Visión devuelve un documento JSON conteniendo etiquetas. Junto con cada etiqueta, puedes también obtener una puntuación especificando qué tan certera es la etiqueta. El documento luce como esto:

Por ahora, solo ciclemos a través de todos los objetos en el arreglo labelAnnotations y agrega el valor de cada llave description al widget TextView de nuestro diseño. Aquí está cómo puedes hacer eso dentro del método success() de la clase Handler:

Ahora puedes ejecuta la aplicación, tomar una foto de cualquier objeto cercano, y ver las etiquetas que la API Visión genera para este.

Labels generated for a laptop

4. Usando la API Traducción

La API de Traducción en la Nube, como sugiere su nombre, puede traducir texto desde y hacia más de 100 lenguajes. Al usarla de manera efectiva, puedes crear aplicaciones inteligentes que puedan comunicarse con tus usuarios en sus propios lenguajes.

En el paso anterior, viste que las etiquetas que nuestra aplicación genera están en inglés. Agreguemos ahora un botón para traducir esas etiquetas a Alemán.

Paso 1: Actualiza el Diseño

Agrega un widget Button hacia el final del diseño de tu Activity usando el siguiente código:

Nota que este botón también tiene un manejador de evento onClick que debe ser definido en tu clase Activity.

Paso 2: Traduce las Etiquetas

Usando la API de Traducción es mucho más sencillo que usar la API Visión, primariamente porque no necesitas crear un documento JSON para definir tu petición. en su lugar, puedes simplemente pasarle parámetros en una cadena de consulta.

Crea el método translateToGerman() y, dentro de este, crea una cadena conteniendo la URL de la API de Traducción.

Para agregar campos a la cadena de consulta de la URL de arriba, podemos usar una List de objetos Pair. Los siguientes campos son importantes:

  • key, especificando tu llave API secreta
  • source, especificando el lenguaje desde el que quieres traducir 
  • target, especificando el lenguaje al que quieres traducir
  • q, especificando el texto que quieres traducir

El siguiente código te muestra cómo configurar la API para traducir de Inglés a Alemán:

Debido a que la cadena de consulta puede contener múltiples campos q, estaremos agregando uno por cada etiqueta que esté presente dentro del widget TextView dentro de nuestro diseño. Aquí está cómo:

Finalmente, puedes llamar al método get() de la clase Fuel para hacer una petición HTTP GET a la API de traducción. Esta vez también, puedes usar el método responseString() para obtener la respuesta de manera asíncrona como una cadena de texto.

La respuesta de la API de Traducción es un documento JSON conteniendo un arreglo de traducciones. Tiene el siguiente formato:

Por ahora, dentro del método success() de la clase Handler, simplemente ciclemos a través del arreglo translations del documento JSON de arriba, y actualicemos los contenidos del widget TextView usando los valores asociados con las llaves translatedText.

Si ejecutas la aplicación ahora, generas etiquetas para una imagen, y presionas el segundo botón, deberías poder ver las etiquetas en Alemán.

Labels in German

Conclusión

En este tutorial, aprendiste cómo usar las APIs Cloud Vision y Cloud Translation, que son parte de la plataforma de Aprendizaje Automático Google Cloud, en una aplicación Android. Hay muchas más de estas APIs ofrecidas por la plataforma. Puedes aprender más acerca de ellas refiriéndote a la documentación oficial.

Mientras estás aquí, ¡revisa algunos de nuestros otros tutoriales sobre cómo usar servicios de aprendizaje automático y en la nube en tus aplicaciones Android!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.