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

ใช้ Document Scanner API ของ ML Kit เพื่อเพิ่มฟีเจอร์เครื่องสแกนเอกสารลงในแอปได้อย่างง่ายดาย

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

ลองเลย

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

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

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

  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 จากนั้นคุณสามารถเริ่มกิจกรรมการสแกนโดยทำตามActivity Result 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 รูปแบบ) ที่คุณต้องใช้จริงๆ