סורק מסמכים עם ML Kit ב-Android

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

Feature פרטים
שם ה-SDK play-services-mlkit-document-scanner
הטמעה הורדה דינמית של המודלים, לוגיקת הסריקה ותהליך ממשק המשתמש מתבצעת על ידי Google Play Services.
ההשפעה של גודל האפליקציה הגדלה של כ-300KB בגודל ההורדה.
זמן האתחול יכול להיות שהמשתמשים יצטרכו להמתין להורדה של המודלים, הלוגיקה ותהליך הממשק המשתמש לפני השימוש הראשון.

רוצה לנסות?

משחקים עם אפליקציה לדוגמה כדי לראות שימוש לדוגמה ב-API הזה.

לפני שמתחילים

  1. בקובץ build.gradle ברמת הפרויקט, חשוב לכלול את מאגר Maven של Google גם בקטע buildscript וגם בקטע allprojects.

  2. מוסיפים את התלות בספריית סורק המסמכים של ML Kit לקובץ ה-Gradle ברמת האפליקציה של המודול, שבדרך כלל הוא app/build.gradle:

dependencies {
   // …
   implementation 'com.google.android.gms:play-services-mlkit-document-scanner:16.0.0-beta1'
}

הגדרת סורק המסמכים

תהליך העבודה של המשתמש בסורק המסמכים (שכולל מסך ייעודי של עינית) ומסך התצוגה המקדימה) מסופק על ידי ה-SDK. העינית ומסך התצוגה המקדימה תומכים בפקדים הבאים שניתן להתאים אישית:

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

אתם יכולים לאחזר קובצי PDF ו-JPEG של המסמכים שסרקתם.

יוצרים מופע של GmsDocumentScannerOptions כדי להגדיר את אפשרויות הסורק:

Kotlin

val options = GmsDocumentScannerOptions.Builder()
    .setGalleryImportAllowed(false)
    .setPageLimit(2)
    .setResultFormats(RESULT_FORMAT_JPEG, RESULT_FORMAT_PDF)
    .setScannerMode(SCANNER_MODE_FULL)
    .build()

Java

GmsDocumentScannerOptions options = new GmsDocumentScannerOptions.Builder()
    .setGalleryImportAllowed(false)
    .setPageLimit(2)
    .setResultFormats(RESULT_FORMAT_JPEG, RESULT_FORMAT_PDF)
    .setScannerMode(SCANNER_MODE_FULL)
    .build();

סריקת מסמכים

אחרי שיוצרים את GmsDocumentScannerOptions, מקבלים מכונה של GmsDocumentScanner. לאחר מכן אפשר להתחיל את הפעילות של הסורק. במעקב ממשקי Activity API שהושקה ב-AndroidX.

כשסריקת המסמך תושלם, אובייקט GmsDocumentScanningResult יעניק גישה למספר הדפים שנסרקו, ומזהי ה-URI תמונות בפורמט JPEG ו-PDF, בהתאם למה שהוגדר באמצעות setResultFormats:

Kotlin

val scanner = GmsDocumentScanning.getClient(options)
val scannerLauncher = registerForActivityResult(StartIntentSenderForResult()) {
  result -> {
    if (result.resultCode == RESULT_OK) {
      val result =
        GmsDocumentScanningResult.fromActivityResultIntent(result.data)
      result.getPages()?.let { pages ->
        for (page in pages) {
          val imageUri = pages.get(0).getImageUri()
        }
      }
      result.getPdf()?.let { pdf ->
        val pdfUri = pdf.getUri()
        val pageCount = pdf.getPageCount()
      }
    }
  }
}

scanner.getStartScanIntent(activity)
  .addOnSuccessListener { intentSender ->
     scannerLauncher.launch(IntentSenderRequest.Builder(intentSender).build())
   }
  .addOnFailureListener {
    ...
  }

Java

GmsDocumentScanner scanner = GmsDocumentScanning.getClient(options);
ActivityResultLauncher<IntentSenderRequest> scannerLauncher =
  registerForActivityResult(
    new StartIntentSenderForResult(),
      result -> {
        if (result.getResultCode() == RESULT_OK) {
          GmsDocumentScanningResult result = GmsDocumentScanningResult.fromActivityResultIntent(result.getData());
          for (Page page : result.getPages()) {
            Uri imageUri = pages.get(0).getImageUri();
          }

          Pdf pdf = result.getPdf();
          Uri pdfUri = pdf.getUri();
          int pageCount = pdf.getPageCount();
        }
      });

scanner.getStartScanIntent(activity)
  .addOnSuccessListener(intentSender ->
    scannerLauncher.launch(new IntentSenderRequest.Builder(intentSender).build()))
  .addOnFailureListener(...);

טיפים לשיפור הביצועים

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