Scanner de documents avec ML Kit sur Android

Utilisez l'API de lecteur de documents de ML Kit pour ajouter facilement une fonctionnalité de scanner de documents à votre application.

Fonctionnalité Détails
Nom du SDK play-services-mlkit-document-scanner
Implémentation Les modèles, la logique d'analyse et le flux d'UI sont téléchargés de manière dynamique par les services Google Play.
Impact sur la taille de l'application Augmentation de la taille de téléchargement d'environ 300 Ko.
Délai d'initialisation Les utilisateurs devront peut-être attendre que les modèles, la logique et le flux d'UI télécharger avant la première utilisation.

Essayer

Testez l'application exemple pour voir un exemple d'utilisation de cette API.

Avant de commencer

  1. Dans le fichier build.gradle au niveau du projet, veillez à inclure l'adresse e-mail de Google dans les sections "buildscript" et "allprojects".

  2. Ajoutez la dépendance de la bibliothèque de scanner de documents ML Kit au fichier Gradle au niveau de l'application de votre module, qui est généralement app/build.gradle :

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

Configuration de Document Scanner

Parcours utilisateur du lecteur de documents (comprenant un écran de viseur dédié et l'écran d'aperçu) sont fournis par le SDK. Le viseur et l'écran d'aperçu sont compatibles avec les commandes personnalisables suivantes:

  • en important depuis la galerie photo
  • limiter le nombre de pages numérisées ;
  • mode d'analyse (pour contrôler les ensembles de fonctionnalités dans le flux)

Vous pouvez récupérer les fichiers PDF et JPEG de vos documents scannés.

Instanciez GmsDocumentScannerOptions pour configurer les options de l'analyseur :

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();

Scanner des documents

Après avoir créé votre GmsDocumentScannerOptions, obtenez une instance de GmsDocumentScanner. Vous pouvez ensuite démarrer l'activité du scanner suivi API Activity Result introduite dans AndroidX.

Une fois la numérisation du document terminée, un objet GmsDocumentScanningResult donne accès au nombre de pages analysées, les URI des des images au format JPEG et PDF, conformément à ce qui a été défini via 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(...);

Conseils pour améliorer les performances

N'oubliez pas que la génération de fichiers de documents prend du temps et nécessite de la puissance de traitement. Par conséquent, ne demandez que les formats de sortie (JPEG, PDF ou les deux) dont vous avez réellement besoin.