Android MLKit 中的 ImageAnalyzer 和 VisionProcessor 之间的明显区别是什么(如果有)?
What is the distinct difference between an ImageAnalyzer and VisionProcessor in Android MLKit, if any?
我是 MLKit 新手。
我在查看文档和示例 MLKit 应用程序时注意到的第一件事是似乎有多种方法可以 attach/use 图像 processors/analyzers.
在某些情况下,他们演示了如何使用 ImageAnalyzer api https://developers.google.com/ml-kit/vision/image-labeling/custom-models/android
private class YourImageAnalyzer : ImageAnalysis.Analyzer {
override fun analyze(imageProxy: ImageProxy) {
val mediaImage = imageProxy.image
if (mediaImage != null) {
val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
// Pass image to an ML Kit Vision API
// ...
}
}
}
似乎分析器可以绑定到 CameraProviders 的生命周期
cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture, imageAnalyzer)
在 MLKit 展示应用中显示的其他情况下,CameraSource 有一个可以设置的帧处理器。
cameraSource?.setFrameProcessor(
if (PreferenceUtils.isMultipleObjectsMode(this)) {
MultiObjectProcessor(graphicOverlay!!, workflowModel!!)
} else {
ProminentObjectProcessor(graphicOverlay!!, workflowModel!!)
}
)
那么,这仅仅是做同一件事的两种不同方法吗?它们可以混合搭配吗?选择一个而不是另一个有性能优势吗?
举个具体的例子:如果我想使用 MLKit ImageLabeler,我应该将它包装在处理器中并将其设置为 CameraSource 的 ImageProcessor,还是在图像分析回调中使用它并将其绑定到 CameraProvider?
最后,在使用 CameraSource 的示例中(MLKit Material 展示应用程序)没有使用 CameraProvider...这仅仅是因为 CameraSource 使它变得无关紧要且不需要了吗?在那种情况下,将 ImageAnalyzer 绑定到 CameraProvider 甚至不是一个选项吗?是否可以简单地根据需要为 CameraSource 设置不同的 ImageProcessor,因为它们 运行 通过不同的场景,例如 ImageLabelling、对象检测、文本识别等?
不同之处在于底层相机实现。分析器接口来自CameraX,而处理器需要开发者为camera1编写。
如果你想使用android.hardware.Camera,你需要按照示例创建一个处理器并将相机输出提供给MLKit。
如果你想使用cameraX,那么你可以按照vision sample app中的例子,找到CameraXLivePreviewActivity。
我是 MLKit 新手。
我在查看文档和示例 MLKit 应用程序时注意到的第一件事是似乎有多种方法可以 attach/use 图像 processors/analyzers.
在某些情况下,他们演示了如何使用 ImageAnalyzer api https://developers.google.com/ml-kit/vision/image-labeling/custom-models/android
private class YourImageAnalyzer : ImageAnalysis.Analyzer {
override fun analyze(imageProxy: ImageProxy) {
val mediaImage = imageProxy.image
if (mediaImage != null) {
val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
// Pass image to an ML Kit Vision API
// ...
}
}
}
似乎分析器可以绑定到 CameraProviders 的生命周期
cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture, imageAnalyzer)
在 MLKit 展示应用中显示的其他情况下,CameraSource 有一个可以设置的帧处理器。
cameraSource?.setFrameProcessor(
if (PreferenceUtils.isMultipleObjectsMode(this)) {
MultiObjectProcessor(graphicOverlay!!, workflowModel!!)
} else {
ProminentObjectProcessor(graphicOverlay!!, workflowModel!!)
}
)
那么,这仅仅是做同一件事的两种不同方法吗?它们可以混合搭配吗?选择一个而不是另一个有性能优势吗?
举个具体的例子:如果我想使用 MLKit ImageLabeler,我应该将它包装在处理器中并将其设置为 CameraSource 的 ImageProcessor,还是在图像分析回调中使用它并将其绑定到 CameraProvider?
最后,在使用 CameraSource 的示例中(MLKit Material 展示应用程序)没有使用 CameraProvider...这仅仅是因为 CameraSource 使它变得无关紧要且不需要了吗?在那种情况下,将 ImageAnalyzer 绑定到 CameraProvider 甚至不是一个选项吗?是否可以简单地根据需要为 CameraSource 设置不同的 ImageProcessor,因为它们 运行 通过不同的场景,例如 ImageLabelling、对象检测、文本识别等?
不同之处在于底层相机实现。分析器接口来自CameraX,而处理器需要开发者为camera1编写。
如果你想使用android.hardware.Camera,你需要按照示例创建一个处理器并将相机输出提供给MLKit。 如果你想使用cameraX,那么你可以按照vision sample app中的例子,找到CameraXLivePreviewActivity。