【问题标题】:How to read Long "Code 39" barcodes with "Zxing"?如何用“Zxing”读取长“Code 39”条码?
【发布时间】:2011-11-16 07:27:39
【问题描述】:

在我的应用程序中,我使用Zxing 库来解码条形码。 “Motorola Xoom”和“Samsung”是目标设备。我正在为其开发此应用程序的公司为其产品使用Code 39 条形码。

Zxing 可以很好地解码短条形码,但是当我尝试解码冗长的“Code 39”条形码时,它会继续尝试但没有产生任何结果。对于图像清除,我增加了扫描矩形区域,这对三星来说是成功的,但对摩托罗拉来说却不是。有什么方法可以让它为摩托罗拉工作吗?任何反馈将不胜感激。

【问题讨论】:

    标签: android barcode zxing code39


    【解决方案1】:

    问题通常是最小焦距的差异。也就是说,如果摩托罗拉设备不能聚焦得那么近,那么加宽矩形可能会使用户将条形码握得太近以至于太近而无法聚焦。我会先看看这个。

    否则,您正在考虑改进这种情况下的图像处理。挑战在于该应用程序执行简单的阈值处理,这在常见情况下运行良好。当你有密集的一维条码,其条宽接近 1 像素时,它会下降。由于每个像素都是黑色或白色,因此您会按比例丢失很多关于条形确切位置的详细信息。

    如果这确实是问题所在,您可以考虑重写您的应用以使用来自相机的全分辨率捕获,而不是预览。在正常情况下,更高的分辨率无济于事。在这些情况下,它可能会。以这种方式您将无法拥有连续扫描应用程序。

    我是 Barcode Scanner 开发人员之一,并维护一个名为 Barcode Scanner+ 的(付费)增强版本。它有一种不同的图像处理算法,可以在亚像素分辨率下找到边界,这对于这样的代码效果更好。你可能想看看它是怎么做的——如果效果很好,至少它会告诉你哪种方法效果更好。如果您想研究这种图像处理,我无法向您发送该代码,但可以描述它的作用。

    【讨论】:

    • 嗨,肖恩,感谢您提供如此详细的回复。 如果这确实是问题,您可以考虑重写您的应用程序以使用来自相机的全分辨率捕获,而不是预览。 我从中得到的是,您希望我扫描 条形码 使用完整的相机预览,而不是使用指定高度和宽度的扫描矩形。如果是这样,我也试过了。但这在摩托罗拉的情况下也不起作用。此外,由于原型已经发布,我现在无法更改它,只能增强它。
    • 不,我的意思是使用 API 捕获图片,其像素比预览多 100 倍。我不知道这是否会有所作为。这是完全不同的——例如,您不能以这种方式制作连续扫描应用程序。这将是一个点拍扫描模型,如 Goggles。
    • 我也有同样的问题。具体来说,我需要读取一个 VIN 号码。我没有运气就增加了扫描矩形宽度。我缩小了扫描高度,希望更少的像素=更多的处理。我还尝试调用 InitiateScan() 并传入一个包含 CODE_39 的单例集合,这样应用程序就不必弄清楚我要求它扫描什么。是否有人对 ZXing 进行了这些修改以使其使用全分辨率扫描?
    • 我已经尝试过调整扫描矩形的大小,但坦率地说不知道函数 InitiateScan()。我后来采用的解决方案是实现 onTouchEvent() 提供的事件。这有点帮助,因为用户能够调整扫描矩形的大小并以一种可以使扫描区域像素的噪声降低并因此可以检索结果的方式对其进行调整。在运行中更改矩形大小会增加成功读取条形码的可能性,可能是在尝试 2 或 3 种不同的分辨率之后,而不是尝试相同的分辨率并等待几分钟。
    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多