اسکنر سند با 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'
}

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

جریان کاربر اسکنر سند (که شامل صفحه نمایاب اختصاصی و صفحه پیش‌نمایش است) توسط «کیت توسعه نرم‌افزار» ارائه می‌شود. نمایاب و صفحه پیش‌نمایش از کنترل‌های سفارشی‌سازی‌شدنی زیر پشتیبانی می‌کند:

  • وارد کردن از گالری عکس
  • تنظیم محدودیت برای تعداد صفحات اسکن‌شده
  • حالت اسکنر (برای کنترل مجموعه‌های ویژگی در جریان)

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