Я пытаюсь интегрировать CameraX с MLKit, используя пользовательскую модель. Проблема, с которой я сталкиваюсь, заключается в попытке использовать ProxyImage, который я получаю от обратного вызова ImageAnalysis, и использовать эти данные в MLKit. Ранее с Camera2 я манипулировал растровым изображением, которое было на SurfaceView. Я могу получить растровое изображение, создав FirebaseVisionImage, но я хочу избежать манипулирования растровыми изображениями в каждом кадре, который я получаю обратно. Это очень дорогое удовольствие (Мы используем полноэкранный предварительный просмотр камеры), потому что наша пользовательская модель должна принимать квадратное изображение. Вот что у меня сейчас:
val preview = Preview.Builder().apply {
setTargetResolution(screenSize)
setTargetRotation(viewFinder.display.rotation)
}.build()
preview.previewSurfaceProvider = viewFinder.previewSurfaceProvider
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.build()
imageAnalysis.setAnalyzer(executor,
ImageAnalysis.Analyzer {imageProxy ->
\\DO image manipulation here
})
val cameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
cameraProviderFuture.addListener(Runnable {
val cameraProvider = cameraProviderFuture.get()
cameraProvider.bindToLifecycle(
requireActivity(),
cameraSelector,
preview,
imageAnalysis
)
}, executor)