Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何设置正确的setTargetResolution大小,以便使用对象检测分析图像?_Android_Kotlin_Object Detection - Fatal编程技术网

Android 如何设置正确的setTargetResolution大小,以便使用对象检测分析图像?

Android 如何设置正确的setTargetResolution大小,以便使用对象检测分析图像?,android,kotlin,object-detection,Android,Kotlin,Object Detection,我正在使用CameraX和对象检测来分析来自摄影机的帧,我很难设置正确的大小,以便制作一个显示当前正在检测的对象的覆盖图 val imageAnalysis = ImageAnalysis.Builder() .setTargetRotation(rotation) .setTargetResolution(size) .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_

我正在使用CameraX和对象检测来分析来自摄影机的帧,我很难设置正确的大小,以便制作一个显示当前正在检测的对象的覆盖图

val imageAnalysis = ImageAnalysis.Builder()
            .setTargetRotation(rotation)
            .setTargetResolution(size)
            .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
            .build()
            .also { it.setAnalyzer(cameraExecutor, imageAnalyzer) }
我有一个自定义视图(覆盖),我给了
boundingBox
给我的矩形,我画了它

我尝试了一些东西,但结果不一致:

如果我这样做:
val size=size(DisplayMetrics().heightPixels,DisplayMetrics().widthPixels)

  • 该应用程序在所有版本的android中都运行良好,但当我尝试获取
    边界框
    rect并设置覆盖时,边界与屏幕中的对象不匹配
如果我这样做:
val size=size(224224)
就像在一个android代码实验室中一样

这来自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))
  • 在这种情况下,安卓R的应用程序运行良好,但覆盖边界仍然关闭,而在安卓Q和Oreo等旧版本中,它会一次又一次地打开摄像头,就像出现故障一样,并冻结应用程序
如果我这样做:
val size=size(1280720)
就像ImageAnalysis文档中的示例一样

  • 边框也关闭了,但该应用程序在所有Android版本中都运行良好
  • 使用640x480进行了相同的尝试,得到了相同的结果
  • 如果我使用480x640或720x1280,我会遇到使应用程序冻结的故障
我只能使用
val size=size(DisplayMetrics.widthPixels,DisplayMetrics().heightPixels)

  • 这显示了与屏幕中的对象匹配的正确边框,但它只在Android R中工作,在旧版本中,我得到了与相机不断打开并冻结屏幕相同的闪光

第一张照片的边框位置不正确,第二张照片的边框工作正常

如果有人知道我做错了什么,以及如何解决这个问题,我将非常感谢你的帮助。
很抱歉发了这么长的帖子,谢谢。

你想要分辨率还是尺寸?如果我不清楚,很抱歉,我的问题是尺寸(…,…),我尝试了多种变体,但每个人都给我一个问题什么是
图像分析
?我认为您可以使用OpenCV,并使用x、y点绘制矩形。或者有一堆库和示例。这个问题可能更多地与预览和图像分析之间的纵横比差异有关,而不是与大小有关。MLKit的对象检测不需要高分辨率(如预览的分辨率)才能检测到相机帧中的对象。强制预览和ImageAnalysis具有相同的纵横比使坐标转换更容易执行。你可以看一个例子。很好,我在模拟器中试用了你的应用程序,它在Android API 29或更低版本中不断打开摄像头并冻结,在API 30中工作正常,你知道这是否是模拟器问题,在真实设备中工作正常吗?我的手机有API 30,工作正常。谢谢你想要分辨率还是尺寸?对不起,如果我不清楚,我的问题是尺寸(…,…),我尝试了多种变化,但每个人都给我一个问题什么是
图像分析
?我认为您可以使用OpenCV,并使用x、y点绘制矩形。或者有一堆库和示例。这个问题可能更多地与预览和图像分析之间的纵横比差异有关,而不是与大小有关。MLKit的对象检测不需要高分辨率(如预览的分辨率)才能检测到相机帧中的对象。强制预览和ImageAnalysis具有相同的纵横比使坐标转换更容易执行。你可以看一个例子。很好,我在模拟器中试用了你的应用程序,它在Android API 29或更低版本中不断打开摄像头并冻结,在API 30中工作正常,你知道这是否是模拟器问题,在真实设备中工作正常吗?我的手机有API 30,工作正常。谢谢