Mobile Vision 读取的条码不正确 API
Incorrect barcode read by Mobile Vision API
最近我一直在做某种Android条形码扫描应用程序。一切都很好,直到我意识到我的朋友在 IOS 上制作的同一个应用程序在检测条形码方面要好得多。 Google Mobile Vision API 通常是错误的,当真正的条码是“12345...”时,它会检测到类似“72345...”的条码。这是一个普遍的问题吗?有什么解决办法吗?
条形码示例:
当我把我的设备放在上面时,这个条形码可以很好地检测到,但是在任何小的移动之后都有很大的机会得到错误的代码。
到目前为止我找到的最佳解决方案是将 cameraSource 的 FPS 设置为 15.0f。它会减慢预览速度,但结果会更可靠。但是,仍然不如 IPhone 的可靠。
样本来自 Google:
.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条码扫描仪确实集成了校验位逻辑。
最近我一直在做某种Android条形码扫描应用程序。一切都很好,直到我意识到我的朋友在 IOS 上制作的同一个应用程序在检测条形码方面要好得多。 Google Mobile Vision API 通常是错误的,当真正的条码是“12345...”时,它会检测到类似“72345...”的条码。这是一个普遍的问题吗?有什么解决办法吗?
条形码示例:
当我把我的设备放在上面时,这个条形码可以很好地检测到,但是在任何小的移动之后都有很大的机会得到错误的代码。
到目前为止我找到的最佳解决方案是将 cameraSource 的 FPS 设置为 15.0f。它会减慢预览速度,但结果会更可靠。但是,仍然不如 IPhone 的可靠。
样本来自 Google:
.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条码扫描仪确实集成了校验位逻辑。