Android 将谷歌视觉框架一分为二
在我的自定义检测器中,我想将图像从帧分为两半,分别进行处理。 这是迄今为止我在自定义Android 将谷歌视觉框架一分为二,android,kotlin,google-vision,android-vision,Android,Kotlin,Google Vision,Android Vision,在我的自定义检测器中,我想将图像从帧分为两半,分别进行处理。 这是迄今为止我在自定义检测器中得到的: val imageArray = frame?.grayscaleImageData?.array() val upperImageBuffer = ByteBuffer .allocate(imageArray?.size ?: 0) .put(imageArra
检测器中得到的:
val imageArray = frame?.grayscaleImageData?.array()
val upperImageBuffer = ByteBuffer
.allocate(imageArray?.size ?: 0)
.put(imageArray, 0, imageArray?.size?.div(2) ?: 0)
val upperFrame = Frame.Builder().
setImageData(upperImageBuffer,
frame?.metadata?.width ?: 0,
frame?.metadata?.height?.div(2) ?: 0,
frame?.metadata?.format ?: 16).
setRotation(frame?.metadata?.rotation ?: 0).
build()
val lowerFrame... etc
val upperDetections = delegateDetector.detect(upperFrame)
upperDetections.forEach { key, barcode ->
if (barcode is Barcode) results.append(key, barcode)
}
val lowerDetections = delegateDetector.detect(lowerFrame) etc.
到目前为止,我在两者上都使用了相同的检测器(这实际上是为了检查我是否会识别出比整个帧更多的结果——听起来很愚蠢,但我保留了这个问题,因为将来可能会有人需要一个检测器处理图像的一部分,另一个检测器处理另一部分)
然而,问题是:我得到的结果是相同的两半,实际上是相同的,从原来的帧。我做错了什么?来自CameraSource的灰度图像数据也包括颜色,但前缀为灰度通道。也就是说,它被格式化为YUV,而不仅仅是Y通道(灰度)
因此,与其使用imageArray.size,不如使用frame.width*frame.height作为大小。是的,基本上我刚刚发现我对代码中发生的事情完全错了,所以我需要重申这个问题。不幸的是,也许明天,现在有很多工作要做。但我最终还是用了这个。