最近我一直在做某种Android条码扫描应用。一切都很好,直到我意识到我的朋友在IOS上制作的相同应用程序在检测条形码方面要好得多。 Google Mobile Vision API经常出错,当真正的条形码为“12345 ...”时,它会检测到“72345 ....”等条形码。这是一般问题吗?有没有解决方案?
当我将设备放在上面时,此条形码被检测到正常,但是在任何小动作之后很可能会得到错误的代码。
答案 0 :(得分:3)
我发现不使用第一场比赛,但应用简单的去抖策略非常有效。例如,在3个连续帧中出现条形码后,我只考虑有效匹配。
这可以在内部使用Detector<Barcode>
的自定义com.google.android.gms.vision.barcode.BarcodeDetector
中轻松完成。
它减慢了检测速度,但使它们更可靠。
答案 1 :(得分:1)
对于任何想要基于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来对其进行调整。
答案 2 :(得分:0)
到目前为止,我发现的最佳解决方案是将cameraSource的FPS设置为15.0f。它会减慢预览速度,但结果会更可靠。然而,仍然不如iPhone的可靠性。
来自Google的示例:
.setRequestFps()
是一种方法。