الماسح الضوئي للمستندات باستخدام أدوات تعلُّم الآلة على نظام التشغيل Android

يمكنك استخدام واجهة برمجة التطبيقات الخاصة بالماسح الضوئي لمستندات ML Kit لإضافة ميزة الماسح الضوئي للمستندات إلى تطبيقك بسهولة.

الميزة التفاصيل
اسم Sdk play-services-mlkit-document-scanner
التنفيذ يتم تنزيل النماذج ومنطق المسح وتدفق واجهة المستخدم ديناميكيًا من خلال "خدمات Google Play".
تأثير حجم التطبيق زيادة حجم عمليات التنزيل تقارب 300 كيلوبايت.
وقت الإعداد قد يضطر المستخدمون إلى انتظار تنزيل النماذج والمنطق وتدفق واجهة المستخدم قبل الاستخدام الأول.

التجربة الآن

جرّب نموذج التطبيق للاطّلاع على مثال لاستخدام واجهة برمجة التطبيقات هذه.

قبل البدء

  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. يمكنك بعد ذلك بدء نشاط الماسح الضوئي باتباع واجهات برمجة تطبيقات نتائج الأنشطة التي تم تقديمها في 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 أو كليهما) فقط التي تحتاجها بالفعل.