我正在尝试利用Android应用中的ZXing来扫描data matrixes。到目前为止,我已经成功使用了打印数据矩阵,例如this:
但是其他通过激光或打孔打印的数据矩阵有circle-looking个标记而不是方形标记。
这是一个问题。我发现能够扫描的唯一应用是QRDroid。这个article说QRDroid使用ZXing,所以我想如果可以的话,必须有办法。不幸的是QRDroid不是一个开源项目,所以我不知道如何。
当然,QRDroid有可能在尝试读取数据矩阵之前使用算法以某种方式将带圆圈的标记转换为平方标记。我对Java中的图像处理一无所知,所以我无法想象这是如何完成的。
我的问题是,是否有办法调整ZXing来读取这种类型的数据矩阵,或者是否有任何库可以用来操纵图像以使其可被ZXing读取。
修改
如果我使用图像编辑器-e.g.我使用https://www.befunky.com-并应用模糊10,然后它看起来像普通的打印数据矩阵,我的扫描工作。我应该如何在我的Android应用程序中执行此操作?
答案 0 :(得分:2)
经过一些研究,我发现这种标记实际上并没有被视为标准数据矩阵,而是被制造业称为DPM, which stands for "Direct Part Marking",尽管我已经读过other sources call it "Dot Peen Marking"或{ {3}}
我在一个已经存在的"Dot Peen Matrix"存储库中发布了相同的问题,这是我得到的答复:
问题是
WhiteRectDetector
。它在代码内找到一个白色矩形,类似于issue in the Zxing。如果稍微旋转图像(例如旋转10°),或者像平时那样模糊图像,或者对像素进行适当大小的扩张,然后进行腐蚀,则可以得到(大部分)可检测到的东西。
由于期限的限制,对WhiteRectDetector
进行修改以允许点而不是正方形对我来说并不是一个真正的选择,因此我最终从Zxing切换到this issue,即Scandit
Scandit是专有库,但是我还没有真正找到其他替代方法。不过,您可以获得试用许可证。对于那些想尝试扫描DPM的人,有关如何启用此符号体系扫描的文档尚不十分清楚,所以这就是窍门。
在Android中:
settings.getSymbologySettings(Barcode.SYMBOLOGY_DATA_MATRIX)
.setExtensionEnabled("direct_part_marking_mode", true);
在Objective-C中:
[[settings settingsForSymbology:SBSSymbologyDatamatrix]
setExtension:@"direct_part_marking_mode" enabled:YES];