Dokumentenscanner mit ML Kit für Android

Mit der Document Scanner API von ML Kit können Sie Ihrer Anwendung auf einfache Weise eine Dokumentenscanner-Funktion hinzufügen.

Feature Details
SDK-Name play-services-mlkit-document-scanner
Implementierung Die Modelle, die Scanlogik und der UI-Ablauf werden von Google Play-Diensten dynamisch heruntergeladen.
Auswirkungen auf die App-Größe Downloadgröße um ca. 300 KB erhöht.
Initialisierungszeit Nutzer müssen möglicherweise warten, bis das Modell, die Logik und der UI-Ablauf heruntergeladen wurden, bevor sie das Gerät erstmals verwenden können.

Ausprobieren

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

Hinweis

  1. Achten Sie in der Datei build.gradle auf Projektebene darauf, dass Sie das Maven-Repository von Google sowohl im Buildscript- als auch im Abschnitt „allprojects“ angeben.

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

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

Dokumentscanner-Konfiguration

Der Nutzerfluss des Dokumentscanners (mit einem speziellen Sucherbildschirm und einem Vorschaubildschirm) wird vom SDK bereitgestellt. Der Sucher und die Vorschau unterstützen die folgenden anpassbaren Steuerelemente:

  • Import aus der Fotogalerie
  • Festlegen eines Limits für die Anzahl der gescannten Seiten
  • Scannermodus (zur Steuerung der Funktionsgruppen im Ablauf)

Sie können für Ihre gescannten Dokumente sowohl PDF- als auch JPEG-Dateien 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 kannst du die Scanner-Aktivität nach den in AndroidX eingeführten Activity Result APIs starten.

Wenn das Scannen des Dokuments abgeschlossen ist, gewährt ein GmsDocumentScanningResult-Objekt Zugriff auf die Anzahl der gescannten Seiten und auf die URIs der Bilder im JPEG-Format und im PDF-Format entsprechend der Definition in 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(...);

Tipps zur Leistungsverbesserung

Bedenken Sie, dass das Erstellen von Dokumentdateien Zeit in Anspruch nimmt und Rechenleistung erfordert. Fordern Sie daher nur die Ausgabeformate (JPEG, PDF oder beides) an, die Sie tatsächlich benötigen.