将google-视觉框一分为二
Divide google-vision frame into two
在我的自定义检测器中,我想将帧中的图像分成两半,分别处理它们。
这是我到目前为止在我的习惯中得到的 Detector
:
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 的 grayscaleImageData 也包括颜色,但以灰度通道为前缀。也就是说,它被格式化为 YUV 而不仅仅是 Y 通道(灰度)。
所以不要使用 imageArray.size,而是使用 frame.width * frame.height 作为大小。
在我的自定义检测器中,我想将帧中的图像分成两半,分别处理它们。
这是我到目前为止在我的习惯中得到的 Detector
:
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 的 grayscaleImageData 也包括颜色,但以灰度通道为前缀。也就是说,它被格式化为 YUV 而不仅仅是 Y 通道(灰度)。
所以不要使用 imageArray.size,而是使用 frame.width * frame.height 作为大小。