zxing.net二维码解码的优化

3

我在使用.NET平台上的zxing工具包取得了很大的成功,现在我想尽可能地提高解码QR条形码的速度(因为我有1.8M个要处理)。我正在使用以下代码:

// Create Barcode decoder
BarcodeReader q = new BarcodeReader();
q.PossibleFormats = new List<BarcodeFormat>();
q.PossibleFormats.Add(BarcodeFormat.QR_CODE);
q.AutoRotate = true; // Not necessary for QR?
q.TryHarder = false;

// Decode result
Result[] r = q.DecodeMultiple(imageFile);

我的代码比较聪明,它在循环中运行,如果一次没有找到,就会更加努力地尝试。
有没有办法添加区域、ROI或者较小的区域以加快检测速度呢?
还有其他推荐来提高性能吗?
1个回答

5
ZXing.Net对于QR代码的最快方式如下:
// Create Barcode decoder
BarcodeReader q = new BarcodeReader();
q.PossibleFormats = new List<BarcodeFormat>();
q.PossibleFormats.Add(BarcodeFormat.QR_CODE);
q.AutoRotate = false;
q.TryHarder = false;

// Decode result
Result r = q.Decode(imageFile);

但它只解码找到的第一个QR码。 如果不需要,请避免使用DecodeMultiple。 除非确实需要,否则不应使用所有其他选项。 AutoRotate对QR码解码不是必须的。
如果您的图像非常大,请在解码之前将其缩小。 对于大多数情况,没有必要使用分辨率大于1000像素的图像。 唯一的例外是非常小的QR码。
另一个很好的优化是使用提供灰度图像的图像源。 从RGB图像计算亮度值需要大量CPU周期。最快的选项是8位灰度图像。

1
好的。我正在处理双色图像,因此没有RGB。有没有办法让zxing.net限制它查找的区域,而不是创建一个新位图来实现这个昂贵的选项? - Paul Bartlett
是的,您可以使用位于...LuminanceSource类上的裁剪方法。这种方式最适合当前存储库主干中的源,因为有一个Decode方法直接使用...LuminanceSource实例。对于当前版本0.11的ZXing.Net,您必须使用BarcodeReader和自己的CreateLuminanceSource委托。 - Michael
为什么您建议避免使用DecodeMultiple?我正在一个需要在一张图片中扫描多个QR码的项目中工作。 - Ray
我写了“如果不需要它就避免使用它”。如果在您的用例中需要它,则可以使用它。这没问题。但是每个东西都会对性能产生影响。 - Michael
这种技术似乎已经过时了。 - Be Kind To New Users

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