gpt4 book ai didi

android - CameraX 在 Android 上用于 MLKit 文本识别的最佳用法

转载 作者:行者123 更新时间:2023-12-04 23:58:03 25 4
gpt4 key购买 nike

我需要在 Android 上使用 MLKit 实现文本识别,我决定使用新的 CameraX api 作为相机库。我正在为正确的类“管道”或图像的数据流而苦苦挣扎,因为 CameraX 非常新,而且那里的资源不多。用例是我拍摄照片,在中间通过 UI 中可见的一些边界裁剪它,然后将裁剪后的图像传递给将处理图像的 MLKit。

鉴于此,ImageAnalysis.Analyzer 是否有位置?接口(interface)?据我了解,此分析仪仅用于预览,而不用于捕获的图像。

我的第一个想法是使用 takePicture接受 OnImageCapturedCallback 但是当我尝试访问时的方法,例如。 ImageProxy.height 应用程序因异常 java.lang.IllegalStateException: Image is already closed 而崩溃,我找不到任何解决方法。

然后我决定使用 takePicture 的另一个重载方法,现在我将图像保存到文件中,然后将其读取到位图,裁剪该图像,现在我有一个可以传递给 MLKit 的图像。但是当我查看传递给 FirebaseVisionTextRecognizerFirebaseVisionImage 时,它有一个 factory method我可以将我从 OnImageCapturedCallback 获得的图像传递给它,这似乎是我在做一些不必要的步骤。

所以我的问题是:

  1. 是否有一些类(CaptureProcessor?)可以处理拍摄图像的裁剪?我想我可以使用 OnImageCapturedCallback 来接收已经裁剪过的图像。
  2. 如果我不进行实时处理而进行后期处理,我还应该使用 ImageAnalysis.Analyzer 吗?

我想我可以用我目前的方法实现我想要的,但我觉得我可以使用比现在更多的 CameraX。

谢谢!

最佳答案

Is there some class (CaptureProcessor?) that will take care of the cropping of taken image?

您可以在构建 ImageCapture 用例后使用 setCropAspectRatio(Rational) 设置裁剪纵横比方法。此方法从旋转输出图像的中心裁剪。所以基本上你在调用 takePicture() 后得到的就是我认为你要求的。

Should I even use ImageAnalysis.Analyzer if I am not doing realtime processing and I am doing post processing?

不,它在您的场景中没有意义。正如您提到的,只有在进行实时图像处理时,您才会想要使用 ImageAnalysis.Analyzer

ps:我很想看看您用于 takePicture() 的导致 IllegalStateException 的代码。

[编辑]

看看你的代码

imageCapture?.takePicture(executor, object : ImageCapture.OnImageCapturedCallback() {
override fun onCaptureSuccess(image: ImageProxy) {
// 1
super.onCaptureSuccess(image)

// 2
Log.d("MainActivity", "Image captured: ${image.width}x${image.height}")
}
})

在 (1) 处,如果您看一下 super.onCaptureSuccess(imageProxy) 的实现,它实际上关闭了传递给该方法的 imageProxy。在 (2) 中访问图像的宽度和高度会引发异常,这是正常的 - 因为图像已关闭 -。文档指出:

The application is responsible for calling ImageProxy.close() to close the image.

所以当使用这个回调时,你可能不应该调用super...,只使用imageProxy,然后在从方法返回之前,手动关闭它(ImageProxy.close() )。

关于android - CameraX 在 Android 上用于 MLKit 文本识别的最佳用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60473270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com