如何使用 CameraSource 检测需要颜色信息的自定义视觉代码

How to use CameraSource to detect custom visual code which need color information

我想使用 CameraSource 来检测一些视觉代码(不是任何一种条形码)。我实现了 Detector 及其 detect(Frame frame) 方法。但是,当我在 detect 方法中调用 frame.getBitmap() 时,它总是 returns null。我知道Frame有另一种方法,getGrayscaleImageData(),但是检测代码需要颜色信息。似乎CameraSource只将灰度图像数据传递给它的底层检测器。

那么,有没有办法通过 CameraSource 来检测此代码?还是放弃CameraSource另辟蹊径?

在当前版本中,CameraSource 实际上 return 从 getGrayscaleImageData 获取图像的完整颜色信息。 returned 的前导字节是图像的灰度层(Y 通道),但之后的字节具有颜色信息。格式详细信息取决于您在设置 CameraSource 时指定的图像格式(默认为 NV21 格式)。

找到了:D 此代码 return 彩色位图如此之快,但如果它是前置摄像头,您可能必须 flip/rotate 根据设备。

    public SparseArray detect(Frame frame) {
    byte[] bytes = frame.getGrayscaleImageData().array();
    YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, frame.getMetadata().getWidth(), frame.getMetadata().getHeight(), null);
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    yuvImage.compressToJpeg(new Rect(0, 0, frame.getMetadata().getWidth(), frame.getMetadata().getHeight()), 100, byteArrayOutputStream);
    byte[] jpegArray = byteArrayOutputStream.toByteArray();
    Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);//this bitmap is colored.
    return null; 
}