Ir a la consola

Detecta etiquetas con el Kit de AA en Android

Puedes usar el Kit de AA para etiquetar objetos reconocidos en una imagen.

Antes de comenzar

  1. Configura un proyecto de Firebase:
    1. Crea un proyecto en Firebase console si no lo hiciste antes. Si ya tienes un proyecto de Google asociado con tu app para dispositivos móviles, haz clic en Importar proyecto de Google. De lo contrario, haz clic en Agregar proyecto.
    2. Haz clic en Agrega Firebase a tu app para Android y sigue los pasos de la configuración. Si estás importando un proyecto de Google existente, es posible que esto suceda de forma automática y solo tengas que descargar el archivo de configuración.
    3. Ingresa el nombre del paquete de la app cuando se te solicite. Es importante que ingreses el nombre del paquete que usa tu app. Esto solo se puede configurar cuando agregas una app a tu proyecto de Firebase.
    4. Para finalizar el proceso, descargarás un archivo google-services.json. Puedes volver a descargar el archivo de configuración en cualquier momento.
    5. Si aún no lo haces, copia esto en la carpeta del módulo de tu proyecto, que generalmente es app/.
  2. Extrae el SDK que recibiste de tu contacto de EAP:
    unzip -d $SDK_DIR 3p_sdk.m2repo.zip
    
  3. Agrega el directorio en el que extrajiste el SDK y el complemento de Servicios de Google al archivo build.gradle del nivel de tu proyecto:
    buildscript {
      // ...
      dependencies {
          // ...
          classpath 'com.google.gms:google-services:3.2.0' // google-services plugin
      }
    }
    
    allprojects {
      repositories {
        // Add this
        maven {
          url "$SDK_DIR"
        }
        // This should already be here
        jcenter()
    
        ...
      }
    }
    
  4. Luego, incluye la dependencia para el Kit de AA y agrega la línea apply plugin al archivo build.gradle del nivel de tu app:

    dependencies {
      // ...
      compile 'com.google.firebase:firebase-core:12.8.0-SNAPSHOT'
      compile 'com.google.firebase:firebase-ml-vision:12.8.0-SNAPSHOT'
    }
    
    // ADD THIS AT THE BOTTOM OF THE FILE
    apply plugin: 'com.google.gms.google-services'
    

Configura el detector de etiquetas

Según la configuración predeterminada, el detector de Cloud usa la versión STABLE del modelo y muestra hasta 10 resultados. Si deseas modificar esta configuración, especifica los ajustes con un objeto FirebaseVisionCloudDetectorOptions.

Por ejemplo, para cambiar ambos elementos de la configuración predeterminada, compila un objeto FirebaseVisionCloudDetectorOptions como el siguiente:

FirebaseVisionCloudDetectorOptions options =
    new FirebaseVisionCloudDetectorOptions.Builder()
        .setModelType(FirebaseVisionCloudDetectorOptions.LATEST_MODEL)
        .setMaxResults(15)
        .build();

Para usar la configuración predeterminada, puedes usar FirebaseVisionCloudDetectorOptions.DEFAULT en el siguiente paso.

Ejecuta el detector de etiquetas

Para etiquetar objetos en una imagen, pasa la imagen como un objeto ByteBuffer al método FirebaseVisionCloudLabelDetector de detectInBuffer o como un objeto android.graphics.Bitmap al método detectInImage.

  1. Obtén una instancia de FirebaseVisionCloudLabelDetector:

    FirebaseVisionCloudLabelDetector detector = FirebaseVision.getInstance()
        .getVisionCloudLabelDetector(options);
    
  2. Crea un objeto FirebaseVisionImageMetadata que contenga los metadatos de la imagen.

    Si pasas la imagen como un ByteBuffer, debes especificar su altura, ancho, formato de codificación del color y orientación:

    FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder()
        .setWidth(1280)
        .setHeight(720)
        .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
        .setRotation(FirebaseVisionImageMetadata.ROTATION_0)
        .build();
    

    Si pasas la imagen como un Bitmap, solo debes especificar su orientación:

    FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder()
        .setRotation(FirebaseVisionImageMetadata.ROTATION_0)
        .build();
    
  3. Por último, pasa la imagen al método detectInBuffer o detectInImage:

    Task<SparseArray<FirebaseVisionCloudLabel>> result =
        detector.detectInImage(image, metadata)  // or detectInBuffer(buffer, metadata)
        .addOnSuccessListener(
            this,
            new OnSuccessListener<SparseArray<FirebaseVisionCloudLabel>>() {
              @Override
              public void onSuccess(SparseArray<FirebaseVisionCloudLabel> label) {
                // Task completed successfully
                // ...
              }
            })
        .addOnFailureListener(
            this,
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Task failed with an exception
                // ...
              }
            });
    

Obtén información sobre los objetos etiquetados

Si la operación de reconocimiento de etiquetas se ejecuta correctamente, se pasará un arreglo de objetos FirebaseVisionCloudLabel al agente de escucha que detecta el resultado correcto. Cada objeto FirebaseVisionCloudLabel representa un elemento que se etiquetó en la imagen. Para cada etiqueta, puedes obtener las coordenadas de sus límites en la imagen de entrada, el ID de entidad del Gráfico de conocimiento (si está disponible) y la puntuación de confianza de la coincidencia. Por ejemplo:

for(int i = 0; i < labels.size(); i++) {
  FirebaseVisionCloudLabel label = labels.valueAt(i);

  Rect bounds = label.getBoundingBox();
  String label = label.getLabel();
  String entityId = label.getEntityId();
  float confidence = label.getScore();
}