Dokumentenscanner mit ML Kit unter Android

Mit der ML Kit Document Scanner API können Sie Ihrer App ganz einfach eine Dokumentenscannerfunktion hinzufügen.

Feature Details
SDK-Name play-services-mlkit-document-scanner
Implementierung Die Modelle, die Scanlogik und der UI-Ablauf werden dynamisch von den Google Play-Diensten heruntergeladen.
Auswirkungen auf die App-Größe Die Downloadgröße nimmt um etwa 300 KB zu.
Initialisierungszeit Nutzer müssen möglicherweise warten, bis die Modelle, die Logik und der UI-Ablauf heruntergeladen wurden, bevor sie die App zum ersten Mal verwenden können.

Jetzt ausprobieren

Probieren Sie die Beispiel-App aus, um ein Anwendungsbeispiel für diese API zu sehen.

Hinweis

  1. In die Datei build.gradle auf Projektebene muss das Maven-Repository von Google in die Abschnitte „buildscript“ und „allprojects“ aufgenommen werden.

  2. Fügen Sie die Abhängigkeit für die ML Kit Document Scanner Library zur Gradle-Datei auf App-Ebene Ihres Moduls hinzu. Diese befindet sich in der Regel unter „app/build.gradle“:

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

Konfiguration des Dokumentenscanners

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

  • Import aus der Fotogalerie
  • Beschränkung der Anzahl der gescannten Seiten
  • Scannermodus (zum Steuern der Funktionssätze 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 GmsDocumentScannerOptions erstellt haben, rufen Sie eine Instanz von GmsDocumentScanner ab. Anschließend können Sie die Scanneraktivität mit den in AndroidX eingeführten Activity Result APIs starten.

Wenn das Scannen des Dokuments abgeschlossen ist, erhalten Sie über ein GmsDocumentScanningResult-Objekt Zugriff auf die Anzahl der gescannten Seiten, die URIs der Bilder im JPEG-Format und die PDF-Datei, je nachdem, was über setResultFormats definiert wurde:

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 Generieren von Dokumentdateien dauert einige Zeit und erfordert Rechenleistung. Fordern Sie daher nur die Ausgabedateiformate (JPEG, PDF oder beide) an, die Sie tatsächlich benötigen.