3

我尝试使用 Zxing 来解码 Aztec 代码。

我使用来自SO answer的代码。这是其中的一部分:

public static String readQRCode(String filePath, String charset, Map hintMap)
        throws FileNotFoundException, IOException, NotFoundException {
    BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
            new BufferedImageLuminanceSource(
                    ImageIO.read(new FileInputStream(filePath)))));
    Result qrCodeResult = new MultiFormatReader().decode(binaryBitmap,
            hintMap);
    return qrCodeResult.getText();
}

我尝试通过上面的代码读取这些图像:

在此处输入图像描述

但这失败了:

Exception in thread "main" com.google.zxing.NotFoundException

我说 - 好吧,也许它的质量太低了 - 所以我服用了 GIMP 并且:

  1. 使用 3x3 掩码侵蚀图像。
  2. 采取自动 gimp 阈值处理(二值化图像)。

那个简单的预处理给了我这个:

在此处输入图像描述

也许它没有出色的品质,但它只是黑白 - 更好吗?不,我仍然获得:

Exception in thread "main" com.google.zxing.NotFoundException

奇怪的是:几乎所有条形码阅读器都可以毫无问题地读取两者。例如:NeoReader(Android - 手机)从笔记本电脑的屏幕上读取 - 正确!

我想补充一点,像这样来自 Wiki的绝对清晰的图像,可以被这段代码正确识别。

问题:

上面的代码有什么问题?

如何解码这个阿兹特克代码?我可以进行任何预处理,但需要哪些步骤?

请帮忙。

项目详情:Java 8、com.google.zxing:core:3.2.1、com.google.zxing:javase:3.2.1

4

1 回答 1

2

请不要使用 jpg 文件,因为您会丢失一些重要信息。使用无损压缩文件格式,如 bmp 或 png。

我仍然无法使用 zxing 阅读此代码,但另一个网页:http ://www.onlinebarcodereader.com/在我的预处理后读取它:

  1. 仅将图像裁剪到您的阿兹台克代码: 在此处输入图像描述
  2. 创建统一的点数组(83 行和 83 列)并围绕每个点制作小圆圈(中心 = 计算点,半径 = 4): 在此处输入图像描述
  3. 创建大小为 83x83 的矩阵,并将每个矩阵单元的值设置为相应圆圈中的图像平均值。结果: 在此处输入图像描述
  4. 使用简单阈值(如果值 < 114,则为 0,否则为 255)并将具有静区和模块大小的图像保存为 4:

在此处输入图像描述

我不知道为什么在线 zxing 阅读器不阅读此代码(可能有很多错误,您应该对上面的算法进行一些改进)。

预处理非常简单,因此您可以使用任何开源图像处理库,例如 OpenCV。(我用的是 Adaptive Vision Studio(精简版应该够用了))。

使用上面提到的在线阿兹台克阅读器,我收到:

mAMAAPZCAEEABr8yAjkAMX8KMAA1AP98AFAAUgBFAPtaAFkARA7/TgBUACAATd8ALgpTAL5UD1f3blIavVoOV+5OfFLXFklau0xeDndDAEFL3k8eQf06QQBMt38jd0kARH/fThpaAb1DHiDu/jBOwAauCi0K1gIzy43Oj9doLjY7SjQKwTFX2+ZVALtHCpZ2VAB8A8GTrzZSWHtqRB73VgBGor8yljgASHueRn63AjcANnuX25lnBv93/zgALW4rLfYDDg5TBV5LwQBPB3dG6rxOtlUdP6AeTO8CQRZJeypHSxseXi4qLvceLyKCLYvc89DaMfDnawc38+8wLjkMB247hjIHrw0AvQrXwSPXfyBSgjQ/Cqwwj7UaNe1uNSN9OQA3g0NhD70yN8Dv3SM4ADeDi7szNiZbLD8Wh2EXvU/uIO1HGkYPAjYHl7wyYjbokcNB1zYyw7hTO5ZNlsdDXt7TiiDhErx2GAF7ARjfMn8IVxsws3c1AkYvBje+NSNB8ANN6zPwBzj7izIj7zAT7TQAMANsOhJJJJJU/w==M

于 2015-09-20T09:56:39.523 回答