Digitalizador de documentos com o Kit de ML no Android

Use a API do scanner de documentos do ML Kit para adicionar facilmente um recurso de scanner 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 aproximadamente 300 KB no tamanho do download.
Tempo de inicialização Os usuários talvez precisem esperar o download dos modelos, da lógica e do fluxo da interface antes do primeiro uso.

Faça um teste

Teste o app de exemplo para ver um exemplo de uso dessa API.

Antes de começar

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

  2. Adicione a dependência da biblioteca do scanner de documentos do Kit de ML ao arquivo Gradle no nível do app 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 Document Scanner

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

  • importar 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)

É possível recuperar arquivos PDF e JPEG dos 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 uma instância de GmsDocumentScanner. Em seguida, inicie a atividade do scanner seguindo as APIs Activity Result introduzidas no AndroidX.

Quando a digitalização do documento for concluída, um objeto GmsDocumentScanningResult vai dar acesso ao número de páginas digitalizadas, aos URIs das imagens em formato JPEG e PDF, de acordo com o que foi definido via 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 a performance

A geração de arquivos de documentos leva tempo e exige poder de processamento. Portanto, solicite apenas os formatos de saída (JPEG, PDF ou ambos) de que você realmente precisa.