זיהוי טקסט ותווי פנים באמצעות ערכת למידת מכונה: Android

1. מבוא

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

אם נתקלתם בבעיות (באגים בקוד, שגיאות דקדוק, ניסוח לא ברור וכו') במהלך העבודה ב-Codelab, אפשר לדווח על הבעיה דרך הקישור דיווח על טעות בפינה הימנית התחתונה של ה-Codelab.

איך זה עובד

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

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

מה תפַתחו

בקודלאב הזה תלמדו ליצור אפליקציה ל-Android באמצעות ML Kit. האפליקציה שלכם:

  • שימוש ב-ML Kit Text Recognition API לזיהוי טקסט בתמונות
  • שימוש ב-ML Kit Face Contour API כדי לזהות תכונות פנים בתמונות

מה תלמדו

  • איך משתמשים ב-ML Kit SDK כדי להוסיף בקלות יכולות מתקדמות של למידת מכונה, כמו זיהוי טקסט וזיהוי תכונות פנים

מה צריך להכין

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

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

2. בתהליך ההגדרה

להורדת הקוד

אפשר ללחוץ על הקישור הבא כדי להוריד את כל הקוד של סדנת הקוד הזו:

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

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

  • android_studio_folder.pngstarter – קוד לתחילת הדרך שעליו תבנו ב-Codelab הזה.
  • android_studio_folder.pngסופי – קוד שהושלם לאפליקציה לדוגמה הסופית.

3. בדיקת יחסי התלות של ML Kit

אימות יחסי התלות של ML Kit

השורות הבאות אמורות להתווסף כבר לסוף הקובץ build.gradle בספרייה app של הפרויקט (צריך לבדוק זאת):

build.gradle

dependencies {
  // Face features
  implementation 'com.google.mlkit:face-detection:16.0.0'

  // Text features
  implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
}

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

4. הפעלת האפליקציה לתחילת הפעולה

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

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

5. הוספת זיהוי טקסט במכשיר

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

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

מוסיפים את הטקסט הבא לשיטה runTextRecognition של הכיתה MainActivity:

MainActivity.java

private void runTextRecognition() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   TextRecognizer recognizer = TextRecognition.getClient();
   mTextButton.setEnabled(false);
   recognizer.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<Text>() {
                       @Override
                       public void onSuccess(Text texts) {
                           mTextButton.setEnabled(true);
                           processTextRecognitionResult(texts);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mTextButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });
}

הקוד שלמעלה מגדיר את מזהה זיהוי הטקסט וקורא לפונקציה processTextRecognitionResult עם התגובה.

עיבוד התגובה לזיהוי הטקסט

כדי לנתח את התוצאות ולהציג אותן באפליקציה, צריך להוסיף את הקוד הבא אל processTextRecognitionResult בכיתה MainActivity.

MainActivity.java

private void processTextRecognitionResult(Text texts) {
   List<Text.TextBlock> blocks = texts.getTextBlocks();
   if (blocks.size() == 0) {
       showToast("No text found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < blocks.size(); i++) {
       List<Text.Line> lines = blocks.get(i).getLines();
       for (int j = 0; j < lines.size(); j++) {
           List<Text.Element> elements = lines.get(j).getElements();
           for (int k = 0; k < elements.size(); k++) {
               Graphic textGraphic = new TextGraphic(mGraphicOverlay, elements.get(k));
               mGraphicOverlay.add(textGraphic);

           }
       }
   }
}

הרצת האפליקציה במה emultor

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

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

10b12d0e8822eaf5.png

תמונה: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0

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

6. הוספת זיהוי קווי מתאר של פנים במכשיר

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

הגדרה והפעלה של זיהוי קווי מתאר של הפנים במכשיר

מוסיפים את הטקסט הבא לשיטה runFaceContourDetection של הכיתה MainActivity:

MainActivity.java

private void runFaceContourDetection() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   FaceDetectorOptions options =
           new FaceDetectorOptions.Builder()
                   .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
                   .setContourMode(FaceDetectorOptions.CONTOUR_MODE_ALL)
                   .build();

   mFaceButton.setEnabled(false);
   FaceDetector detector = FaceDetection.getClient(options);
   detector.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<List<Face>>() {
                       @Override
                       public void onSuccess(List<Face> faces) {
                           mFaceButton.setEnabled(true);
                           processFaceContourDetectionResult(faces);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mFaceButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });

}

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

עיבוד התגובה של זיהוי קווי המתאר של הפנים

כדי לנתח את התוצאות ולהציג אותן באפליקציה, מוסיפים את הקוד הבא ל-processFaceContourDetectionResult בכיתה MainActivity.

MainActivity.java

private void processFaceContourDetectionResult(List<Face> faces) {
   // Task completed successfully
   if (faces.size() == 0) {
       showToast("No face found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < faces.size(); ++i) {
       Face face = faces.get(i);
       FaceContourGraphic faceGraphic = new FaceContourGraphic(mGraphicOverlay);
       mGraphicOverlay.add(faceGraphic);
       faceGraphic.updateFace(face);
   }
}

הרצת האפליקציה במה emultor

עכשיו לוחצים על הפעלה ( execute.png) בסרגל הכלים של Android Studio. אחרי שהאפליקציה נטענת, מוודאים שהאפשרות Test Image 2 (Face) מסומנת בשדה הנפתח ולוחצים על הלחצן FIND FACE CONTOUR.

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

f9ff2fcbf63f0f3b.png

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

7. מעולה!

השתמשתם ב-ML Kit כדי להוסיף בקלות לאפליקציה שלכם יכולות מתקדמות של למידת מכונה.

מה עסקנו בו

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

השלבים הבאים

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

מידע נוסף