3

我正在尝试在 Android 应用程序中利用ZXing来扫描数据矩阵。到目前为止,我在打印数据矩阵方面取得了成功,例如

在此处输入图像描述

但其他通过激光打印或打孔的数据矩阵具有圆形标记,而不是方形标记。

在此处输入图像描述

这些提出了一个问题。我发现唯一能够扫描这个的应用程序是QRDroid。这篇文章说QRDroid使用ZXing,所以我想如果他们可以,一定有办法。不幸的是 QRDroid 不是一个开源项目,所以我不知道怎么做。

当然,QRDroid 有可能在尝试读取数据矩阵之前使用一种算法以某种方式将带圆圈的标记转换为平方标记。我对Java中的图像处理一无所知,所以我无法想象这是如何完成的。

我的问题是是否有办法调整 ZXing 以读取这种类型的数据矩阵,或者是否有任何库可以用来操作图像以使其被 ZXing 读取。

编辑:

如果我使用图像编辑器 - 例如,我使用了https://www.befunky.com-并应用了 10 的模糊,那么它看起来就像一个正常的打印数据矩阵并且我的扫描工作正常。我应该如何在我的 Android 应用程序中执行此操作?

在此处输入图像描述

4

1 回答 1

6

经过一些研究,我发现这种类型的标记并不是真正被认为是标准数据矩阵,而是被制造业称为DPM,它代表“直接零件标记”,尽管我读过其他来源称之为“点针标记”“点针矩阵”

我在 Zxing存储库中的一个已经存在的问题上发布了同样的问题,这是我得到的答复:

问题是WhiteRectDetector. 它在代码中找到一个白色矩形,类似于这个问题。如果您稍微旋转图像(例如 10°),或者像以前一样模糊它,或者您进行了适当大小的像素膨胀然后腐蚀,您会得到应该(大部分)可以检测到的东西。

由于截止日期,修改WhiteRectDetector, 以允许使用点而不是正方形对我来说并不是一个真正的选择,所以我最终从 Zxing 切换到Scandit事实证明它可以扫描这个.

Scandit 是一个专有库,但我还没有真正找到任何其他替代方案。不过,您可以获得试用许可证。对于那些想要尝试扫描 DPM 的人来说,文档对于如何启用此符号系统的扫描不是很清楚,所以这里是诀窍。

在安卓中:

settings.getSymbologySettings(Barcode.SYMBOLOGY_DATA_MATRIX)
.setExtensionEnabled("direct_part_marking_mode", true);

在 Objective-C 中:

[[settings settingsForSymbology:SBSSymbologyDatamatrix] 
setExtension:@"direct_part_marking_mode" enabled:YES];
于 2018-08-16T08:28:36.003 回答