如何设置正确的setTarget分辨率大小来分析带有对象检测的图像? [英] How to set the correct setTargetResolution size to analyze an image with object detection?
本文介绍了如何设置正确的setTarget分辨率大小来分析带有对象检测的图像?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用具有对象检测功能的CameraX来分析来自摄像机的帧,但在设置正确的大小以生成显示当前检测到的对象的覆盖图时遇到问题。
val imageAnalysis = ImageAnalysis.Builder()
.setTargetRotation(rotation)
.setTargetResolution(size)
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
.also { it.setAnalyzer(cameraExecutor, imageAnalyzer) }
我有一个CustomView(覆盖),我给它boundingBox
给我的RECT,然后我绘制它。
我尝试了一些方法,但结果不一致:
如果我这样做:val size = Size(DisplayMetrics().heightPixels, DisplayMetrics().widthPixels)
- 该应用程序在所有Android版本中都运行良好,但当我尝试获取
boundingBox
RECT并设置覆盖时,边框与屏幕上的对象不匹配。
如果我这样做:val size = Size(224,224)
Like It SugGuest in the Android codelabs
这来自codelabs GitHub:
// This sets the ideal size for the image to be analyse, CameraX will choose the
// the most suitable resolution which may not be exactly the same or hold the same
// aspect ratio
.setTargetResolution(Size(224, 224))
- 在这种情况下,在Android R中,应用程序运行良好,覆盖边界仍然关闭,而在Android Q和Oreo等较旧版本中,它会像故障一样一次又一次地打开摄像头,从而冻结应用程序
如果我这样做:val size = Size(1280, 720)
如ImageAnalysis文档中的示例
- 边框也关闭了,但这款应用在所有Android版本中都运行得很好
- 用640x480尝试相同的方法,得到相同的结果
- 如果我使用480x640或720x1280,则会出现应用程序冻结的故障
我只能使用val size = Size(DisplayMetrics.widthPixels, DisplayMetrics().heightPixels)
- 这显示了与屏幕上的对象相匹配的正确边框,但它只在Android R中起作用,而在旧版本中,我得到了同样的问题,摄像头一直打开并冻结屏幕
第一张照片的边框位置不正确,第二张照片的边框工作正常。
如果有人对我做错了什么以及如何改正有任何想法,我将不胜感激。 很抱歉发了这么长的帖子,谢谢你。
推荐答案
您必须从
导入导入android.util.Size
以下是代码片段
val imageAnalysis = ImageAnalysis
.Builder()
// RGBA output is needed.
.setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888)
.setTargetResolution(Size(1280,720))
*注意1280是我的预览视图宽度,720是高度,纵横比应该保持不变,以便您可以添加变量,如
.setTargetResolution(Size(previewView.width, previewView.height))
这篇关于如何设置正确的setTarget分辨率大小来分析带有对象检测的图像?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文