Scanner com o Kit de ML no Android

Use a API document scanner do Kit de ML para adicionar facilmente um recurso de scanner ao seu app.

Recurso Detalhes
Nome do SDK play-services-mlkit-document-scanner
Implementação Os modelos, a lógica de leitura e o fluxo de 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 de 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 para envolvidos no projeto, inclua o repositório Maven do Google nas seções buildscript e allprojects.

  2. Adicione a dependência da biblioteca do scanner 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'
}

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 prévia 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 verificadas
  • modo de scanner (para controlar os conjuntos de atributos no fluxo)

Você pode 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 o GmsDocumentScannerOptions, receba uma instância de GmsDocumentScanner. Em seguida, você pode iniciar 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 ao 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

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