זיהוי, זיהוי שפה ותרגום טקסט באמצעות ML Kit ו- CameraX: Android

‏ML Kit הוא ערכת SDK לנייד שמאפשרת לכם להשתמש במומחיות של Google בתחום למידת המכונה ב-Android ובאפליקציות ל-Android, בחבילה חזקה וקלה לשימוש. לא משנה אם זו הפעם הראשונה שאתם משתמשים בלמידת מכונה או שאתם כבר מומחים בתחום, תוכלו להטמיע בקלות את הפונקציונליות הנדרשת באמצעות כמה שורות קוד בלבד. כדי להתחיל, אין צורך בידע מעמיק ברשתות נוירונליות או באופטימיזציה של מודלים.

איך זה עובד

בעזרת ML Kit קל ליישם טכניקות של למידת מכונה באפליקציות. ה-SDK של ML Kit כולל את טכנולוגיות ה-ML של Google, כמו Mobile Vision ו-TensorFlow Lite. בין שאתם צריכים את העוצמה של היכולות בזמן אמת של המודלים במכשיר של Mobile Vision, ובין שאתם צריכים את הגמישות של מודלים מותאמים אישית של TensorFlow Lite, ML Kit מאפשר לכם לעשות זאת באמצעות כמה שורות קוד בלבד.

בקודלאב הזה נסביר איך להוסיף לאפליקציית Android הקיימת שלכם זיהוי טקסט, זיהוי שפה ותרגום מהפיד של המצלמה בזמן אמת. בנוסף, נציג שיטות מומלצות לשימוש ב-CameraX עם ממשקי ה-API של ML Kit.

מה תפַתחו

בקודלאב הזה תלמדו ליצור אפליקציה ל-Android באמצעות ML Kit. האפליקציה תשתמש ב-ML Kit Text Recognition on-device API כדי לזהות טקסט מהפיד של המצלמה בזמן אמת. המערכת תשתמש ב-ML Kit Language Identification API כדי לזהות את השפה של הטקסט שזוהה. לבסוף, האפליקציה תתרגם את הטקסט הזה לכל שפה שנבחרה מתוך 59 אפשרויות, באמצעות ML Kit Translation API.

בסוף, אמורה להופיע תמונה דומה לזו שבהמשך.

מה תלמדו

  • איך משתמשים ב-ML Kit SDK כדי להוסיף בקלות יכולות של למידת מכונה לכל אפליקציה ל-Android.
  • זיהוי טקסט, זיהוי שפה וממשקי API לתרגום ב-ML Kit והיכולות שלהם.
  • איך משתמשים בספריית CameraX עם ממשקי ה-API של ML Kit.

מה צריך להכין

  • גרסה עדכנית של Android Studio (גרסה 4.0 ואילך)
  • מכשיר Android פיזי
  • הקוד לדוגמה
  • ידע בסיסי בפיתוח Android ב-Kotlin

סדנת הקוד הזו מתמקדת ב-ML Kit. מושגים וקטעי קוד לא רלוונטיים כבר יסופקו ויוטמעו בשבילכם.

הורדת הקוד

כדי להוריד את כל הקוד של Codelab הזה, לוחצים על הקישור הבא:

הורדת קוד המקור

פותחים את קובץ ה-ZIP שהורדתם. הפקודה הזו תבצע ביטול אריזה של תיקיית root (mlkit-android) עם כל המשאבים הנדרשים. בסדנת הקוד הזו, תצטרכו רק את המשאבים בספריית המשנה translate.

ספריית המשנה translate במאגר mlkit-android מכילה את הספרייה הבאה:

  • android_studio_folder.pngstarter – קוד לתחילת הדרך שעליו תבנו ב-Codelab הזה.

בקובץ app/build.gradle, מוודאים שכל יחסי התלות הנדרשים של ML Kit ו-CameraX כלולים:

// CameraX dependencies
def camerax_version = "1.0.0-beta05"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:$camerax_version"
implementation "androidx.camera:camera-view:1.0.0-alpha12"

// ML Kit dependencies
implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
implementation 'com.google.mlkit:language-id:16.0.0'
implementation 'com.google.mlkit:translate:16.0.0'

אחרי שמייבאים את הפרויקט ל-Android Studio ובודקים את יחסי התלות של ML Kit, אפשר להריץ את האפליקציה בפעם הראשונה. מפעילים את המהדמין של Android Studio ולוחצים על הפעלה (execute.png) בסרגל הכלים של Android Studio.

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

בשלב הזה נוסיף לאפליקציה פונקציונליות לזיהוי טקסט ממצלמת הווידאו.

יצירת מכונה של הכלי לזיהוי טקסט ב-ML Kit

מוסיפים את השדה הבא לחלק העליון של TextAnalyzer.kt. כך מקבלים את ה-handle של מזהה הטקסט לשימוש בשלבים הבאים.

TextAnalyzer.kt

private val detector = TextRecognition.getClient()

הפעלת זיהוי טקסט במכשיר בתמונה של Vision ( נוצרה באמצעות מאגר מהמצלמה)

ספריית CameraX מספקת פלט של תמונות מהמצלמה, שמוכנות לניתוח תמונות. מחליפים את השיטה recognizeTextOnDevice() בכיתה TextAnalyzer כדי להשתמש בזיהוי טקסט של ML Kit בכל פריים של תמונה.

TextAnalyzer.kt

private fun recognizeTextOnDevice(
   image: InputImage
): Task<Text> {
   // Pass image to an ML Kit Vision API
   return detector.process(image)
       .addOnSuccessListener { visionText ->
           // Task completed successfully
           result.value = visionText.text
       }
       .addOnFailureListener { exception ->
           // Task failed with an exception
           Log.e(TAG, "Text recognition error", exception)
           val message = getErrorMessage(exception)
           message?.let {
               Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
           }
       }
}

בשורה הבאה מוצגת הקריאה לשיטה שלמעלה כדי להתחיל לבצע זיהוי טקסט. מוסיפים את השורה הבאה בסוף השיטה analyze(). חשוב לזכור שצריך לקרוא לפונקציה imageProxy.close אחרי שהניתוח של התמונה מסתיים, אחרת פיד המצלמה בשידור חי לא יוכל לעבד תמונות נוספות לצורך ניתוח.

TextAnalyzer.kt

recognizeTextOnDevice(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
   imageProxy.close()
}

הפעלת האפליקציה במכשיר

עכשיו לוחצים על הפעלה (execute.png) בסרגל הכלים של Android Studio. אחרי שהאפליקציה תיטען, היא אמורה להתחיל לזהות טקסט מהמצלמה בזמן אמת. מכוונים את המצלמה לטקסט כלשהו כדי לאשר.

יצירת מופע של מזהה השפה ב-ML Kit

מוסיפים את השדה הבא לקובץ MainViewModel.kt. כך מקבלים את ה-handle של מזהה השפה לשימוש בשלב הבא.

MainViewModel.kt

private val languageIdentification = LanguageIdentification.getClient()

הרצת זיהוי שפה במכשיר על הטקסט שזוהה

משתמשים במזהה השפה של ML Kit כדי לקבל את השפה של הטקסט שזוהה בתמונה.

מחליפים את TODO בהגדרת השדה sourceLang ב-MainViewModel.kt בקוד הבא. קטע הקוד הזה קורא לשיטה לזיהוי השפה ומקצה את התוצאה אם היא לא מוגדרת (und).

MainViewModel.kt

languageIdentification.identifyLanguage(text)
   .addOnSuccessListener {
       if (it != "und")
           result.value = Language(it)
   }

הפעלת האפליקציה במכשיר

עכשיו לוחצים על הפעלה (execute.png) בסרגל הכלים של Android Studio. אחרי שהאפליקציה נטענת, היא אמורה להתחיל לזהות טקסט מהמצלמה ולזהות את שפת הטקסט בזמן אמת. מכוונים את המצלמה לטקסט כלשהו כדי לאשר.

מחליפים את הפונקציה translate() ב-MainViewModel.kt בקוד הבא. הפונקציה הזו מקבלת את הערך של שפת המקור, את הערך של שפת היעד ואת טקסט המקור ומבצעת את התרגום. שימו לב: אם מודל שפת היעד שנבחר עדיין לא הורד למכשיר, אנחנו קוראים ל-downloadModelIfNeeded() כדי להוריד אותו ואז ממשיכים בתרגום.

MainViewModel.kt

private fun translate(): Task<String> {
   val text = sourceText.value
   val source = sourceLang.value
   val target = targetLang.value
   if (modelDownloading.value != false || translating.value != false) {
       return Tasks.forCanceled()
   }
   if (source == null || target == null || text == null || text.isEmpty()) {
       return Tasks.forResult("")
   }
   val sourceLangCode = TranslateLanguage.fromLanguageTag(source.code)
   val targetLangCode = TranslateLanguage.fromLanguageTag(target.code)
   if (sourceLangCode == null || targetLangCode == null) {
       return Tasks.forCanceled()
   }
   val options = TranslatorOptions.Builder()
       .setSourceLanguage(sourceLangCode)
       .setTargetLanguage(targetLangCode)
       .build()
   val translator = translators[options]
   modelDownloading.setValue(true)

   // Register watchdog to unblock long running downloads
   Handler().postDelayed({ modelDownloading.setValue(false) }, 15000)
   modelDownloadTask = translator.downloadModelIfNeeded().addOnCompleteListener {
       modelDownloading.setValue(false)
   }
   translating.value = true
   return modelDownloadTask.onSuccessTask {
       translator.translate(text)
   }.addOnCompleteListener {
       translating.value = false
   }
}

הרצת האפליקציה בסימולטור

עכשיו לוחצים על הפעלה (execute.png) בסרגל הכלים של Android Studio. אחרי שהאפליקציה תיטען, היא אמורה להיראות כמו בתמונה הזו, עם תוצאות זיהוי הטקסט והשפה והטקסט המתורגם לשפה שנבחרה. אפשר לבחור מתוך 59 השפות הזמינות.

מזל טוב, הוספת לאפליקציה שלך זיהוי טקסט, זיהוי שפה ותרגום במכשיר באמצעות ML Kit. עכשיו אפשר לזהות טקסט ואת השפה שלו מהפיד של מצלמת הווידאו בשידור חי, ולתרגם את הטקסט הזה לשפה שבוחרים – והכול בזמן אמת.

מה עסקנו בו

  • איך מוסיפים את ML Kit לאפליקציה ל-Android
  • איך משתמשים בזיהוי טקסט במכשיר ב-ML Kit כדי לזהות טקסט בתמונות
  • איך משתמשים בזיהוי שפה במכשיר ב-ML Kit כדי לזהות את שפת הטקסט
  • איך משתמשים בתרגום במכשיר ב-ML Kit כדי לתרגם טקסט באופן דינמי ל-59 שפות
  • איך משתמשים ב-CameraX בשילוב עם ממשקי ה-API של ML Kit

השלבים הבאים

  • איך משתמשים ב-ML Kit וב-CameraX באפליקציה ל-Android?

למידע נוסף