我试图利用android应用程序中的ZXing扫描data matrixes。到目前为止,我在打印数据矩阵方面取得了成功,如this:
但其他激光打印或冲孔的数据矩阵,其标记均小于aa>而不是正方形。
circle-looking
这是个问题。我发现唯一能扫描这个的应用程序是。这个QRDroid说qrdroid使用zxing,所以我想如果他们可以的话,一定有办法。不幸的是qrdroid不是一个开源项目,所以我不知道怎么做。
当然,qrdroid有可能在试图读取数据矩阵之前,使用某种算法将带圆圈的标记转换为带平方的标记。我对Java中的图像处理一无所知,所以我无法想象这是如何实现的。
我的问题是是否有办法调整zxing来读取这种类型的数据矩阵,或者是否有任何库可以用来操作图像,使zxing可读。
编辑:
如果我使用图像编辑器-例如,我使用article并应用10的模糊,那么它看起来像一个正常的打印数据矩阵,我的扫描工作。我该如何在我的android应用程序中进行此操作?
https://www.befunky.com-
最佳答案
经过一些研究,我发现这种类型的标记并不是真正意义上的标准数据矩阵,而是被制造业称为DPM, which stands for "Direct Part Marking",尽管我读过other sources call it "Dot Peen Marking"或"Dot Peen Matrix"
我在已经存在的issue in the Zxing储存库上发布了同样的问题,这是我得到的答复:
问题是WhiteRectDetector
。它在代码中找到一个白色矩形,类似于this issue。如果你稍微旋转图像(比如10°),或者像你做的那样模糊它,或者你做了一个适当大小的像素放大,然后是一个侵蚀,你会得到一些应该(大部分)可以检测到的东西。
修改WhiteRectDetector
,允许点而不是方块不是我的选择,因为最后期限,所以我最终从Zxing切换到Scandit,这是proven to be able to scan this。
Scandit是一个专有库,但我还没有找到其他的选择。不过,你可以拿到试用许可证。对于那些想尝试扫描DPM的人来说,文档不太清楚如何启用此符号的扫描,所以这里有个诀窍。
在Android中:
settings.getSymbologySettings(Barcode.SYMBOLOGY_DATA_MATRIX)
.setExtensionEnabled("direct_part_marking_mode", true);
在目标C中:
[[settings settingsForSymbology:SBSSymbologyDatamatrix]
setExtension:@"direct_part_marking_mode" enabled:YES];