Scanner de documentos com o Kit de ML no Android

Use a API Document scanner do Kit de ML para adicionar facilmente um recurso de digitalização de documentos ao seu app.

Recurso Detalhes
Nome do SDK play-services-mlkit-document-scanner
Implementação Os modelos, a lógica de verificação e o fluxo da interface são baixados dinamicamente pelo Google Play Services.
Impacto no tamanho do app Aumento de cerca de 300 KB no tamanho de download.
Tempo de inicialização Os usuários podem ter que esperar os modelos, a lógica e o fluxo da interface fazer o download antes do primeiro uso.

Faça um teste

Divirta-se com o app de exemplo para conferir um exemplo de uso dessa API.

Antes de começar

  1. No arquivo build.gradle no nível do projeto, inclua a propriedade Repositório Maven nas seções buildscript e allprojects.

  2. Adicione a dependência da biblioteca de scanners do kit de ML à sua do arquivo Gradle do módulo, que geralmente é app/build.gradle:

dependencies {
   // …
   implementation 'com.google.android.gms:play-services-mlkit-document-scanner:16.0.0-beta1'
}

Configuração do scanner de documentos

O fluxo do usuário do scanner de documentos (que inclui uma tela de visor dedicada e tela de visualização) é fornecido pelo SDK. O visor e a tela de visualização são compatíveis com os seguintes controles personalizáveis:

  • importando da galeria de fotos
  • definir um limite para o número de páginas digitalizadas
  • modo de scanner (para controlar os conjuntos de recursos no fluxo)

Você pode recuperar arquivos PDF e JPEG de seus documentos digitalizados.

Instancie GmsDocumentScannerOptions para configurar as opções do scanner:

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();

Digitalizar documentos

Depois de criar seu GmsDocumentScannerOptions, receba um instância de GmsDocumentScanner. Você pode iniciar a atividade do scanner seguindo APIs Activity Result lançado no AndroidX.

Quando a verificação de documentos for concluída, um objeto GmsDocumentScanningResult dará acesso ao número de páginas verificadas, os URIs do imagens em formato JPEG e PDF de acordo com o que foi definido por 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(...);

Dicas para melhorar o desempenho

Tenha em mente que gerar arquivos de documentos leva tempo e exige processamento potência; por isso, solicite apenas os formatos de saída (JPEG, PDF, ou ambos) que você realmente precisam.