Guía de detección de idioma para Android

La tarea MediaPipe Language Detector te permite identificar el idioma de una porción del texto. Estos En las instrucciones, se muestra cómo usar el detector de idioma con apps para Android. El código descrita en estas instrucciones está disponible en GitHub:

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

Ejemplo de código

El código de ejemplo de Language Detector ofrece una implementación simple de lo siguiente: a modo de referencia. Este código te ayudará a probar esta tarea y comenzar con crear tu propia función de detección de idioma. Puedes explorar Código de ejemplo del detector de idioma en GitHub.

Descarga el código

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

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

  1. Clona el repositorio de Git con el siguiente comando:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. De forma opcional, configura tu instancia de Git para que use el resultado escaso. Solo tienes los archivos de la app de ejemplo del detector de idioma:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/languagedetector/android
    

Si deseas 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 crucial para la clasificación de texto App de ejemplo:

Configuración

En esta sección, se describen los pasos clave para configurar tu entorno de desarrollo y proyectos de código específicamente para el detector de idioma. Para obtener información general configurar tu entorno de desarrollo para usar tareas de MediaPipe, como de la 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. Agregar dependencia al archivo build.gradle de tu proyecto de desarrollo de apps para Android. Puedes importar las dependencias necesarias con el siguiente código:

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

Modelo

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

Selecciona y descarga el modelo; luego, guárdalo 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. El La función createFromOptions() acepta las opciones de configuración para el idioma de detección de intrusiones. También puedes inicializar la tarea con la configuración de fábrica de createFromFile(). . La función createFromFile() acepta una ruta de acceso relativa o absoluta a el archivo de 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 el código de ejemplo. LanguageDetectorHelper función de clase initDetector().

Opciones de configuración

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

Nombre de la opción Descripción Rango de valores Valor predeterminado
maxResults Establece el número máximo opcional de predicciones lingüísticas con la puntuación más alta para el resultado. 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 que se proporciona en los metadatos del modelo (si los hay). Se rechazarán los resultados por debajo de este valor. Cualquier número de punto flotante Sin establecer
categoryAllowlist Establece la lista opcional de códigos de idioma permitidos. Si no está vacío, las predicciones de idioma cuyo código de idioma no se encuentre en este conjunto serán filtrado. Esta opción es mutuamente excluyente con categoryDenylist, y usar ambos generará un error. Cualquier cadena Sin establecer
categoryDenylist Establece la lista opcional de códigos de idioma que no están permitidos. Si Se filtrarán las predicciones de idioma no vacías cuyo código de idioma se encuentra en este conjunto. y sale de ella. Esta opción es mutuamente excluyente con categoryAllowlist y usar ambos dará como resultado un error. Cualquier cadena Sin establecer

Preparar los datos

El detector de idioma funciona con datos de texto (String). La tarea maneja la entrada de datos el procesamiento previo, 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 se necesita el procesamiento previo adicional del texto de entrada de antemano.

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

Ejecuta la tarea

El detector de idioma usa el método LanguageDetector.detect() para procesar la entrada del texto y predecir su idioma. Deberías usar una ejecución separada subproceso para ejecutar la detección y evitar bloquear al usuario de Android de la interfaz de usuario con tu app.

En el siguiente código, se muestra cómo ejecutar el procesamiento con la tarea con un subproceso de ejecución independiente.

// 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 el código de ejemplo. LanguageDetectorHelper función de clase detect().

Cómo controlar y mostrar resultados

El detector de idioma genera un LanguageDetectorResult que consta de una lista de lingüísticas junto con las probabilidades de esas predicciones. El las categorías de lenguaje se definen en el modelo, consulta la descripción general de la tarea En la sección Modelos, encontrarás 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

Se obtuvo este resultado 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 consultar un ejemplo de cómo mostrar los resultados en el código de ejemplo. ResultsAdapter y la clase interna ViewHolder.