【问题标题】:Incorrect barcode read by Mobile Vision APIMobile Vision API 读取的条码不正确
【发布时间】:2017-05-11 14:34:00
【问题描述】:

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

示例条码:

当我将设备放在上方时,可以正常检测到此条形码,但是在任何小动作之后,很有可能得到错误的代码。

【问题讨论】:

  • 我正在使用 ZBar 库,有时我会扫描错误,但不像你提到的那样经常出现,所以值得一试。如果有人对此有解决方案,我也很感兴趣。
  • 我正在考虑切换到 ZBar 或 ZXing,但我真的不知道它是否会更好。有趣的是,iPhone 可以做得更好,几乎没有任何错误扫描。
  • 是的,我知道,同样的情况!我们正在 Android 和 iOS 上开发相同的应用程序,但在 Android 上很少出现错误扫描...希望有人可以帮助您解决问题!
  • 您找到任何解决方案了吗?事实上我也面临同样的问题。即使我改变了速度,增强了预览以获得更好的条形码图像,但仍然存在扫描 api 读取错误。看着丑闻,他们完美无瑕。那么他们是如何做到这一点的,以及为什么 google api 并没有那么好。 ???

标签: java android google-vision


【解决方案1】:

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

【讨论】:

  • 是的。可能是目前最好的方式。
  • 你在哪里找到了 BarcodeDetector 的实现,或者你能提供解决方案怎么做? @ŁukaszG
  • 我自己实现的,网上有很多免费教程。
【解决方案2】:

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

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

使用新方法更新 BarcodeUpdateListener 接口:

 @UiThread
 void onBarcodeConfirmed(Barcode barcode);

将此 sn-p 添加到覆盖的 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 来调整它。

【讨论】:

    【解决方案3】:

    到目前为止,我发现的最佳解决方案是将 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()
    

    是一种方法。

    【讨论】:

    • 嗯,我不认为这是要走的路。不同的手机可能有不同的帧率。此外,我在扫描所有其他条形码方面也取得了不错的成绩。但是其中一个条码即使是 UPC-A 也会产生问题。和所有其他人也属于同一种类。
    【解决方案4】:

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

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

    结论 - Mobile Vision API Barcode Scanner 确实集成了校验位逻辑。

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 1970-01-01
      • 2017-12-30
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 2023-03-09
      • 2018-07-30
      相关资源
      最近更新 更多