מדריך לזיהוי שפה ב-Android

המשימה 'מזהה שפה של MediaPipe' מאפשרת לכם לזהות את השפה של קטע טקסט. האלה הוראות לשימוש בגלאי השפה באפליקציות ל-Android. הקוד דוגמה שמתוארת בהוראות האלה זמינה GitHub.

אפשר לראות את המשימה הזו בפעולה: demo. מידע נוסף על היכולות, המודלים ואפשרויות ההגדרה במשימה הזאת, ראו סקירה כללית.

קוד לדוגמה

הקוד לדוגמה של 'מזהה השפה' מספק הטמעה פשוטה לעיונך. הקוד הזה יעזור לך לבדוק את המשימה הזו ולהתחיל בעבודה לצורך פיתוח תכונת זיהוי שפה משלכם. אפשר לעיין קוד לדוגמה של מזהה שפה ב-GitHub.

להורדת הקוד

בהוראות הבאות מוסבר איך ליצור עותק מקומי של הדוגמה באמצעות כלי שורת הפקודה git לניהול גרסאות.

כדי להוריד את הקוד לדוגמה:

  1. משכפלים את מאגר ה-Git באמצעות הפקודה הבאה:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. אפשר גם להגדיר את ה-Git למכונת ה-Git לשימוש בקופה מועטה, קיימים רק הקבצים של האפליקציה לדוגמה של 'מזהה שפה':
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/languagedetector/android
    

לקבלת הוראות להגדרה ולהרצה של דוגמה ב-Android Studio, ההוראות להגדרת קוד לדוגמה מדריך ההגדרה ל-Android.

רכיבים מרכזיים

הקבצים הבאים מכילים את הקוד החיוני לסיווג הטקסט אפליקציה לדוגמה:

  • LanguageDetectorHelper.kt – – הפעלת מזהה השפה וטיפול בבחירת המודל.
  • ResultsAdapter.kt – טיפול בתוצאות הזיהוי ועיצוב שלהן.
  • MainActivity.kt - מטמיע את האפליקציה, כולל קריאה ל-LanguageDetectorHelper ול ResultsAdapter

הגדרה

בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח פרויקטים של קוד ייעודי לשימוש ב-Language Detect. למידע כללי על להגדיר את סביבת הפיתוח לשימוש במשימות של MediaPipe, כולל הדרישות לגרסת הפלטפורמה. מדריך ההגדרה ל-Android.

יחסי תלות

מזהה השפה משתמש בספריות com.google.mediapipe:tasks-text. הוספת הפריט שתלויות בקובץ build.gradle של פרויקט פיתוח האפליקציה ל-Android. אפשר לייבא את יחסי התלות הנדרשים באמצעות הקוד הבא:

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

דגם

למשימה 'מזהה שפה של MediaPipe' נדרש מודל מאומן שתואם למשימה הזו. לקבלת מידע נוסף על מודלים זמינים מאומנים של 'מזהה שפה', אפשר לעיין במאמר בסקירה הכללית על המשימה בקטע 'מודלים'.

בוחרים את המודל, מורידים אותו ושומרים אותו בספריית הפרויקט:

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

צריך לציין את הנתיב של המודל בתוך הפרמטר ModelName.

יצירת המשימה

אפשר להשתמש באחת מהפונקציות של createFrom...() כדי ליצור את המשימה. הפונקציה createFromOptions() מקבלת אפשרויות הגדרה של השפה במכשיר נייד. אפשר להפעיל את המשימה גם דרך היצרן של createFromFile() מותאמת אישית. הפונקציה createFromFile() מקבלת נתיב יחסי או מוחלט אל את קובץ המודל שעבר אימון. מידע נוסף על הגדרת משימות זמין אפשרויות להגדרות.

הקוד הבא הוא דוגמה ליצירה ולהגדרה של המשימה.

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

אפשר לראות דוגמה ליצירת משימה בדוגמת הקוד. LanguageDetectorHelper מחלקה initDetector().

אפשרויות תצורה

המשימה הזו כוללת את אפשרויות ההגדרה הבאות לאפליקציות ל-Android:

שם האפשרות תיאור טווח ערכים ערך ברירת מחדל
maxResults מגדיר את המספר המקסימלי האופציונלי של חיזויים בשפה בעלת הדירוג הגבוה ביותר ל- החזרה. אם הערך הזה קטן מאפס, יוחזרו כל התוצאות הזמינות. מספרים חיוביים כלשהם -1
scoreThreshold הגדרת סף הציון של התחזית שמבטל את הסף שצוין ב את המטא-נתונים של המודל (אם יש). תוצאות מתחת לערך הזה נדחות. כל מספר ממשי (float) לא מוגדר
categoryAllowlist מגדיר את הרשימה האופציונלית של קודים של שפות מורשות. אם השדה לא ריק, הצעות שפה שקוד השפה שלהן לא כלול בקבוצה הזו יהיו מסונן. האפשרות הזו בלעדית לבעלי חשבונות אחרים categoryDenylist והשימוש בשתיהן יביאו לשגיאה. כל מחרוזת לא מוגדר
categoryDenylist מגדיר את הרשימה האופציונלית של קודי שפות אסורים. אם המיקום לא ריק, יסוננו חיזויים של שפות שקוד השפה שלהן נמצא בקבוצה הזו החוצה. האפשרות הזו קיימת רק בחשבונות של categoryAllowlist וגם השימוש בשתי התוצאות גורם לשגיאה. כל מחרוזת לא מוגדר

הכנת נתונים

גלאי השפה פועל עם נתוני טקסט (String). המשימה מטפלת בקלט הנתונים מראש, כולל יצירת אסימונים ועיבוד מראש של tensor. הכול העיבוד מראש מטופל בתוך הפונקציה detect(). אין צורך לפני עיבוד נוסף של טקסט הקלט.

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

הרצת המשימה

מזהה השפה משתמש בשיטה LanguageDetector.detect() לעיבוד קלט של הטקסט ולחזות את שפת הטקסט. צריך להשתמש בהפעלה נפרדת thread לביצוע הזיהוי כדי להימנע מחסימת משתמש Android תהליכונים (thread) בממשק של האפליקציה.

הקוד הבא מדגים איך מבצעים את העיבוד באמצעות המשימה באמצעות שרשור ביצוע נפרד.

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

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

בדוגמה עם הקוד אפשר לראות דוגמה להרצת משימה. LanguageDetectorHelper מחלקה detect().

טיפול בתוצאות והצגתן

פלט השפה של 'מזהה השפה' הוא LanguageDetectorResult שמכיל רשימה של חיזויים בשפה מסוימת ביחד עם ההסתברויות לחיזויים האלה. קטגוריות השפה מוגדרות במודל. ראו את הסקירה הכללית של המשימה בקטע 'מודלים' מוצגים פרטים על המודל שבו אתם משתמשים.

בדוגמה הבאה אפשר לראות את נתוני הפלט מהמשימה:

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

התוצאה הזו התקבלה על ידי הרצת המודל על טקסט הקלט: "Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent."

ניתן לראות דוגמה להצגת תוצאות בדוגמת הקוד ResultsAdapter כיתה ו-ViewHolder כיתה פנימית.