الماسح الضوئي للمستندات باستخدام ML Kit على Android

استخدِم واجهة برمجة التطبيقات الخاصة بـ "الماسح الضوئي للمستندات" في "حزمة تعلُّم الآلة" لإضافة ميزة "الماسح الضوئي للمستندات" إلى تطبيقك بسهولة.

الميزة التفاصيل
اسم حزمة تطوير البرامج (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'
}

إعدادات "الماسح الضوئي للمستندات"

توفّر حزمة تطوير البرامج (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()

جافا

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