gpt4 book ai didi

android - 使用 Android Camera2 API 和 Firebase ML-Kit Vision 进行实时条码处理

转载 作者:行者123 更新时间:2023-12-03 15:49:14 28 4
gpt4 key购买 nike

在我的应用程序中,在尝试使用 ML-Kit Vision 库处理条形码时渲染预览真的很不稳定。我认为这是由于我对背景 theads 和 runnables 缺乏了解。

我已经按照一些 Googles/Firebase 快速入门指南设置了我的应用程序,并且 Camera2 预览工作正常。

我还设置了一个 onImageAvailableListener 回调

/**
* This a callback object for the [ImageReader]. "onImageAvailable" will be called when a
* preview frame is ready to be processed.
*/
private val onImageAvailableListener = ImageReader.OnImageAvailableListener {
// Processing code here
}

这是我的第一次尝试。使用 mediaImage 发布到后台处理程序并在 BarcodeProcessor 中调用 image.close()。

/**
* This a callback object for the [ImageReader]. "onImageAvailable" will be called when a
* preview frame is ready to be processed.
*/
private val onImageAvailableListener = ImageReader.OnImageAvailableListener {

val mediaImage = it.acquireNextImage()
backgroundHandler?.post(BarcodeProcessor(mediaImage, barcodeDetector))
}

internal class BarcodeProcessor(
private val image: Image,
private val barcodeDetector: FirebaseVisionBarcodeDetector
) : Runnable {

override fun run() {
Log.d(TAG, "run")
try {
val firebaseVisionImage = FirebaseVisionImage.fromMediaImage(image, 1)
// ... more processing
} catch (e: IOException) {
Log.e(TAG, e.toString())
} finally {
image.close()
}
}

companion object {
/**
* Tag for the [Log].
*/
private val TAG = "BarcodeProcessor"
}
}

问题是 onImageAvailableListener 将多张图片发送到 backgroundHandler 而没有及时关闭它们。 val firebaseVisionImage = FirebaseVisionImage.fromMediaImage(image, 1) 确实很慢,这是问题的一部分。

第二次尝试

在这里,我尝试在 backgroundHandler 被调用后立即关闭图像。这种方法的问题是图像已经在 backgroundHandler

中关闭
/**
* This a callback object for the [ImageReader]. "onImageAvailable" will be called when a
* preview frame is ready to be processed.
*/
private val onImageAvailableListener = ImageReader.OnImageAvailableListener {

val mediaImage = it.acquireNextImage()
backgroundHandler?.post(BarcodeProcessor(mediaImage, barcodeDetector))
mediaImage.close()
}

internal class BarcodeProcessor(
private val image: Image,
private val barcodeDetector: FirebaseVisionBarcodeDetector
) : Runnable {

override fun run() {
Log.d(TAG, "run")
try {
val firebaseVisionImage = FirebaseVisionImage.fromMediaImage(image, 1)
// ... more processing
} catch (e: IOException) {
Log.e(TAG, e.toString())
} finally {

}
}

companion object {
/**
* Tag for the [Log].
*/
private val TAG = "BarcodeProcessor"
}
}

如有任何帮助/提示/指导,我们将不胜感激。

最佳答案

关于android - 使用 Android Camera2 API 和 Firebase ML-Kit Vision 进行实时条码处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58385958/

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