1. מבוא
ML Kit הוא ערכת SDK לנייד, שמביאה את המומחיות של Google בלמידת מכונה לאפליקציות ל-Android ול-Android בחבילה עוצמתית אבל קלה לשימוש. גם אם זו הפעם הראשונה שאתם משתמשים בלמידת מכונה וגם אם אתם כבר מנוסים בלמידת מכונה, תוכלו להטמיע בקלות את הפונקציונליות הדרושה בכמה שורות קוד בלבד. כדי להתחיל, אין צורך בידע מעמיק ברשתות נוירונים או באופטימיזציה של מודלים.
איך זה עובד
בעזרת ML Kit קל ליישם טכניקות של למידת מכונה באפליקציות. ה-SDK של ML Kit כולל את טכנולוגיות ה-ML של Google, כמו Mobile Vision ו-TensorFlow Lite. בין אם אתם צריכים את העוצמה של יכולות בזמן אמת של הדגמים במכשיר של Mobile Vision, או את הגמישות של דגמי TensorFlow Lite בהתאמה אישית, פלטפורמת ML Kit מאפשרת לכם להשתמש בכמה שורות קוד בלבד.
ה-Codelab הזה ידריך אותך בשלבים פשוטים להוספה של זיהוי טקסט, זיהוי שפה ותרגום מפיד של מצלמה בזמן אמת לאפליקציה הקיימת שלך ל-Android. ב-Codelab הזה גם ידגיש שיטות מומלצות לשימוש ב- 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. מושגים וקטעי קוד לא רלוונטיים כבר יסופקו ויוטמעו בשבילכם.
2. תהליך ההגדרה
הורדת הקוד
כדי להוריד את כל הקוד של סדנת הקוד הזו, לוחצים על הקישור הבא:
פותחים את קובץ ה-ZIP שהורדתם. הפעולה הזו תגרום לפתיחת תיקיית בסיס (mlkit-android
) עם כל המשאבים הדרושים. בסדנת הקוד הזו, תצטרכו רק את המשאבים שבספריית המשנה translate
.
ספריית המשנה translate
במאגר mlkit-android
מכילה את הספרייה הבאה:
starter – קוד התחלה שעליו בונים ב-Codelab הזה.
3. ייבוא הפרויקט ואימות יחסי התלות של ML Kit ו-CameraX
מייבאים את פרויקט ההתחלה ל-Android Studio. בקובץ 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'
4. הפעלת האפליקציה למתחילים
עכשיו, אחרי שייבאתם את הפרויקט אל Android Studio ובדקתם את יחסי התלות של ML Kit, אתם מוכנים להפעיל את האפליקציה בפעם הראשונה! לוחצים על הפעלה ( ) בסרגל הכלים של Android Studio.
האפליקציה אמורה להיפתח במכשיר, ותוכלו לכוון את המצלמה לטקסטים שונים כדי לראות פיד בשידור חי. עם זאת, פונקציונליות זיהוי הטקסט עדיין לא הופעלה.
5. הוספת זיהוי טקסט
בשלב הזה נוסיף לאפליקציה פונקציונליות לזיהוי טקסט ממצלמת הווידאו.
יצירת מכונה של הכלי לזיהוי טקסט ב-ML Kit
מחליפים את TODO
בחלק העליון של TextAnalyzer.kt
כדי ליצור מופע של TextRecognition
. כך מקבלים את ה-handle של מזהה הטקסט לשימוש בשלבים הבאים. אנחנו גם צריכים להוסיף את הגלאי כצופה במחזור החיים כדי לסגור אותו כראוי כשאין בו יותר צורך.
TextAnalyzer.kt
private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
init {
lifecycle.addObserver(detector)
}
הפעלת זיהוי טקסט בתמונה קלט (נוצרה באמצעות מאגר מהמצלמה)
ספריית CameraX מספקת שידור של תמונות מהמצלמה שמוכנים לניתוח תמונה. מחליפים את השיטה recognizeText()
בכיתה TextAnalyzer כדי להשתמש בזיהוי טקסט של ML Kit בכל פריים של תמונה.
TextAnalyzer.kt
private fun recognizeText(
image: InputImage
): Task<Text> {
// Pass image to an ML Kit Vision API
return detector.process(image)
.addOnSuccessListener { text ->
// Task completed successfully
result.value = text.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
recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
הפעלת האפליקציה במכשיר
עכשיו לוחצים על הרצה ( ) בסרגל הכלים של Android Studio. אחרי שהאפליקציה תיטען, היא אמורה להתחיל לזהות טקסט מהמצלמה בזמן אמת. מכוונים את המצלמה לטקסט כלשהו כדי לאשר. אם האפליקציה לא מזהה טקסט, נסו 'לאפס' את הזיהוי על ידי הצבת המצלמה על שטח ריק לפני שמכוונים אותה לטקסט.
6. הוספת זיהוי שפה
יצירת מופע של מזהה השפה של ML Kit
MainViewModel.kt
נמצא בתיקייה הראשית. עוברים לקובץ ומוסיפים את השדה הבא ל-MainViewModel.kt
. כך מקבלים כינוי למזהה השפה שבו צריך להשתמש בשלב הבא.
MainViewModel.kt
private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
בנוסף, חשוב לוודא שהלקוחות מושבתים כראוי כשאין בהם יותר צורך. כדי לעשות זאת, משנים את השיטה onCleared()
של ViewModel
.
MainViewModel.kt
override fun onCleared() {
languageIdentifier.close()
translators.evictAll()
}
מריצים זיהוי שפה במכשיר על הטקסט שזוהה
משתמשים במזהה השפה של ML Kit כדי לקבל את השפה של הטקסט שזוהה בתמונה.
מחליפים את TODO
בהגדרת השדה sourceLang
ב-MainViewModel.kt
בקוד הבא. קטע הקוד הזה קורא לשיטה לזיהוי השפה ומקצה את התוצאה אם היא לא מוגדרת (und). אם השפה לא מוגדרת, המשמעות היא ש-API לא הצליח לזהות את השפה על סמך רשימת השפות הנתמכות.
MainViewModel.kt
val sourceLang = Transformations.switchMap(sourceText) { text ->
val result = MutableLiveData<Language>()
languageIdentifier.identifyLanguage(text)
.addOnSuccessListener { languageCode ->
if (languageCode != "und")
result.value = Language(languageCode)
}
result
}
הפעלת האפליקציה במכשיר
עכשיו לוחצים על הפעלה ( ) בסרגל הכלים של Android Studio. אחרי שהאפליקציה נטענת, היא אמורה להתחיל לזהות טקסט מהמצלמה ולזהות את שפת הטקסט בזמן אמת. מכוונים את המצלמה לטקסט כלשהו כדי לאשר.
7. הוספת תרגום
מחליפים את הפונקציה 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
}
}
הפעלת האפליקציה בסימולטור
עכשיו לוחצים על הפעלה ( ) בסרגל הכלים של Android Studio. אחרי שהאפליקציה תיטען, היא אמורה להיראות כמו התמונה הזו, שבה מוצגים זיהוי הטקסט ותוצאות זיהוי השפה, וגם הטקסט המתורגם לשפה שנבחרה. ניתן לבחור כל אחת מ-59 השפות הזמינות.
8. מעולה!
מזל טוב, הוספת לאפליקציה שלך זיהוי טקסט, זיהוי שפה ותרגום במכשיר באמצעות ML Kit. עכשיו אפשר לזהות את הטקסט והשפה שלו מפיד המצלמה בשידור חי, ולתרגם את הטקסט לשפה לבחירתכם בזמן אמת.
מה עסקנו בו
- איך מוסיפים את ML Kit לאפליקציה ל-Android
- איך משתמשים בזיהוי טקסט במכשיר ב-ML Kit כדי לזהות טקסט בתמונות
- איך משתמשים בזיהוי שפה במכשיר ב-ML Kit כדי לזהות את שפת הטקסט
- איך משתמשים בתרגום במכשיר ב-ML Kit כדי לתרגם טקסט באופן דינמי ל-59 שפות
- איך להשתמש ב- CameraX בשילוב עם ממשקי API של ML Kit
השלבים הבאים
- עכשיו אפשר להשתמש ב-ML Kit וב- CameraX באפליקציה משלכם ל-Android!