اسکنر سند با ML Kit در Android

از ML Kit document scanner API استفاده کنید تا به‌راحتی ویژگی اسکنر سند را به برنامه‌تان اضافه کنید.

ویژگی جزئیات
نام کیت توسعه نرم‌افزار play-services-mlkit-document-scanner
پیاده‌سازی مدل‌ها، منطق اسکن، و جریان واسط کاربر به‌طور پویا توسط «خدمات Google Play» بارگیری می‌شوند.
تأثیر اندازه برنامه افزایش اندازه بارگیری حدود ۳۰۰ کیلوبایت.
زمان مقداردهی اولیه ممکن است کاربران مجبور شوند قبل‌از اولین استفاده، منتظر بمانند تا مدل‌ها، منطق، و جریان واسط کاربر بارگیری شود.

امتحان کنید

با برنامه نمونه کار کنید تا نمونه‌ای از کاربرد این 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'
}

پیکربندی «اسکنر سند»

جریان کاربر اسکنر سند (که شامل صفحه نمایاب اختصاصی و صفحه پیش‌نمایش است) توسط 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()

جاوا

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

اسکن اسناد

پس‌از ایجاد GmsDocumentScannerOptions، نمونه‌ای از GmsDocumentScanner دریافت کنید. سپس می‌توانید فعالیت اسکنر را طبق میاناهای برنامه‌سازی کاربردی Activity Result معرفی‌شده در 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 {
    ...
  }

جاوا

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، یا هر دو) را درخواست کنید که واقعاً به آن‌ها نیاز دارید.