เครื่องสแกนเอกสารด้วย 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 และโปรเจ็กต์ทั้งหมด

  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 อย่าง) ที่คุณต้องการจริงๆ