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

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

ویژگی جزئیات
نام Sdk play-services-mlkit-document scanner
پیاده سازی مدل‌ها، منطق اسکن و جریان رابط کاربری به صورت پویا توسط سرویس‌های Google Play دانلود می‌شوند.
تاثیر اندازه برنامه افزایش حجم دانلود ~ 300 کیلوبایت
زمان اولیه سازی کاربران ممکن است قبل از اولین استفاده، منتظر بمانند تا مدل‌ها، منطق و جریان رابط کاربری دانلود شوند.

آن را امتحان کنید

با برنامه نمونه بازی کنید تا نمونه استفاده از این 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 Instantiate کنید:

کاتلین

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