Escáner de documentos con ML Kit en Android
Usa la API de Document Scanner de ML Kit para agregar fácilmente una función de escáner de documentos a tu app.
Función | Detalles |
---|---|
Nombre del SDK | play-services-mlkit-document-scanner |
Implementación | Los modelos, la lógica de análisis y el flujo de la IU se descargan de forma dinámica a través de los Servicios de Google Play. |
Impacto en el tamaño de la app | Aumento del tamaño de descarga de aproximadamente 300 KB |
Hora de inicialización | Es posible que los usuarios deban esperar a que se descarguen los modelos, la lógica y el flujo de la IU antes de usarlos por primera vez. |
Probar
Experimenta con la app de ejemplo para ver un ejemplo del uso de esta API.
Antes de comenzar
En tu archivo
build.gradle
de nivel de proyecto, asegúrate de incluir el repositorio Maven de Google en las secciones buildscript y allprojects.Agrega la dependencia para la biblioteca del escáner de documentos de ML Kit al archivo Gradle a nivel de la app de tu módulo, que suele ser app/build.gradle:
dependencies {
// …
implementation 'com.google.android.gms:play-services-mlkit-document-scanner:16.0.0-beta1'
}
Configuración del escáner de documentos
El SDK proporciona el flujo del usuario del escáner de documentos (que incluye una pantalla de visor y una pantalla de vista previa dedicadas). El visor y la pantalla de vista previa admiten los siguientes controles personalizables:
- Importar desde la galería de fotos
- Establecer un límite para la cantidad de páginas escaneadas
- Modo de escáner (para controlar los conjuntos de funciones en el flujo)
Puedes recuperar los archivos PDF y JPEG de tus documentos escaneados.
Crea una instancia de GmsDocumentScannerOptions
para configurar las opciones del escáner:
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();
Escanea documentos
Después de crear tu GmsDocumentScannerOptions
, obtén una instancia de GmsDocumentScanner
. Luego, puedes iniciar la actividad del escáner con las APIs de Activity Result que se introdujeron en AndroidX.
Cuando se complete el análisis del documento, un objeto GmsDocumentScanningResult
dará acceso a la cantidad de páginas analizadas, los URI de las imágenes en formato JPEG y PDF según lo que se definió a través de 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(...);
Sugerencias para mejorar el rendimiento
Ten en cuenta que generar archivos de documentos lleva tiempo y requiere potencia de procesamiento, por lo que solo debes solicitar los formatos de salida (JPEG, PDF o ambos) que realmente necesites.