Trình phân tích bộ công cụ học máy

Bộ công cụ học máy của Google cung cấp API Tầm nhìn học máy trên thiết bị để phát hiện khuôn mặt, quét mã vạch, gắn nhãn hình ảnh và nhiều tính năng khác. Trình phân tích bộ công cụ học máy giúp bạn tích hợp Bộ công cụ học máy với ứng dụng CameraX một cách dễ dàng hơn.

Trình phân tích bộ công cụ học máy là phương thức triển khai của giao diện ImageAnalysis.Analyzer. Trình này ghi đè độ phân giải mục tiêu mặc định (nếu cần) để tối ưu hoá việc sử dụng Bộ công cụ học máy, xử lý các biến đổi toạ độ và chuyển các khung sang Bộ công cụ học máy, giúp trả về kết quả phân tích tổng hợp.

Triển khai trình phân tích bộ công cụ học máy

Để triển khai trình phân tích bộ công cụ học máy, bạn nên sử dụng lớp CameraController. Lớp này hoạt động với PreviewView để hiển thị các thành phần trên giao diện người dùng. Khi được triển khai bằng CameraController, Trình phân tích bộ công cụ học máy xử lý các trường hợp chuyển đổi toạ độ giữa luồng ImageAnalysis ban đầu và PreviewView cho bạn. Công cụ này nhận hệ toạ độ mục tiêu từ CameraX, tính toán phép biến đổi toạ độ và chuyển tiếp số liệu đó đến lớp Detector của Bộ công cụ học máy để phân tích.

Để sử dụng Trình phân tích bộ công cụ học máy với CameraController, hãy gọi setImageAnalysisAnalyzer() và chuyển cho mã đó một đối tượng trình phân tích Bộ công cụ học máy mới với nội dung sau trong hàm khởi tạo:

  • Danh sách các Detector của Bộ công cụ học máy mà CameraX gọi lần lượt theo thứ tự.
  • Hệ toạ độ mục tiêu xác định toạ độ của đầu ra Bộ công cụ học máy:

  • Executor gọi lệnh gọi lại Người tiêu dùng (Consumer) và gửi MlKitAnalyzer.Result hoặc kết quả tổng hợp của Bộ công cụ học máy cho khung máy ảnh đến ứng dụng.

  • Một Consumer mà CameraX gọi khi có kết quả mới của Bộ công cụ học máy.

Mã sau đây triển khai Trình phân tích bộ công cụ học máy bằng cách dùng CameraController để thiết lập một BarcodeScanner giúp phát hiện mã QR:

Kotlin

// create BarcodeScanner object
val options = BarcodeScannerOptions.Builder()
  .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
  .build()
val barcodeScanner = BarcodeScanning.getClient(options)

cameraController.setImageAnalysisAnalyzer(
            ContextCompat.getMainExecutor(this),
            MlKitAnalyzer(
                listOf(barcodeScanner),
                COORDINATE_SYSTEM_VIEW_REFERENCED,
                ContextCompat.getMainExecutor(this)
            ) { result: MlKitAnalyzer.Result? ->
    // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.
    }
)

Java

// create BarcodeScanner object
BarcodeScannerOptions options = new BarcodeScannerOptions.Builder()
   .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
   .build();
BarcodeScanner barcodeScanner = BarcodeScanning.getClient(options);

cameraController.setImageAnalysisAnalyzer(executor,
    new MlKitAnalyzer(List.of(barcodeScanner), COORDINATE_SYSTEM_VIEW_REFERENCED,
    executor, result -> {
   // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.
 });

Trong mã mẫu ở trên, Trình phân tích bộ công cụ học máy sẽ chuyển nội dung sau đây đến lớp Detector của BarcodeScanner:

  • Ma trận biến đổi dựa vào COORDINATE_SYSTEM_VIEW_REFERENCED đại diện cho hệ toạ độ mục tiêu.
  • Khung máy ảnh.

Nếu BarcodeScanner gặp bất kỳ vấn đề nào, thì Detector sẽ báo lỗi và Trình phân tích bộ công cụ học máy sẽ truyền thông báo lỗi đó đến ứng dụng của bạn. Nếu thành công, Trình phân tích bộ công cụ học máy sẽ trả về MLKitAnalyzer.Result#getValue(), trong trường hợp này là đối tượng Barcode.

Bạn cũng có thể triển khai Trình phân tích bộ công cụ học máy bằng cách dùng lớp ImageAnalysis thuộc camera-core. Tuy nhiên, vì ImageAnalysis không được tích hợp với PreviewView, nên bạn phải xử lý phép chuyển đổi toạ độ theo cách thủ công. Để biết thêm thông tin, hãy xem tài liệu tham khảo về Trình phân tích bộ công cụ học máy.

Tài nguyên khác

Đối với ứng dụng máy ảnh đang hoạt động có chức năng Trình phân tích bộ công cụ học máy, hãy xem mẫu CameraX-MLKit.