Trình phân tích bộ công cụ học máy
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
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.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# ML Kit Analyzer\n\nGoogle's [ML Kit](https://developers.google.com/ml-kit/guides) provides on-device machine learning Vision APIs for detecting\nfaces, scanning barcodes, labeling images, and more. ML Kit Analyzer makes it\neasier to integrate ML Kit with your CameraX app.\n\nML Kit Analyzer is an implementation of the [`ImageAnalysis.Analyzer`](/reference/androidx/camera/core/ImageAnalysis.Analyzer) interface. It overrides the [default target resolution](/reference/androidx/camera/core/ImageAnalysis.Analyzer#getDefaultTargetResolution())\n(if needed) to optimize for ML Kit usage, handles the coordinate transformations,\nand passes the frames to ML Kit, which returns the aggregated analysis results.\n\nImplement ML Kit Analyzer\n-------------------------\n\nTo implement ML Kit Analyzer, we recommend using the [`CameraController`](/reference/androidx/camera/view/CameraController) class, which works with [`PreviewView`](/reference/androidx/camera/view/PreviewView) to display UI elements. When implemented using `CameraController`, ML Kit Analyzer\nhandles the coordinate transformations between the original `ImageAnalysis`\nstream and `PreviewView` for you. It receives the target coordinate system from\nCameraX, calculates the coordinate transformation,\nand forwards it to ML Kit's [`Detector`](https://developers.google.com/android/reference/com/google/mlkit/vision/interfaces/Detector) class for analysis.\n\nTo use ML Kit Analyzer with `CameraController`, call [`setImageAnalysisAnalyzer()`](/reference/androidx/camera/view/CameraController#setImageAnalysisAnalyzer(java.util.concurrent.Executor,androidx.camera.core.ImageAnalysis.Analyzer)) and pass it\na new ML Kit Analyzer object with the following in its constructor:\n\n- A list of ML Kit `Detector`s, which CameraX invokes sequentially in order.\n- The target coordinate system that determines the coordinates of the ML Kit output:\n\n - [`COORDINATE_SYSTEM_VIEW_REFERENCED`](/reference/androidx/camera/view/CameraController#COORDINATE_SYSTEM_VIEW_REFERENCED()): the transformed `PreviewView` coordinates.\n - [`COORDINATE_SYSTEM_ORIGINAL`](/reference/androidx/camera/core/ImageAnalysis#COORDINATE_SYSTEM_ORIGINAL()): the original `ImageAnalysis` stream coordinates.\n- An [`Executor`](/reference/java/util/concurrent/Executor) that invokes the Consumer callback and delivers\n the [`MlKitAnalyzer.Result`](/reference/androidx/camera/mlkit/vision/MlKitAnalyzer.Result), or the aggregated ML Kit result of a camera frame, to the app.\n\n- A [`Consumer`](/reference/androidx/core/util/Consumer), which CameraX invokes when there is new ML Kit output.\n\nThe following code implements ML Kit Analyzer using `CameraController` to set up\na [`BarcodeScanner`](https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/BarcodeScanner) to detect QR codes: \n\n### Kotlin\n\n```kotlin\n// create BarcodeScanner object\nval options = BarcodeScannerOptions.Builder()\n .setBarcodeFormats(Barcode.FORMAT_QR_CODE)\n .build()\nval barcodeScanner = BarcodeScanning.getClient(options)\n\ncameraController.setImageAnalysisAnalyzer(\n ContextCompat.getMainExecutor(this),\n MlKitAnalyzer(\n listOf(barcodeScanner),\n COORDINATE_SYSTEM_VIEW_REFERENCED,\n ContextCompat.getMainExecutor(this)\n ) { result: MlKitAnalyzer.Result? -\u003e\n // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.\n }\n)\n```\n\n### Java\n\n```java\n// create BarcodeScanner object\nBarcodeScannerOptions options = new BarcodeScannerOptions.Builder()\n .setBarcodeFormats(Barcode.FORMAT_QR_CODE)\n .build();\nBarcodeScanner barcodeScanner = BarcodeScanning.getClient(options);\n\ncameraController.setImageAnalysisAnalyzer(executor,\n new MlKitAnalyzer(List.of(barcodeScanner), COORDINATE_SYSTEM_VIEW_REFERENCED,\n executor, result -\u003e {\n // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.\n });\n```\n\nIn the code sample above, ML Kit Analyzer passes the following to\n`BarcodeScanner`'s `Detector` class:\n\n- The transformation [Matrix](/reference/android/graphics/Matrix) based on `COORDINATE_SYSTEM_VIEW_REFERENCED` that represents the target coordinate system.\n- The camera frames.\n\nIf `BarcodeScanner` runs into any issues, then its `Detector` [throws an error](/reference/androidx/camera/mlkit/vision/MlKitAnalyzer.Result#getThrowable(com.google.mlkit.vision.interfaces.Detector%3C?%3E)),\nand ML Kit Analyzer propagates it to your app. If successful, then ML Kit Analyzer returns [`MLKitAnalyzer.Result#getValue()`](/reference/androidx/camera/mlkit/vision/MlKitAnalyzer.Result#getValue(com.google.mlkit.vision.interfaces.Detector%3CT%3E)), which\nin this case is the [`Barcode`](https://developers.google.com/android/reference/com/google/mlkit/vision/barcode/common/Barcode) object.\n\nYou can also implement ML Kit Analyzer using the [`ImageAnalysis`](/reference/androidx/camera/core/ImageAnalysis) class that is part of `camera-core`. However, because `ImageAnalysis`\nis not integrated with `PreviewView`,\nyou must manually handle the coordinate transformations. For more information,\nsee the [ML Kit Analyzer](/reference/androidx/camera/mlkit/vision/MlKitAnalyzer) reference documentation.\n\nAdditional resources\n--------------------\n\nFor a working camera app with ML Kit Analyzer functionality,\nsee the [CameraX-MLKit](https://github.com/android/camera-samples/tree/main/CameraX-MLKit) sample."]]