Zxing NotFoundException
Я пытаюсь использовать Zxing для декодирования ацтекского кода.
Я использую код из SO ответа. Вот часть этого:
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 и:
- Удалите изображение с помощью маски 3х3.
- Возьмите автоматический gimp thresholding (бинарное изображение).
Эта простая предварительная обработка дала мне это:
Может быть, оно не имеет замечательного качества, но оно просто черно-белое - лучше? Нет, я все еще получаю:
Exception in thread "main" com.google.zxing.NotFoundException
Что странно: почти все считыватели штрихкодов читают оба без проблем. Например: NeoReader (Android - мобильный телефон) читает оба с экрана ноутбука - правильно!
Я хочу добавить, что абсолютно четкие изображения, подобные этой, из Wiki, правильно распознаются этим кодом.
Вопрос:
Что не так с кодом выше?
Как расшифровать эти ацтекские коды? Я могу сделать любую предварительную обработку, но какие шаги требуются?
Пожалуйста помоги.
Детали проекта: Java 8, com.google.zxing: ядро:3.2.1, com.google.zxing:javase:3.2.1
1 ответ
Пожалуйста, не используйте файлы jpg, потому что вы теряете важную информацию. Используйте форматы сжатия без потерь, такие как BMP или PNG.
Я до сих пор не могу прочитать этот код с помощью zxing, но другая веб-страница: http://www.onlinebarcodereader.com/ читает его после моей предварительной обработки:
- Обрезать изображение только для вашего ацтекского кода:
- Создайте единый массив точек (83 строки и 83 столбца) и сделайте маленькие круги вокруг каждой точки (центр = вычисленная точка, радиус = 4):
- Создайте матрицу размером 83x83 и установите для каждой ячейки матрицы значение усреднения изображения в соответствующем круге. Результат:
- Используйте простое пороговое значение (если значение < 114, то 0, иначе 255) и сохраните такое изображение с тихой зоной и размером модуля как 4:
Я не знаю, почему читатель zxing онлайн не читает этот код (возможно, есть много ошибок, и вы должны немного улучшить алгоритм выше).
Предварительная обработка очень проста, поэтому вы можете использовать любую библиотеку обработки изображений с открытым исходным кодом, например OpenCV. (Я использовал Adaptive Vision Studio (облегченной версии должно быть достаточно)).
Используя онлайн-ридер ацтеков, упомянутый выше, я получаю:
mAMAAPZCAEEABr8yAjkAMX8KMAA1AP98AFAAUgBFAPtaAFkARA7 / TgBUACAATd8ALgpTAL5UD1f3blIavVoOV + 5OfFLXFklau0xeDndDAEFL3k8eQf06QQBMt38jd0kARH / fThpaAb1DHiDu / jBOwAauCi0K1gIzy43Oj9doLjY7SjQKwTFX2 + ZVALtHCpZ2VAB8A8GTrzZSWHtqRB73VgBGor8yljgASHueRn63AjcANnuX25lnBv93 / zgALW4rLfYDDg5TBV5LwQBPB3dG6rxOtlUdP6AeTO8CQRZJeypHSxseXi4qLvceLyKCLYvc89DaMfDnawc38 + 8wLjkMB247hjIHrw0AvQrXwSPXfyBSgjQ / Cqwwj7UaNe1uNSN9OQA3g0NhD70yN8Dv3SM4ADeDi7szNiZbLD8Wh2EXvU / uIO1HGkYPAjYHl7wyYjbokcNB1zYyw7hTO5ZNlsdDXt7TiiDhErx2GAF7ARjfMn8IVxsws3c1AkYvBje + NSNB8ANN6zPwBzj7izIj7zAT7TQAMANsOhJJJJJU / ш == М