Digitalizador 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 transferidos por download 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 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 conferir 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 de scanner de documentos do Kit de ML ao arquivo Gradle do módulo no nível do app, 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 de usuário do scanner de documentos, que inclui uma tela de visor dedicada e uma 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.

Crie uma instância de 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. Em seguida, inicie a atividade do scanner seguindo as APIs Activity Result introduzidas no AndroidX.

Quando a digitalização de documentos 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 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 a performance

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.