סורק מסמכים עם 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. לאחר מכן תוכלו להפעיל את הפעילות של הסורק בהתאם לממשקי ה-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 או שניהם) שבאמת נחוצים לכם.