Scanner de documentos com o Kit de ML no Android

Use a API de scanner do kit de ML para adicionar facilmente um recurso de digitalização ao seu aplicativo.

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 Pode ser necessário que os usuários aguardem o download dos modelos, da lógica e do fluxo da interface antes do primeiro uso.

Testar

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 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 do 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.

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 do GmsDocumentScanner. Você pode iniciar a atividade do scanner após as APIs Activity Result introduzidas no AndroidX.

Quando a digitalização de documentos for concluída, um objeto GmsDocumentScanningResult 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 o desempenho

Considere que gerar 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.