如何从移动应用程序扫描 DPM 数据矩阵

Mig*_*g82 3 android image-processing zxing datamatrix

我正在尝试在 Android 应用程序中利用ZXing来扫描数据矩阵。到目前为止,我成功的印刷数据矩阵如

在此处输入图片说明

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

在此处输入图片说明

这些都存在问题。我发现唯一能够扫描这个的应用程序是QRDroid。这篇文章说QRDroid使用ZXing,所以我在想如果可以的话,一定有办法。不幸的是,QRDroid 不是一个开源项目,所以我不知道如何。

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

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

编辑:

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

在此处输入图片说明

Mig*_*g82 5

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

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

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

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

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

在安卓中:

settings.getSymbologySettings(Barcode.SYMBOLOGY_DATA_MATRIX)
.setExtensionEnabled("direct_part_marking_mode", true);
Run Code Online (Sandbox Code Playgroud)

在 Objective-C 中:

[[settings settingsForSymbology:SBSSymbologyDatamatrix] 
setExtension:@"direct_part_marking_mode" enabled:YES];
Run Code Online (Sandbox Code Playgroud)