Как читать штрих-коды Long Code 39 с помощью Zxing?

В моем приложении я использую библиотеку Zxing для декодирования штрих-кодов. Целевыми устройствами являются Motorola Xoom и Samsung. Компания, для которой я разрабатываю это приложение, использует Code 39 штрих-коды для своих продуктов.

Zxing отлично декодирует короткие штрих-коды, но когда я пытаюсь декодировать длинные штрих-коды «Code 39», он продолжает попытки, но не дает результата. Для очистки изображения я увеличил площадь прямоугольника сканирования, что оказалось успешным для Samsung, но не для Motorola. Есть ли способ заставить его работать на Motorola? Любая обратная связь будет высоко оценена.


person Abdul Rehman    schedule 16.11.2011    source источник


Ответы (1)


Часто проблема заключается в разнице в минимальном фокусном расстоянии. То есть, если устройство Motorola не может сфокусироваться так близко, то расширение прямоугольника может заставить пользователя держать штрих-код так близко, что он будет слишком близко к фокусу. Я бы посмотрел на это в первую очередь.

В противном случае вы хотите улучшить обработку изображений для этого случая. Проблема в том, что приложение выполняет простую пороговую обработку, которая хорошо работает в обычных случаях. Он падает, когда у вас есть плотные одномерные штрих-коды, ширина полосы которых приближается к 1 пикселю. Поскольку каждый пиксель либо черный, либо белый, вы пропорционально теряете много деталей о том, где именно находятся полосы.

Если это действительно проблема, вы можете переписать свое приложение, чтобы использовать захват с камеры в полном разрешении вместо предварительного просмотра. В обычных случаях большее разрешение не помогает; в этих случаях может. Таким образом, вы не сможете иметь приложение непрерывного сканирования.

Я один из разработчиков сканера штрих-кода и поддерживаю (платную) расширенную версию под названием Сканер штрих-кода+. Он имеет другой алгоритм обработки изображений, который находит границы в субпиксельном разрешении, что лучше работает для таких кодов. Возможно, вы захотите посмотреть, как это работает, и если это работает хорошо, по крайней мере, это подскажет вам, какой подход работает лучше. Я не могу выслать вам этот код, но могу описать, что он делает, если вы хотите исследовать такую ​​обработку изображений.

person Sean Owen    schedule 16.11.2011
comment
Привет Шон, Спасибо за такой подробный ответ. Если это действительно проблема, вы могли бы переписать свое приложение, чтобы использовать снимок с камеры в полном разрешении вместо предварительного просмотра. В результате я получаю следующее: вы хотите, чтобы я отсканировал штрих-код. использование полного предварительного просмотра камеры вместо использования прямоугольника сканирования заданной высоты и ширины. Если это так, то я тоже пробовал. Но и это не сработало в случае с Motorola. Кроме того, я не могу перейти на какое-либо другое решение для чтения штрих-кода, так как прототип уже выпущен, и я не могу изменить его сейчас, а могу только улучшить. - person Abdul Rehman; 17.11.2011
comment
Нет, я имею в виду использование API для захвата изображения, которое имеет в 100 раз больше пикселей, чем превью. Я не знаю, будет ли это иметь значение. Это совершенно другое — например, вы не можете создать приложение непрерывного сканирования таким образом. Это будет модель «наведи-сними-сканируй», как Goggles. - person Sean Owen; 17.11.2011
comment
У меня такая же проблема. В частности, мне нужно прочитать номер VIN. Я безуспешно увеличил ширину прямоугольника сканирования. Я уменьшил высоту сканирования, надеясь, что меньше пикселей = больше обработки. Я также попытался вызвать InitiateScan() и передать коллекцию синглетонов, содержащую CODE_39, чтобы приложению не пришлось выяснять, что я прошу его сканировать. Кто-нибудь внес эти изменения в ZXing, чтобы использовать сканирование с полным разрешением? - person Paul; 09.07.2012
comment
Я пытался изменить размер прямоугольника сканирования, но, честно говоря, понятия не имел о функции InitiateScan(). Решение, которое я принял позже, заключалось в реализации событий, предоставляемых onTouchEvent(). Это немного помогло, так как пользователь смог изменить размер прямоугольника сканирования и настроить его таким образом, чтобы пиксели области сканирования можно было сделать менее шумными и, следовательно, можно было получить результат. Изменение размера прямоугольника во время выполнения увеличивает вероятность успешного считывания штрих-кода, возможно, после попытки 2 или 3 разных разрешений, чем попытка с тем же разрешением и ожидание в течение нескольких минут. - person Abdul Rehman; 10.07.2012