Zxing NotFoundException
Zxing NotFoundException
我尝试使用 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 并且:
- 用 3x3 蒙版腐蚀图像。
- 采用自动 gimp 阈值处理(二值化图像)。
那个简单的 pre-processing 给了我这个:
也许它的质量不是很好,但它只是黑白的-更好吗?不,我仍然获得:
Exception in thread "main" com.google.zxing.NotFoundException
奇怪的是:几乎所有的条形码阅读器都可以毫无问题地读取这两者。例如:NeoReader(Android - 移动设备 phone)从笔记本电脑的屏幕上读取两者 - 正确!
我想补充一点,此代码可以正确识别像 this from Wiki 这样绝对清晰的图像。
问题:
上面的代码有什么问题?
如何解码这个 Aztec 代码?我可以做任何预处理,但需要哪些步骤?
请帮忙。
项目详情:Java8,com.google.zxing:core:3.2.1,com.google.zxing:javase:3.2.1
请不要使用jpg文件,因为你会丢失一些重要信息。使用无损压缩文件格式,如 bmp 或 png。
我仍然无法使用 zxing 读取此代码,但另一个网页:http://www.onlinebarcodereader.com/ 在我的预处理后读取它:
- 仅将图像裁剪为您的 aztec 代码:
- 创建统一的点数组(83 行和 83 列)并围绕每个点制作小圆圈(中心 = 计算点,半径 = 4):
- 创建大小为83x83的矩阵,并将每个矩阵单元格的值设置为对应圆圈内的图像平均值。结果:
- 使用简单阈值处理(如果值 < 114 则为 0,否则为 255)并保存静区和模块大小为 4 的图像:
不知道为什么网上zxing reader看不到这段代码(可能是错误太多,你应该改进一下上面的算法)。
预处理非常简单,因此您可以使用任何开源图像处理库,例如打开简历。 (我用的是Adaptive Vision Studio(精简版应该够了))。
使用上面提到的在线 aztec reader 我收到:
mAMAAPZCAEEABr8yAjkAMX8KMAA1AP98AFAAUgBFAPtaAFkARA7/TgBUACAATd8ALgpTAL5UD1f3blIavVoOV+5OfFLXFklau0xeDndDAEFL3k8eQf06QQBMt38jd0kARH/fThpaAb1DHiDu/jBOwAauCi0K1gIzy43Oj9doLjY7SjQKwTFX2+ZVALtHCpZ2VAB8A8GTrzZSWHtqRB73VgBGor8yljgASHueRn63AjcANnuX25lnBv93/zgALW4rLfYDDg5TBV5LwQBPB3dG6rxOtlUdP6AeTO8CQRZJeypHSxseXi4qLvceLyKCLYvc89DaMfDnawc38+8wLjkMB247hjIHrw0AvQrXwSPXfyBSgjQ/Cqwwj7UaNe1uNSN9OQA3g0NhD70yN8Dv3SM4ADeDi7szNiZbLD8Wh2EXvU/uIO1HGkYPAjYHl7wyYjbokcNB1zYyw7hTO5ZNlsdDXt7TiiDhErx2GAF7ARjfMn8IVxsws3c1AkYvBje+NSNB8ANN6zPwBzj7izIj7zAT7TQAMANsOhJJJJJU/w==M
我尝试使用 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 并且:
- 用 3x3 蒙版腐蚀图像。
- 采用自动 gimp 阈值处理(二值化图像)。
那个简单的 pre-processing 给了我这个:
也许它的质量不是很好,但它只是黑白的-更好吗?不,我仍然获得:
Exception in thread "main" com.google.zxing.NotFoundException
奇怪的是:几乎所有的条形码阅读器都可以毫无问题地读取这两者。例如:NeoReader(Android - 移动设备 phone)从笔记本电脑的屏幕上读取两者 - 正确!
我想补充一点,此代码可以正确识别像 this from Wiki 这样绝对清晰的图像。
问题:
上面的代码有什么问题?
如何解码这个 Aztec 代码?我可以做任何预处理,但需要哪些步骤?
请帮忙。
项目详情:Java8,com.google.zxing:core:3.2.1,com.google.zxing:javase:3.2.1
请不要使用jpg文件,因为你会丢失一些重要信息。使用无损压缩文件格式,如 bmp 或 png。
我仍然无法使用 zxing 读取此代码,但另一个网页:http://www.onlinebarcodereader.com/ 在我的预处理后读取它:
- 仅将图像裁剪为您的 aztec 代码:
- 创建统一的点数组(83 行和 83 列)并围绕每个点制作小圆圈(中心 = 计算点,半径 = 4):
- 创建大小为83x83的矩阵,并将每个矩阵单元格的值设置为对应圆圈内的图像平均值。结果:
- 使用简单阈值处理(如果值 < 114 则为 0,否则为 255)并保存静区和模块大小为 4 的图像:
不知道为什么网上zxing reader看不到这段代码(可能是错误太多,你应该改进一下上面的算法)。
预处理非常简单,因此您可以使用任何开源图像处理库,例如打开简历。 (我用的是Adaptive Vision Studio(精简版应该够了))。
使用上面提到的在线 aztec reader 我收到:
mAMAAPZCAEEABr8yAjkAMX8KMAA1AP98AFAAUgBFAPtaAFkARA7/TgBUACAATd8ALgpTAL5UD1f3blIavVoOV+5OfFLXFklau0xeDndDAEFL3k8eQf06QQBMt38jd0kARH/fThpaAb1DHiDu/jBOwAauCi0K1gIzy43Oj9doLjY7SjQKwTFX2+ZVALtHCpZ2VAB8A8GTrzZSWHtqRB73VgBGor8yljgASHueRn63AjcANnuX25lnBv93/zgALW4rLfYDDg5TBV5LwQBPB3dG6rxOtlUdP6AeTO8CQRZJeypHSxseXi4qLvceLyKCLYvc89DaMfDnawc38+8wLjkMB247hjIHrw0AvQrXwSPXfyBSgjQ/Cqwwj7UaNe1uNSN9OQA3g0NhD70yN8Dv3SM4ADeDi7szNiZbLD8Wh2EXvU/uIO1HGkYPAjYHl7wyYjbokcNB1zYyw7hTO5ZNlsdDXt7TiiDhErx2GAF7ARjfMn8IVxsws3c1AkYvBje+NSNB8ANN6zPwBzj7izIj7zAT7TQAMANsOhJJJJJU/w==M