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

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

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

التجربة الآن

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

قبل البدء

  1. في ملف build.gradle على مستوى المشروع، تأكَّد من تضمين مستودع Maven من Google في قسمَي "النص البرمجي" و"جميع المشاريع".

  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 أو كليهما) التي تحتاجها بالفعل.