Dokumentenscanner mit ML Kit für Android

Verwenden Sie die ML Kit Document Scanner API, um Ihrer App auf einfache Weise eine Dokumentenscanner-Funktion hinzuzufü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.
Auswirkung auf die App-Größe Downloadgröße um ca. 300 KB erhöht.
Initialisierungszeit Nutzer müssen möglicherweise vor der ersten Verwendung warten, bis die Modelle, die Logik und der UI-Ablauf heruntergeladen wurden.

Ausprobieren

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

Hinweis

  1. Fügen Sie in der Datei build.gradle auf Projektebene sowohl im Abschnitt „buildscript“ als auch im Abschnitt „allprojects“ das Maven-Repository von Google ein.

  2. Fügen Sie die Abhängigkeit für die ML Kit-Dokumentenscannerbibliothek in die Gradle-Datei Ihres Moduls auf App-Ebene ein (normalerweise app/build.gradle):

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

Konfiguration des Dokumentenscanners

Der User Flow für den Dokumentenscanner, der einen speziellen Sucherbildschirm und einen Vorschaubildschirm umfasst, wird vom SDK bereitgestellt. Der Sucher und die Vorschau unterstützen die folgenden anpassbaren Steuerelemente:

  • aus der Fotogalerie importieren
  • die Anzahl der gescannten Seiten begrenzen,
  • Scannermodus (zur Steuerung 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

Rufen Sie nach dem Erstellen der GmsDocumentScannerOptions eine Instanz von GmsDocumentScanner ab. Anschließend können Sie die Scanner-Aktivität gemäß den Activity Result APIs starten, die in AndroidX eingeführt wurden.

Wenn das Scannen des Dokuments abgeschlossen ist, gewährt ein GmsDocumentScanningResult-Objekt Zugriff auf die Anzahl der gescannten Seiten und 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 Verbesserung der Leistung

Das Generieren von Dokumentdateien nimmt Zeit in Anspruch und erfordert Verarbeitungsleistung. Fordern Sie daher nur die Ausgabeformate (JPEG, PDF oder beides) an, die Sie wirklich benötigen.