El aprendizaje automático (Machine Learning, ML) está revolucionando la forma en que interactuamos con la tecnología. En este módulo, aprenderás cómo integrar modelos de aprendizaje automático en tus aplicaciones Android utilizando herramientas y bibliotecas como TensorFlow Lite y ML Kit de Firebase.

Contenidos

  1. Introducción al aprendizaje automático en Android
  2. Configuración del entorno
  3. Uso de TensorFlow Lite
  4. Uso de ML Kit de Firebase
  5. Ejemplo práctico: Clasificación de imágenes
  6. Ejercicios prácticos

  1. Introducción al aprendizaje automático en Android

El aprendizaje automático permite a las aplicaciones aprender y mejorar a partir de la experiencia sin ser programadas explícitamente para ello. En Android, puedes utilizar modelos preentrenados o entrenar tus propios modelos para tareas específicas.

Conceptos clave

  • Modelo de aprendizaje automático: Un algoritmo que ha sido entrenado en un conjunto de datos para realizar una tarea específica.
  • TensorFlow Lite: Una biblioteca de TensorFlow optimizada para dispositivos móviles y embebidos.
  • ML Kit de Firebase: Un kit de herramientas de aprendizaje automático que facilita la implementación de modelos en aplicaciones móviles.

  1. Configuración del entorno

Antes de comenzar, asegúrate de tener Android Studio instalado y configurado. También necesitarás agregar las dependencias necesarias para TensorFlow Lite y ML Kit en tu proyecto.

Dependencias

Agrega las siguientes dependencias en tu archivo build.gradle:

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:2.5.0'
    implementation 'com.google.firebase:firebase-ml-vision:24.0.3'
    implementation 'com.google.firebase:firebase-ml-model-interpreter:22.0.4'
}

  1. Uso de TensorFlow Lite

TensorFlow Lite es una versión ligera de TensorFlow diseñada para dispositivos móviles. Puedes usar modelos preentrenados o convertir tus propios modelos de TensorFlow para usarlos con TensorFlow Lite.

Pasos para usar TensorFlow Lite

  1. Obtener un modelo preentrenado: Puedes descargar modelos preentrenados desde TensorFlow Hub.
  2. Convertir el modelo: Si tienes un modelo de TensorFlow, conviértelo a TensorFlow Lite usando el convertidor de TensorFlow Lite.
  3. Integrar el modelo en tu aplicación: Coloca el archivo .tflite en el directorio assets de tu proyecto y carga el modelo en tu aplicación.

Ejemplo de código

import org.tensorflow.lite.Interpreter;

public class MainActivity extends AppCompatActivity {
    private Interpreter tflite;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try {
            tflite = new Interpreter(loadModelFile());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private MappedByteBuffer loadModelFile() throws IOException {
        AssetFileDescriptor fileDescriptor = this.getAssets().openFd("model.tflite");
        FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
        FileChannel fileChannel = inputStream.getChannel();
        long startOffset = fileDescriptor.getStartOffset();
        long declaredLength = fileDescriptor.getDeclaredLength();
        return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
    }
}

  1. Uso de ML Kit de Firebase

ML Kit de Firebase proporciona una serie de APIs de aprendizaje automático listas para usar, como la detección de texto, la identificación de rostros y la clasificación de imágenes.

Configuración de Firebase

  1. Agregar Firebase a tu proyecto: Sigue las instrucciones en la documentación de Firebase para agregar Firebase a tu proyecto.
  2. Habilitar ML Kit: En la consola de Firebase, habilita los servicios de ML Kit que deseas utilizar.

Ejemplo de código

import com.google.firebase.ml.vision.FirebaseVision;
import com.google.firebase.ml.vision.common.FirebaseVisionImage;
import com.google.firebase.ml.vision.label.FirebaseVisionImageLabeler;
import com.google.firebase.ml.vision.label.FirebaseVisionImageLabeling;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bitmap);
        FirebaseVisionImageLabeler labeler = FirebaseVision.getInstance().getOnDeviceImageLabeler();

        labeler.processImage(image)
            .addOnSuccessListener(labels -> {
                for (FirebaseVisionImageLabel label : labels) {
                    String text = label.getText();
                    float confidence = label.getConfidence();
                    Log.d("MLKit", "Label: " + text + ", Confidence: " + confidence);
                }
            })
            .addOnFailureListener(e -> {
                e.printStackTrace();
            });
    }
}

  1. Ejemplo práctico: Clasificación de imágenes

Vamos a crear una aplicación que clasifique imágenes utilizando TensorFlow Lite. La aplicación tomará una foto y clasificará el contenido de la imagen.

Pasos

  1. Configurar el proyecto: Crea un nuevo proyecto en Android Studio y agrega las dependencias necesarias.
  2. Obtener un modelo preentrenado: Descarga un modelo de clasificación de imágenes desde TensorFlow Hub.
  3. Integrar el modelo en la aplicación: Coloca el archivo .tflite en el directorio assets y carga el modelo en tu aplicación.
  4. Capturar una imagen: Usa la cámara del dispositivo para capturar una imagen.
  5. Clasificar la imagen: Usa TensorFlow Lite para clasificar la imagen y mostrar los resultados.

Código de ejemplo

import android.content.Intent;
import android.graphics.Bitmap;
import android.provider.MediaStore;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_IMAGE_CAPTURE = 1;
    private Interpreter tflite;
    private ImageView imageView;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = findViewById(R.id.imageView);
        textView = findViewById(R.id.textView);

        try {
            tflite = new Interpreter(loadModelFile());
        } catch (Exception e) {
            e.printStackTrace();
        }

        findViewById(R.id.button).setOnClickListener(v -> {
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bitmap imageBitmap = (Bitmap) extras.get("data");
            imageView.setImageBitmap(imageBitmap);
            classifyImage(imageBitmap);
        }
    }

    private void classifyImage(Bitmap bitmap) {
        // Preprocesar la imagen y ejecutar el modelo
        // Mostrar los resultados en textView
    }

    private MappedByteBuffer loadModelFile() throws IOException {
        AssetFileDescriptor fileDescriptor = this.getAssets().openFd("model.tflite");
        FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
        FileChannel fileChannel = inputStream.getChannel();
        long startOffset = fileDescriptor.getStartOffset();
        long declaredLength = fileDescriptor.getDeclaredLength();
        return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
    }
}

  1. Ejercicios prácticos

Ejercicio 1: Clasificación de imágenes con TensorFlow Lite

  1. Objetivo: Crear una aplicación que clasifique imágenes utilizando un modelo preentrenado de TensorFlow Lite.
  2. Instrucciones:
    • Configura un nuevo proyecto en Android Studio.
    • Descarga un modelo de clasificación de imágenes desde TensorFlow Hub.
    • Integra el modelo en tu aplicación.
    • Captura una imagen usando la cámara del dispositivo.
    • Clasifica la imagen y muestra los resultados.

Ejercicio 2: Detección de texto con ML Kit

  1. Objetivo: Crear una aplicación que detecte texto en imágenes utilizando ML Kit de Firebase.
  2. Instrucciones:
    • Configura un nuevo proyecto en Android Studio y agrega Firebase.
    • Habilita la API de detección de texto en la consola de Firebase.
    • Captura una imagen usando la cámara del dispositivo.
    • Usa ML Kit para detectar texto en la imagen y muestra los resultados.

Conclusión

En este módulo, has aprendido cómo integrar modelos de aprendizaje automático en tus aplicaciones Android utilizando TensorFlow Lite y ML Kit de Firebase. Has visto ejemplos prácticos de clasificación de imágenes y detección de texto, y has realizado ejercicios para reforzar los conceptos aprendidos. Con estas habilidades, puedes crear aplicaciones más inteligentes y ofrecer experiencias más ricas a tus usuarios.

© Copyright 2024. Todos los derechos reservados