اسکنر اسناد با کیت ML در اندروید

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

ویژگی جزئیات
نام SDK اسکنر اسناد و سرویس‌های بازی mlkit
پیاده‌سازی مدل‌ها، منطق اسکن و جریان رابط کاربری به صورت پویا توسط سرویس‌های گوگل پلی دانلود می‌شوند.
تأثیر اندازه برنامه حجم دانلود حدود ۳۰۰ کیلوبایت افزایش یافت.
زمان اولیه سازی کاربران ممکن است مجبور باشند قبل از اولین استفاده، منتظر دانلود مدل‌ها، منطق و جریان رابط کاربری باشند.

امتحانش کن.

برای مشاهده‌ی نحوه‌ی استفاده از این API، با برنامه‌ی نمونه کار کنید.

قبل از اینکه شروع کنی

  1. در فایل build.gradle سطح پروژه خود، مطمئن شوید که مخزن Maven گوگل را هم در بخش‌های buildscript و هم در allprojects خود وارد کرده‌اید.

  2. وابستگی مربوط به کتابخانه اسکنر سند ML Kit را به فایل gradle سطح app ماژول خود که معمولاً app/build.gradle است، اضافه کنید:

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

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

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

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

شما می‌توانید فایل‌های PDF و JPEG را برای اسناد اسکن شده خود بازیابی کنید.

برای پیکربندی گزینه‌های اسکنر، GmsDocumentScannerOptions نمونه‌سازی کنید:

کاتلین

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 دریافت کنید. سپس می‌توانید فعالیت اسکنر را با پیروی از APIهای Activity Result که در AndroidX معرفی شده‌اند، آغاز کنید.

وقتی اسکن سند کامل شد، یک شیء GmsDocumentScanningResult به تعداد صفحات اسکن شده، URI های تصاویر با فرمت JPEG و PDF مطابق با آنچه از طریق setResultFormats تعریف شده است، دسترسی می‌دهد:

کاتلین

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