Guía de detección de idioma para Android

La tarea del detector de idioma de MediaPipe te permite identificar el idioma de un texto. En estas instrucciones, se muestra cómo usar el detector de idioma con las apps para Android. La muestra de código que se describe en estas instrucciones está disponible en GitHub.

Puedes ver la tarea en acción en la demostración. Para obtener más información sobre las capacidades, los modelos y las opciones de configuración de esta tarea, consulta la Descripción general.

Ejemplo de código

El código de ejemplo del detector de idiomas proporciona una implementación simple de esta tarea para tu referencia. Este código te ayudará a probar esta tarea y comenzar a compilar tu propia función de detección de idiomas. Puedes explorar el código de ejemplo del detector de idiomas en GitHub.

Descarga el código

En las siguientes instrucciones, se muestra cómo crear una copia local del código de ejemplo con la herramienta de línea de comandos de control de versión de git.

Para descargar el código de ejemplo, haz lo siguiente:

  1. Usa el siguiente comando para clonar el repositorio de Git:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. De manera opcional, configura tu instancia de Git para que use un proceso de confirmación de compra disperso, de modo que solo tengas los archivos para la app de ejemplo del detector de idioma:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/languagedetector/android
    

Para obtener instrucciones para configurar y ejecutar un ejemplo con Android Studio, consulta las instrucciones de configuración de código de ejemplo en la Guía de configuración para Android.

Componentes clave

Los siguientes archivos contienen el código fundamental para la app de ejemplo de clasificación de texto:

Configuración

En esta sección, se describen los pasos clave para configurar tu entorno de desarrollo y los proyectos de código específicamente para usar el detector de idiomas. Si quieres obtener información general sobre cómo configurar tu entorno de desarrollo para usar tareas de MediaPipe, incluidos los requisitos de versión de la plataforma, consulta la Guía de configuración para Android.

Dependencias

El detector de idioma usa las bibliotecas com.google.mediapipe:tasks-text. Agrega esta dependencia al archivo build.gradle de tu proyecto de desarrollo de apps para Android. Puedes importar las dependencias requeridas con el siguiente código:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

Modelo

La tarea del detector de lenguaje de MediaPipe requiere un modelo entrenado que sea compatible con esta tarea. Si quieres obtener más información sobre los modelos entrenados disponibles para el detector de idioma, consulta la descripción general de la tarea en la sección Modelos.

Selecciona y descarga el modelo. Luego, almacénalo en el directorio de tu proyecto:

<dev-project-root>/src/main/assets

Especifica la ruta del modelo dentro del parámetro ModelName.

Crea la tarea

Puedes usar una de las funciones createFrom...() para crear la tarea. La función createFromOptions() acepta opciones de configuración para el detector de idioma. También puedes inicializar la tarea con la función de fábrica createFromFile(). La función createFromFile() acepta una ruta de acceso relativa o absoluta al archivo del modelo entrenado. Para obtener más información sobre la configuración de tareas, consulta Opciones de configuración.

En el siguiente código, se muestra cómo crear y configurar esta tarea.

// For creating a language detector instance:
LanguageDetectorOptions options =
       LanguageDetectorOptions.builder()
       .setBaseOptions(
          BaseOptions.builder()
            .setModelAssetPath(modelPath)
            .build()
          )
       .build();
LanguageDetector languageDetector = LanguageDetector.createFromOptions(context, options);

Puedes ver un ejemplo de cómo crear una tarea en la función initDetector() de ejemplo de código LanguageDetectorHelper.

Opciones de configuración

Esta tarea incluye las siguientes opciones de configuración para apps para Android:

Nombre de la opción Descripción Rango de valores Valor predeterminado
maxResults Configura la cantidad máxima opcional de predicciones de idioma con puntuaciones más altas que se mostrarán. Si este valor es menor que cero, se muestran todos los resultados disponibles. Cualquier número positivo -1
scoreThreshold Establece el umbral de puntuación de predicción que anula el proporcionado en los metadatos del modelo (si corresponde). Se rechazarán los resultados inferiores a este valor. Cualquier número de punto flotante No establecida
categoryAllowlist Establece la lista opcional de códigos de idioma permitidos. Si no está vacío, se filtrarán las predicciones de idioma cuyo código de idioma no se encuentre en este conjunto. Esta opción es mutuamente excluyente con categoryDenylist, y el uso de ambas genera un error. Cualquier cadena No establecida
categoryDenylist Establece la lista opcional de códigos de idioma que no están permitidos. Si no está vacío, se filtrarán las predicciones de idioma cuyo código de idioma se encuentre en este conjunto. Esta opción es mutuamente excluyente con categoryAllowlist, y el uso de ambas da como resultado un error. Cualquier cadena No establecida

Preparar los datos

El detector de idioma funciona con datos de texto (String). Esta tarea controla el procesamiento previo de la entrada de datos, incluida la asignación de token y el procesamiento previo del tensor. Todo el procesamiento previo se controla dentro de la función detect(). No es necesario realizar un procesamiento previo adicional del texto de entrada con anterioridad.

String inputText = "Some input text for the language detector";

Ejecuta la tarea

El detector de idioma usa el método LanguageDetector.detect() para procesar el texto de entrada y predecir su idioma. Debes usar un subproceso de ejecución independiente para ejecutar la detección y evitar bloquear el subproceso de interfaz de usuario de Android con tu app.

En el siguiente código, se muestra cómo ejecutar el procesamiento con el modelo de tarea por medio de un subproceso de ejecución separado.

// Predict the language of the input text.
fun classify(text: String) {
    executor = ScheduledThreadPoolExecutor(1)

    executor.execute {
        val results = languageDetector.detect(text)
        listener.onResult(results)
    }
}

Puedes ver un ejemplo de cómo ejecutar una tarea en la función detect() de la clase LanguageDetectorHelper de ejemplo de código.

Cómo controlar y mostrar los resultados

El detector de lenguaje genera una LanguageDetectorResult que consta de una lista de predicciones de idioma junto con las probabilidades de esas predicciones. Las categorías de idioma se definen en el modelo. Consulta la descripción general de la tarea en la sección Modelos para obtener detalles sobre el modelo que estás usando.

A continuación, se muestra un ejemplo de los datos de salida de esta tarea:

LanguageDetectorResult:
  LanguagePrediction #0:
    language_code: "fr"
    probability: 0.999781

Este resultado se obtiene ejecutando el modelo en el texto de entrada: "Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent.".

Puedes ver un ejemplo de cómo mostrar los resultados en la clase de ejemplo de código ResultsAdapter y la clase interna ViewHolder.