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

Используйте API сканера документов ML Kit, чтобы легко добавить функцию сканера документов в свое приложение.

Особенность Подробности
Имя SDK play-services-mlkit-документ-сканер
Выполнение Модели, логика сканирования и поток пользовательского интерфейса динамически загружаются сервисами 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 для настройки параметров сканера:

Котлин

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, или оба), которые вам действительно нужны.