Просто для начала, спасибо за то, что сделали ZXing свободно доступным.
Я работаю в области штрих-кодов с 98 года и имею немалый опыт декодирования штрих-кодов из изображений.
Сейчас я консультируюсь с одним из моих продуктов в программе, которая тестирует декодеры штрих-кода. Это чрезвычайно интенсивный процессорный тест, в котором буквально миллионы изображений тестируются по символам. Я тестирую с разной степенью размытия, разными углами, разной яркостью и контрастностью, разными размерами (пикселей на модуль), кривизной, искажением перспективы, пульсацией, разной освещенностью … весь шебанг. Я тестирую реализацию C ++ на компьютере с Linux.
Я столкнулся с несколькими проблемами, которые могут заинтересовать разработчиков:
1) Ацтек имеет ошибку, которая иногда вылетает. В AztecDecoder.cpp в Decoder :: correctBits иногда numECCCodewords принимает отрицательное значение. После этого случаются плохие вещи. Я смог выполнить патч с помощью простого теста и «броска», чтобы завершить тестирование.
2) У Aztec огромная утечка памяти. В кратчайшие сроки моя программа занимает более 1 ГБ ОЗУ, и с течением времени это число постоянно увеличивается. Достаточно плохо, что ОС начинает зависать и через некоторое время перезагружается. У меня, похоже, нет этой проблемы с другими символами.
3) Вы не делаете номер версии доступным в коде. Я знаю, вы должны следить за тем, какую версию вы скачали. Жизнь не всегда такая, иногда вы наследуете код, и вы не имеете ничего общего с его загрузкой. Даже простого #define в заголовочном файле будет достаточно. Мне нравится отображать номер версии декодера в моей тестовой программе. Я получаю это значение напрямую от декодера, поэтому при обновлении декодеров сообщаемая версия автоматически изменяется. Просто приятно иметь.
4) Ацтек очень слабый. Я знаю, это только альфа, но вряд ли когда-нибудь расшифрует. Я не собираюсь выбирать ацтеков, но это дало мне больше всего проблем.
5) Весь код UPC очень часто неправильно (возвращает неверную информацию для правильно закодированного штрих-кода). Вы можете поставить некоторую защиту там. МФТ тоже неплохо справляется. Все известные слабости.
6) Ацтек также неправильно кодирует. Этого никогда не должно случиться с системой исправления ошибок Рида-Соломона. Я еще не нашел время, чтобы разобраться в этом.
Это были основные проблемы, теперь для комментариев:
1) Отсутствует поддержка штрих-кодов под углами (всенаправленное декодирование). Это поддерживается всеми основными коммерческими пакетами.
2) Декодирование кажется слабым с точки зрения обработки размытия и низкого количества пикселей на модуль. Да, я понимаю, что это бесплатный пакет, но просто констатирую слабые места.
Это обо всем, что я нашел сейчас. Я обновлю, когда у меня будет больше информации.
Задача ещё не решена.
Других решений пока нет …