Scanner di documenti con ML Kit su Android
Utilizza l'API ML Kit Document Scanner per aggiungere facilmente una funzionalità di scansione documenti alla 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 dinamicamente da Google Play Services. |
Impatto sulle dimensioni dell'app | La dimensione di download aumenta di circa 300 kB. |
Tempo di inizializzazione | Gli utenti potrebbero dover attendere il download del modello, della logica e del flusso dell'interfaccia utente prima del primo utilizzo. |
Prova
Prova l'app di esempio per vedere un utilizzo di esempio di questa API.
Prima di iniziare
Nel file
build.gradle
a livello di progetto, assicurati di includere il repository Maven di Google nelle sezioni buildscript e allprojects.Aggiungi la dipendenza per la libreria di scanner di documenti ML Kit al file gradle a livello di app del modulo, che in genere è 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 del mirino dedicato e una schermata di anteprima) è fornito dall'SDK. Il mirino e la schermata di anteprima supportano i seguenti controlli personalizzabili:
- importare dalla galleria fotografica
- impostare un limite al numero di pagine scansionate
- modalità scanner (per controllare gli insiemi di funzionalità nel flusso)
Puoi recuperare sia i file PDF sia i file JPEG per i documenti scansionati.
Crea l'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
, ottieni un'istanza di GmsDocumentScanner
. Puoi quindi avviare l'attività di scansione seguendo le API dei risultati delle attività introdotte in AndroidX.
Al termine della scansione del documento, un oggetto GmsDocumentScanningResult
consentirà l'accesso al numero di pagine scansionate, agli URI delle 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
Considera che la generazione di file di documenti richiede tempo e potenza di elaborazione, quindi richiedi solo i formati di output (JPEG, o PDF o entrambi) di cui hai effettivamente bisogno.