移动视觉API读取条形码错误。

5

最近我一直在开发一款Android条形码扫描应用。所有东西都很好,直到我意识到我的朋友在IOS上制作的同样的应用程序在检测条形码方面要好得多。Google Mobile Vision API经常出错,它检测到像“72345 ...”这样的条形码时,实际上真正的条形码是“12345 ...”。这是一个普遍的问题吗?有没有解决方案?

样本条形码: enter image description here

当我将设备保持在上方时,可以很好地检测到此条形码,但是在移动任何小部分后,存在获取不正确代码的大机会。


我正在使用ZBar库,有时会出现错误的扫描,但并不像你所说的那么频繁,所以值得一试。如果有人对此有解决方案,我也非常感兴趣。 - Johny
我正在考虑转换到ZBar或ZXing,但我真的不知道它是否会更好。有趣的是,IPhone能够做得更好,几乎没有任何错误的扫描。 - ŁukaszG
是的,我知道,我也遇到了同样的情况!我们正在开发Android和iOS上的同一款应用程序,但在Android上有几次错误的扫描...希望有人能够回答你的问题! - Johny
你找到任何解决方案了吗?事实上,我也遇到了同样的问题。尽管我已经改变了速度,增强了预览以获得更好的条形码图像,但扫描API仍然存在错误读取。看着Scandit,他们是无瑕疵的。那么他们是如何做到这一点的,为什么Google API不是更好呢???? - A.s.ALI
4个回答

6

我发现不使用第一个匹配项,而是采用简单的防抖策略效果非常好。例如,在连续出现3帧条形码后才考虑有效匹配。 可以在自定义Detector<Barcode>中轻松实现,内部使用com.google.android.gms.vision.barcode.BarcodeDetector。 这会稍微降低检测速度,但会使其更可靠。


真的。现在可能是最好的选择。 - ŁukaszG
你在哪里找到了BarcodeDetector的实现,或者你能提供如何实现它的解决方案吗?@ŁukaszG - rule
我已经自己实现了,网上有很多免费的教程可供参考。 - ŁukaszG

1

对于想要基于谷歌条形码示例的快速解决方案的任何人。在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来进行调整。

0
我的想法是通过评估扫描代码中的“校验位”——即扫描代码中的最后一位数字,来提高扫描仪的可靠性。
最近我扫描了大约500个代码,其中大部分是EAN-13、EAN-8和UPC-A,它们都是有效的,都有正确的校验位。其中至少有20个没有被正确扫描,结果是不同的代码,但仍然是有效的。
结论——Mobile Vision API条形码扫描器确实集成了校验位逻辑。

0

我不认为这是正确的方法。不同的手机可能有不同的帧率。此外,我在扫描所有其他条形码方面都取得了良好的结果。但是其中一个条形码尽管是UPC-A,仍然存在问题。而且所有其他条形码也是同一种类型。 - A.s.ALI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接