Сканер документов с ML Kit на Android

Используйте Document Scanner 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'
}

Конфигурация сканера документов

Путь пользователя в сканере документов (включая специальный экран видоискателя и экран предварительного просмотра) предоставляется 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. Затем вы можете запустить сканер, следуя инструкциям в статье Activity Result APIs, представленной в 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 или оба), которые вам действительно нужны.