เครื่องสแกนเอกสารที่มี ML Kit ใน Android

ใช้ API เครื่องสแกนเอกสาร ML Kit เพื่อเพิ่มฟีเจอร์เครื่องสแกนเอกสารใน แอปของคุณ

ฟีเจอร์ รายละเอียด
ชื่อ SDK play-services-mlkit-document-scanner
การใช้งาน โมเดล ตรรกะการสแกน และขั้นตอนของ UI จะดาวน์โหลดแบบไดนามิกโดย บริการ Google Play
ผลกระทบต่อขนาดแอป ขนาดการดาวน์โหลดเพิ่มขึ้นประมาณ 300 KB
เวลาที่ใช้ในการเริ่มต้น ผู้ใช้อาจต้องรอโมเดล ตรรกะ และโฟลว์ UI เพื่อ ให้ดาวน์โหลดก่อนใช้งานครั้งแรก

ลองเลย

ลองใช้ ตัวอย่างแอป เพื่อดูตัวอย่างการใช้ API นี้

ก่อนเริ่มต้น

  1. ในไฟล์ build.gradle ระดับโปรเจ็กต์ ตรวจสอบว่าได้รวม ที่เก็บ Maven ทั้งในส่วนบิลด์และโปรเจ็กต์ทั้งหมด

  2. เพิ่มทรัพยากร Dependency สำหรับไลบรารีเครื่องสแกนเอกสาร ML Kit ไปยัง ไฟล์ Gradle ระดับแอปของโมดูล ซึ่งมักจะเป็น app/build.gradle

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

การกำหนดค่าเครื่องสแกนเอกสาร

โฟลว์ผู้ใช้ของเครื่องสแกนเอกสาร (ซึ่งรวมถึงหน้าจอช่องมองภาพโดยเฉพาะ และหน้าจอตัวอย่าง) จะให้บริการโดย SDK ช่องมองภาพและหน้าจอแสดงตัวอย่างรองรับการควบคุมที่ปรับแต่งได้ดังต่อไปนี้

  • การนำเข้าจากแกลเลอรีรูปภาพ
  • ตั้งค่าจำกัดจำนวนหน้าที่สแกน
  • โหมดสแกนเนอร์ (เพื่อควบคุมชุดฟีเจอร์ในขั้นตอน)

คุณสามารถเรียกเอกสารที่สแกนได้ทั้งไฟล์ PDF และ JPEG

สร้างอินสแตนซ์ GmsDocumentScannerOptions เพื่อกำหนดค่าตัวเลือกเครื่องสแกน:

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

สแกนเอกสาร

หลังจากสร้าง GmsDocumentScannerOptions แล้ว ให้รับอินสแตนซ์ของ GmsDocumentScanner จากนั้นคุณจะเริ่มกิจกรรมเครื่องสแกนได้ กำลังติดตาม API ผลของกิจกรรม ใน AndroidX

เมื่อสแกนเอกสารเสร็จแล้ว ออบเจ็กต์ GmsDocumentScanningResult จะมอบการเข้าถึงจำนวนหน้าที่สแกน รวมถึง URI ของ ภาพในรูปแบบ JPEG และ PDF สอดคล้องกับสิ่งที่กำหนดไว้ผ่าน 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(...);

เคล็ดลับในการปรับปรุงประสิทธิภาพ

โปรดทราบว่าการสร้างไฟล์เอกสารต้องใช้เวลาและต้องใช้กำลังในการประมวลผล ดังนั้นโปรดส่งคำขอเฉพาะรูปแบบเอาต์พุต (JPEG หรือ PDF หรือทั้ง 2 รูปแบบ) ที่คุณต้องใช้จริงๆ