Scanner di documenti con ML Kit su Android

Utilizza l'API Document Scanner di ML Kit per aggiungere facilmente una funzionalità di scansione dei documenti alla tua app.

Funzionalità Dettagli
Nome SDK play-services-mlkit-document-scanner
Implementazione I modelli, la logica di scansione e il flusso della UI vengono scaricati dinamicamente da 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 il download dei modelli, della logica e del flusso della UI prima del primo utilizzo.

Prova

Prova l'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 il repository Maven di Google nelle sezioni buildscript e allprojects.

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

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

Configurazione dello scanner di documenti

Il flusso utente dello scanner di documenti (che include una schermata del mirino dedicata e una schermata di anteprima) è fornito dall'SDK. Il mirino e la schermata di anteprima supportano i seguenti controlli personalizzabili:

  • importazione dalla galleria fotografica
  • impostando un limite al numero di pagine scansionate
  • Modalità scanner (per controllare i set di funzionalità nel flusso)

Puoi recuperare i file PDF e JPEG dei documenti scansionati.

Crea un'istanza di 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, recupera un'istanza di GmsDocumentScanner. Puoi quindi avviare l'attività dello scanner seguendo le API Activity Result introdotte in AndroidX.

Al termine della scansione del documento, un oggetto GmsDocumentScanningResult consentirà di accedere al numero di pagine scansionate, agli URI delle immagini in formato JPEG e al 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 dei file dei documenti richiede tempo e potenza di elaborazione, quindi richiedi solo i formati di output (JPEG, PDF o entrambi) di cui hai effettivamente bisogno.