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 и:

  1. Удалите изображение с помощью маски 3х3.
  2. Возьмите автоматический 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/ читает его после моей предварительной обработки:

  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 / ш == М

Другие вопросы по тегам