Scanner de documents avec ML Kit sur Android

Utilisez l'API du scanner de documents ML Kit pour ajouter facilement une fonctionnalité d'analyse 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'interface utilisateur sont téléchargés de manière dynamique par les services Google Play.
Impact sur la taille de l'application Augmentation d'environ 300 Ko de la taille de téléchargement.
Délai d'initialisation Les utilisateurs devront peut-être attendre le téléchargement des modèles, de la logique et du flux d'interface utilisateur avant de les utiliser pour la première fois.

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 le dépôt Maven de Google dans les sections "buildscript" et "allprojects".

  2. Ajoutez la dépendance de la bibliothèque du 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 du scanner de documents

Le parcours utilisateur du scanner de documents (qui comprend un viseur et un écran d'aperçu dédiés) est fourni par le SDK. Le viseur et l'écran d'aperçu prennent en charge les commandes personnalisables suivantes:

  • importer des photos depuis la galerie de photos
  • de limiter le nombre de pages numérisées
  • mode Scanner (pour contrôler les ensembles de fonctionnalités dans le flux)

Vous pouvez récupérer des fichiers PDF et JPEG pour vos documents scannés.

Instanciez GmsDocumentScannerOptions pour configurer les options d'analyse:

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 lancer l'activité de l'outil d'analyse en suivant les API Activity Result introduites dans AndroidX.

Une fois la numérisation du document terminée, un objet GmsDocumentScanningResult donne accès au nombre de pages numérisées, ainsi qu'aux URI des images au format JPEG et PDF en fonction de 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

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