Android MLKit中ImageAnalyzer和VisionProcessor的明显区别是什么?



我是MLKit新手。

我注意到的第一件事,从看文档以及样例MLKit应用程序是,似乎有多种方式来附加/使用图像处理器/分析仪。

在某些情况下,他们演示使用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,还是在Image Analysis回调中使用它,并将其绑定到CameraProvider?最后,在使用CameraSource (MLKit Material showcase app)的示例中,没有使用CameraProvider…这仅仅是因为CameraSource使它变得无关紧要和不需要吗?在这种情况下,绑定ImageAnalyzer到CameraProvider甚至不是一个选项吗?当CameraSource运行不同的场景(如imageltagging, Object Detection, Text Recognition等)时,是否可以简单地为其设置不同的imageprocessor ?

差异是由于底层相机实现。分析仪接口来自CameraX,而处理器需要由开发人员为camera1编写。

如果你想使用android.hardware。相机,您需要按照示例创建一个处理器并将相机输出馈送到MLKit。如果你想使用cameraX,那么你可以按照视觉示例应用程序中的示例找到CameraXLivePreviewActivity。

相关内容

最新更新