Dokumentenscanner mit ML Kit für Android

Verwenden Sie die ML Kit Document Scanner API, um ganz einfach eine Dokumentenscanner-Funktion hinzuzufügen, für Ihre App.

Feature Details
SDK-Name play-services-mlkit-document-scanner
Implementierung Die Modelle, die Scanlogik und der UI-Flow werden dynamisch von den Google Play-Diensten heruntergeladen.
Auswirkung auf die App-Größe Die Downloadgröße erhöht sich um etwa 300 KB.
Initialisierungszeit Vor der ersten Verwendung müssen die Nutzer möglicherweise warten, bis die Modelle, die Logik und der UI-Ablauf heruntergeladen wurden.

Jetzt ausprobieren

In der Beispielanwendung sehen Sie ein Beispiel für die Verwendung dieser API.

Vorbereitung

  1. In der Datei build.gradle auf Projektebene müssen Sie die Parameter von Google Maven-Repository in den Abschnitten "buildscript" und "allprojects".

  2. Fügen Sie die Abhängigkeit für die ML Kit-Bibliothek für den Dokumentenscanner der Gradle-Datei Ihres Moduls auf App-Ebene hinzu, die in der Regel „app/build.gradle“ lautet:

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

Konfiguration des Dokumentenscanners

Der Nutzerfluss des Dokumentenscanners (einschließlich eines speziellen Sucher- und Vorschaubildschirms) wird vom SDK bereitgestellt. Der Sucher und der Vorschaubildschirm unterstützen die folgenden anpassbaren Steuerelemente:

  • Import aus der Fotogalerie
  • Begrenzung der Anzahl der gescannten Seiten
  • Scannermodus (zur Steuerung der Funktionen im Ablauf)

Sie können sowohl PDF- als auch JPEG-Dateien für Ihre gescannten Dokumente abrufen.

Instanziieren Sie GmsDocumentScannerOptions, um die Scanneroptionen zu konfigurieren:

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

Dokumente scannen

Nachdem Sie Ihre GmsDocumentScannerOptions erstellt haben, rufen Sie eine Instanz von GmsDocumentScanner ab. Sie können dann die Scanneraktivität gemäß den in AndroidX eingeführten Activity Result APIs starten.

Wenn das Scannen des Dokuments abgeschlossen ist, bietet ein GmsDocumentScanningResult-Objekt Zugriff auf die Anzahl der gescannten Seiten, die URIs der Bilder im JPEG-Format und PDF gemäß den über setResultFormats definierten Angaben:

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

Tipps zur Leistungsverbesserung

Das Erstellen von Dokumentdateien erfordert Zeit und Rechenleistung. Fordern Sie daher nur die Ausgabeformate (JPEG, PDF oder beide) an, die Sie tatsächlich benötigen.