Scanner di documenti con ML Kit su Android

Utilizza l'API dello scanner di documenti ML Kit per aggiungere facilmente una funzionalità di scansione dei documenti a la tua app.

Funzionalità Dettagli
Nome SDK play-services-mlkit-document-scanner
Implementazione I modelli, la logica di scansione e il flusso dell'interfaccia utente vengono scaricati in modo dinamico Google Play Services.
Impatto sulle dimensioni dell'app Aumento delle dimensioni di download di circa 300 kB.
Tempo di inizializzazione Gli utenti potrebbero dover attendere che il flusso dei modelli, della logica e dell'interfaccia utente scaricare prima del primo utilizzo.

Prova

Prova a conoscere app di esempio per vedere un esempio di utilizzo di questa API.

Prima di iniziare

  1. Nel file build.gradle a livello di progetto, assicurati di includere la proprietà Repository Maven nelle sezioni buildscript e allprojects.

  2. Aggiungi la dipendenza per la libreria Scanner di documenti ML Kit al tuo file gradle a livello di app del modulo, che di solito è app/build.gradle:

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

Configurazione di Document Scanner

Il flusso utente dello scanner di documenti (che include uno schermo dedicato con mirino e schermata di anteprima) è fornita dall'SDK. Il mirino e la schermata di anteprima supportano i seguenti controlli personalizzabili:

  • importando dalla galleria fotografica
  • impostando un limite al numero di pagine scansionate
  • modalità scanner (per controllare gli insiemi di funzionalità nel flusso)

Puoi recuperare sia i file PDF che JPEG per i documenti scansionati.

Crea un'istanza GmsDocumentScannerOptions per configurare le opzioni dello 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();

Scansiona documenti

Dopo aver creato GmsDocumentScannerOptions, ricevi di GmsDocumentScanner. Dopodiché puoi avviare l'attività dello scanner persone che seguo API Activity Result introdotto in AndroidX.

Al termine della scansione dei documenti, un oggetto GmsDocumentScanningResult consentirà di accedere al numero di pagine scansionate, ovvero gli URI dell'oggetto immagini in formato JPEG e PDF in base a quanto definito tramite 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(...);

Suggerimenti per migliorare il rendimento

Tieni presente che la generazione di file di documenti richiede tempo e un'elaborazione quindi richiede solo i formati di output (JPEG, PDF o entrambi) necessaria.