将谷歌视觉框架划分为两个

时间:2017-07-12 11:48:03

标签: android kotlin google-vision android-vision

在我的自定义探测器中,我想将图像从帧分成两半,以便单独处理它们。 这是我到目前为止在我的自定义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.

到目前为止,我在两者上使用相同的探测器(这实际上是为了检查我是否会识别出比整帧更多的结果 - 听起来像傻瓜一样,但我保留问题,因为也许未来的某个人需要将一部分图像从一个探测器处理,另一部分由另一个探测器处理。

然而,问题是:我得到两个半部相同的结果,实际上与原始帧相同。我做错了什么?

1 个答案:

答案 0 :(得分:1)

来自CameraSource的

grayscaleImageData也包含颜色,但以灰度通道为前缀。也就是说,它格式化为YUV而不仅仅是Y通道(灰度)。

因此,不要使用imageArray.size,而是使用frame.width * frame.height作为大小。