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:
COORDINATE_SYSTEM_VIEW_REFERENCED
: toạ độPreviewView
được chuyển đổi.COORDINATE_SYSTEM_ORIGINAL
: toạ độ luồngImageAnalysis
gốc.
Executor
gọi lệnh gọi lại Người tiêu dùng (Consumer) và gửiMlKitAnalyzer.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.