使用Vision API扫描反转颜色的QRcode

时间:2017-11-14 10:46:36

标签: android google-play-services qr-code vision

经过几个小时的努力,让我的应用程序检测到这个QRCode:original QRCode

我意识到问题出在QRCode外观上。反转颜色后,检测工作正常。inverted QRCode

有没有办法让Vision API检测到第一个QRCode?我尝试启用所有符号系统,但它不起作用。我想这是可能的,因为应用QR Code Reader会检测到它。

2 个答案:

答案 0 :(得分:3)

我改进了googles示例应用程序“条形码阅读器”来检测倒置的彩色条形码和常规条形码。

这是googles示例app的链接:

https://github.com/googlesamples/android-vision/tree/master/visionSamples/barcode-reader

我是通过编辑“CameraSource”类来完成的, 包裹:"com.google.android.gms.samples.vision.barcodereader.ui.camera"

我添加了一个参数:private boolean isInverted = false;

并更改了函数void setNextFrame(byte[] data, Camera camera)

void setNextFrame(byte[] data, Camera camera) {
            synchronized (mLock) {
                if (mPendingFrameData != null) {
                    camera.addCallbackBuffer(mPendingFrameData.array());
                    mPendingFrameData = null;
                }

                if (!mBytesToByteBuffer.containsKey(data)) {
                    Log.d(TAG,
                            "Skipping frame.  Could not find ByteBuffer associated with the image " +
                                    "data from the camera.");
                    return;
                }

                mPendingTimeMillis = SystemClock.elapsedRealtime() - mStartTimeMillis;
                mPendingFrameId++;
                if (!isInverted){
                    for (int y = 0; y < data.length; y++) {
                        data[y] = (byte) ~data[y];
                    }
                    isInverted = true;
                } else {
                    isInverted = false;
                }
                mPendingFrameData = mBytesToByteBuffer.get(data);

                // Notify the processor thread if it is waiting on the next frame (see below).
                mLock.notifyAll();
            }
        }

答案 1 :(得分:1)

我认为这仍是一个悬而未决的问题,请参阅link了解详情。正如开发人员所说的一种解决方法:

  

对,条形码API通常不支持颜色反转代码。目前没有参数或选项来控制它。虽然有些API支持它们,但我认为这不是一个常见的功能。

     

对于变通方法,您可以在将位图中的颜色传递给条形码API之前对其进行预处理(可能会在备用帧上反转颜色)。

希望这有帮助。