Trình quét tài liệu kèm Bộ công cụ học máy trên Android

Sử dụng API trình quét tài liệu Bộ công cụ học máy để dễ dàng thêm tính năng trình quét tài liệu vào ứng dụng của bạn.

Tính năng Chi tiết
Tên SDK play-services-mlkit-document-scanner
Triển khai Các mô hình, logic quét và luồng giao diện người dùng sẽ được Dịch vụ Google Play tải xuống một cách linh động.
Ảnh hưởng của kích thước ứng dụng Tăng kích thước tải xuống khoảng 300KB.
Thời gian khởi động Người dùng có thể phải đợi các mô hình, logic và luồng giao diện người dùng tải xuống trước khi sử dụng lần đầu tiên.

Dùng thử

Hãy dùng thử ứng dụng mẫu để xem ví dụ về cách sử dụng API này.

Trước khi bắt đầu

  1. Trong tệp build.gradle cấp dự án, hãy nhớ đưa kho lưu trữ Maven của Google vào cả tập lệnh bản dựng và tất cả các phần dự án.

  2. Thêm phần phụ thuộc cho thư viện trình quét tài liệu của Bộ công cụ học máy vào tệp gradle cấp ứng dụng của mô-đun, thường là app/build.gradle:

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

Cấu hình Trình quét tài liệu

Quy trình người dùng của trình quét tài liệu (bao gồm màn hình kính ngắm và màn hình xem trước) do SDK cung cấp. Kính ngắm và màn hình xem trước hỗ trợ các chế độ điều khiển có thể tuỳ chỉnh sau đây:

  • đang nhập từ thư viện ảnh
  • đặt giới hạn về số trang được quét
  • chế độ máy quét (để kiểm soát nhóm tính năng trong luồng)

Bạn có thể truy xuất cả tệp PDF và JPEG cho các tài liệu đã quét của mình.

Tạo thực thể cho GmsDocumentScannerOptions để định cấu hình các tuỳ chọn trình quét:

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

Quét tài liệu

Sau khi tạo GmsDocumentScannerOptions, hãy nhận một bản sao của GmsDocumentScanner. Sau đó, bạn có thể bắt đầu hoạt động của trình quét theo Activity Result API (API Kết quả hoạt động) ra mắt trong AndroidX.

Khi quá trình quét tài liệu hoàn tất, đối tượng GmsDocumentScanningResult sẽ cấp quyền truy cập vào số trang được quét, URI của hình ảnh ở định dạng JPEG và PDF tương ứng với những nội dung được xác định thông qua 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(...);

Mẹo cải thiện hiệu suất

Hãy lưu ý rằng việc tạo tệp tài liệu tốn nhiều thời gian và đòi hỏi năng lực xử lý. Vì vậy, hãy chỉ yêu cầu định dạng đầu ra (JPEG, PDF hoặc cả hai) mà bạn thực sự cần.