Mobile Vision 读取的条码不正确 API

Incorrect barcode read by Mobile Vision API

最近我一直在做某种Android条形码扫描应用程序。一切都很好,直到我意识到我的朋友在 IOS 上制作的同一个应用程序在检测条形码方面要好得多。 Google Mobile Vision API 通常是错误的,当真正的条码是“12345...”时,它会检测到类似“72345...”的条码。这是一个普遍的问题吗?有什么解决办法吗?

条形码示例:

当我把我的设备放在上面时,这个条形码可以很好地检测到,但是在任何小的移动之后都有很大的机会得到错误的代码。

到目前为止我找到的最佳解决方案是将 cameraSource 的 FPS 设置为 15.0f。它会减慢预览速度,但结果会更可靠。但是,仍然不如 IPhone 的可靠。

样本来自 Google:

https://github.com/googlesamples/android-vision/blob/master/visionSamples/barcode-reader/app/src/main/java/com/google/android/gms/samples/vision/barcodereader/BarcodeCaptureActivity.java

.setRequestFps()

是一个方法去。

我发现不使用第一个匹配项而是应用简单的去抖动策略效果很好。例如,我仅在条形码出现在 3 个连续帧中后才考虑有效匹配。 这可以在内部使用 com.google.android.gms.vision.barcode.BarcodeDetector 的自定义 Detector<Barcode> 中轻松完成。 它稍微减慢了检测速度,但使它们更可靠。

对于任何想要基于 google 条码样本的快速解决方案的人。向 BarcodeGraphicTracker 添加三个字段:

String currentBarcode = null;
int confirmCounter = 0;
final static int CONFIRM_VALUE = 10;

使用新方法更新 BarcodeUpdateListener 接口:

 @UiThread
 void onBarcodeConfirmed(Barcode barcode);

将此代码段添加到覆盖的 onUpdate 方法中:

if (currentBarcode != null && currentBarcode.equals(item.displayValue)){
        confirmCounter++;
        if (confirmCounter >= CONFIRM_VALUE){
            confirmCounter = 0;
            mBarcodeUpdateListener.onBarcodeConfirmed(item);
        }
    }else{
        currentBarcode = item.displayValue;
        confirmCounter = 0;
    }
}

现在您可以通过将 fps 设置为相机源并更改 CONFIRM_VALUE.

来调整它

我的想法是通过评估条形码“校验位”(扫描代码中的最后一位数字)来提高扫描仪的可靠性。

最近我扫描了大约 500 个代码——主要是 EAN-13、EAN-8、UPC-A——它们都是有效的,它们有正确的校验位。至少有 20 个扫描不正确,结果是不同的代码 - 但仍然是有效的..

结论-移动视觉API条码扫描仪确实集成了校验位逻辑。