Считывание штриховых кодов

Материал из Техническое зрение
Перейти к: навигация, поиск

Содержание

Задача обнаружения и считывания штриховых кодов на изображениях.

Штриховые коды - самый распространенный на сегодняшний день тип символьных идентификаторов товаров и других предметов, предназначенных для автоматического считывания. Автоматически считываемые идентификаторы необходимы для эффективного функционирования систем автоматизированного складского учета, автоматизированных систем, используемых в торговле, автоматизированных систем контроля и инспекции на производстве. Вы, несомненно, неоднократно сталкивались со считывателями штриховых кодов в магазинах и супермаркетах, где специализированные лазерные считыватели у касс успешно считывают штриховые коды EAN, используемые в торговле для идентификации товаров. Такие считыватели с лазерной подсветкой по сути анализируют не изображение, а линейный профиль вдоль одной подсвеченной линии (подобный пример мы рассматривали в разделе 3.2). Однако и в торговле, и на производстве в последние годы все чаще используются не только линейные считыватели, но и двумерные считыватели на основе CCD матриц, а также программное обеспечение для офисных и промышленных компьютеров, изображения в которые вводятся при помощи сканеров и видеокамер. Эта тенденция определяется следующими основными причинами:

1) Штриховые коды в настоящее время бывают не только традиционного линейного типа (прямоугольная область, заполненная вертикальными черными и белыми штрихами различной толщины). В последние десятилетия получили широкое распространение и так называемые двумерные коды, которые позволяют на той же площади разместить существенно больше информации, причем информация в них распределена таким образом, что ее нельзя прочитать, просканировав только одну линию (см. ниже описание нескольких основных типов двумерных кодов). Например, микросхемы на компьютерном производстве в настоящее время, как правило, помечают двумерным штриховым кодом Data Matrix. Для считывания двумерных кодов необходимы считыватели, получающие и анализирующие двумерные изображения.

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

3) В автоматизированных системах, включающих человека, попадание сканирующей линии на штриховой код обеспечивает оператор (например, кассир в супермаркете). В полностью автоматических системах (например, при считывании штриховых кодов на изделиях, движущихся по конвейеру) возникает задача автоматического обнаружения заранее не известного местоположения штрихового кода, его размера, типа и ориентации (угла наклона). Эта задача также может быть решена только средствами анализа двумерного изображения.

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

Одномерные штриховые коды.

В настоящее время существует около $200$ видов штриховых символик $\textit{линейных}$, или $\textit{одномерных}$, кодов. Самые популярные штриховые коды носят следующие: Codabar; "interleaved 2 of 5"; код 39; код 93; код 128; UPC-E; EAN-8; EAN-13.

Рассмотрим штриховые коды, получившие наиболее широкое распространение.

Штриховой код Codabar

Дискретный, семиэлементный штриховой код, содержащий цифры $0\ldots 9$, знаки "+", " - ", ":", "/", ".", знак доллара и четыре строба СТАРТ/СТОП. Буквы штрихового кода Codabar ограничены слева и справа. Изображение буквы состоит из четырех штрихов и трех пробелов. В специальных знаках три широких штриха, а в стробах СТАРТ/СТОП - два широких пробела и один широкий штрих (рис. 5 ).

Штриховой код 2 of 5.

Буквы кода, обозначающие цифры от 0 до 9, содержат пять штрихов, два из которых широкие, а три - узкие. Пятый штрих изображения буква - дополнительный, для контроля по четности. Помимо цифр, данный код имеет стробы СТАРТ и СТОП, в изображении которых используются всего три штриха, два из них - широкие. Существует разновидность кода "2 of 5", в которой используется прямое и инвертированное изображение буква. Пространство между штрихами заполняется разновеликими пробелами, которые также являются носителями информации. Такой код получил название "interleaved 2 of 5". Буквы, находящиеся на нечетных позициях, представляются штрихами, а на четных позициях - пробелами.

Код "2 of 5" является дискретным и самопроверяющимся, то есть одиночные ошибки считывания обнаруживаются автоматически. Недостатком кода "2 of 5" является относительно низкая плотность штрихов и пробелов и отсутствие возможности кодирования алфавитной информации (рис. 6 ). Этот код за рубежом используется для сортировки и учета товаров и изделий на складах, нумерации авиабилетов и т. п.

7-2-5.jpg

Штриховой код Codabar

7-2-6.jpg

Штриховой код "2 of 5"

Штриховой код $39$.

Наименование данного кода связано со структурой изображения букв "3 из 9", где три элемента буквы (два штриха и один пробел) из девяти являются широкими, а остальные шесть - узкими. Каждая буква кода $39$ представлена пятью штрихами и четырьмя пробелами. По сравнению с кодом $2$ of $5$ число вариантов изображения буква увеличивается в четыре раза и позволяет отобразить $40$ различных букв. Предусмотрены четыре дополнительных знака (${\$}$, ", +, ${\%}$). Код 39 является дискретным, контролируемым. Достоинством этого кода является его очень высокая надежность, которая может быть увеличена добавлением в символ контрольной буквы (рис. 7 ). Этот код широко используется в больницах, библиотеках, государственных учреждениях, на производстве.

7-2-7.jpg

Штриховой код $39$

7-2-8.jpg

Штриховой код $128$


Штриховой код $128$

Обеспечивает возможность кодирования $128$ различных букв. Код $128$ принадлежит к той же группе, что и рассматриваемые далее коды EAN и UPC. В коде $128$ первый элемент изображаемой буквы представляется штрихом, а последний - пробелом. Код $128$ является непрерывным и неконтролируемым кодом (рис. 8 ). Предусматривается кодирование $107$ различных букв (21 буква в резерве).



Штриховые коды UPC и EAN

Получили наиболее широкое распространение для кодирования товаров в производстве и торговле. Первый из них представляет стандарт кодирования, принятый в США, второй - в Европе. Сходство кодов UPC и EAN заключается в том, что в них используется для кодирования один и тот же набор букв: цифры от 0 до 9 и пять вспомогательных символов. Изображение буквы содержит два штриха и два пробела. Длина буквы, отображающей цифру, равна 7 модулям. Вспомогательные буквы имеют три типоразмера - 3, 5 и 6 модулей (рис. 9 ). Обычно снизу штрихового кода печатается его цифровое значение для визуального контроля. Значение тринадцатой позиции символа определяется последовательностью сочетаний букв четного и нечетного паритетов, расположенных в левой части. Наибольшее распространение в торговле за рубежом получили тринадцати- и восьмиразрядные коды EAN. Эти штриховые коды относятся к непрерывным, контролируемым кодам.


7-2-9.jpg

Символ штрихового кода EAN



Символики сокращенной размерности (Reduced Space} {Symbology}, или RSS)

Относительно новое семейство линейных штриховых кодов, характеризующееся малыми размерами штрихового кода (рис. 10 - 13 ) по сравнению с кодами EAN/UPC. Код RSS предназначен специально для совместного использования с так называемыми $\textit{композитными}$ штриховыми кодами. Разработка RSS и композитной символики вызвана необходимостью маркировки малоразмерных объектов, на которые штриховой код EAN/UPC стандартного размера нанести затруднительно, а иногда и вовсе невозможно.

7-2-10.jpg

Штриховой код сокращенной размерности RSS-14

7-2-11.jpg

Штриховой код сокращенной размерности - многострочный RSS-14

7-2-12.jpg

Штриховой код сокращенной размерности - усеченный RSS

7-2-13.jpg

Штриховой код сокращенной размерности - расширенный многострочный RSS

Двумерные штриховые коды.

Линейные штриховые коды были созданы и традиционно использовались как машиночитаемые идентификаторы на изделиях. При этом каждая этикетка содержала уникальный серийный номер, закодированный в виде черных и белых полос, который служил ключом в базе данных, содержащей более детальную информацию. Но вскоре выяснилось, что многие пользователи нуждаются в более емких штриховых кодах, самостоятельно выполняющих роль портативной базы данных, а не только ключа в ней. $\textit{Двумерный код (или 2D-код)}$ - наиболее общее наименование для всего этого класса символик. Названия $\textit{стековая символика}$ $\textit{(stacked symbology) }$или $\textit{многорядный код (multi-row code) }$более точно отражают сущность серии кодов, в которых данные кодируются в виде нескольких строчек обычных одномерных штриховых кодов. Название $\textit{матричный код}$ (Matrix code) применяется для обозначения двумерных кодов, основанных на расположении черных элементов внутри матрицы. Каждый черный элемент имеет одинаковый размер, а позиция элемента кодирует данные.

Линейный штриховой код имеет "вертикальную избыточность", означающую, что одна и та же информация повторяется по вертикали. Вертикальная избыточность позволяет штриховому коду, имеющему дефекты печати (например, пятна или просветы) сохранять читаемость. Двумерный код содержит информацию как по горизонтали, так и по вертикали. Поскольку оба направления содержат информацию, теряется возможность использования вертикальной избыточности (заметим, что в двумерных стековых кодах присутствует небольшая вертикальная избыточность). Борьба с ошибками в двумерных кодах обеспечивается за счет использования специальных контрольных сумм, позволяющих гарантировать достоверность вводимой информации. Как правило, борьба с ошибками основывается на применении кода Рида - Соломона.

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

На сегодня разработано более $20$ различных символик двумерных штриховых кодов, которые отличаются формой и структурой символов, формой и возможными цветами элементов, методами упаковки информации в символах, методами и степенью защиты информации от искажений изображений кодов на носителях. Ниже описаны два наиболее популярных типа двумерных кодов: стековая символика PDF417 и матричная символика Datamatrix.

Стековый код PDF417.

Стековая символика PDF$417$ была введена в $1991$ году фирмой Symbol Technologies. PDF происходит от сокращения Portable Data File (портативный файл данных), каждая буква символа состоит из $17$ модулей, каждый

7-2-14.jpg

Символ штрихового кода PDF417

из которых содержит $4$ штриха и пробела (отсюда номер $417$). Штриховой код открыт для общего пользования. Пример символа стекового кода PDF$417$ изображен на рис. 14.


Каждый символ кода PDF$417$ содержит стартовую и стоповую группы штрихов, увеличивающие надежность считывания штрихового кода. Он кодирует до $1850$ буквенно-цифровых или $2710$ цифровых знаков. Высокая емкость данных позволяет кодировать всю необходимую информацию о человеке, продукте, документе или упаковке. Символику PDF$417$ рекомендуется использовать в транспортной и автомобильной промышленности, на транспортных этикетках и таможенных документах. PDF$417$ может кодировать не только текстовые, но и бинарные данные, поэтому им возможно закодировать все, что можно оцифровывать, включая цветные фотографии и отпечатки пальцев. Поэтому PDF$417$ используется также в системах идентификации личности.

Матричный код Data Matrix.

Код Data Matrix от фирмы {CiMatrix} представляет собой двумерный код, разработанный для размещения большого объема информации на ограниченной площади поверхности. Матричный код составляется из темных и светлых ячеек, которые могут быть квадратными (большинство современных матричных кодов), шестиугольными (MaxiCode) или круглыми (как в точечном коде) по форме. Данные кодируются в двоичной форме (обычно темная ячейка соответствует двоичной единице; а светлая ячейка - двоичному нулю), а схема декодирования использует технологии обнаружения и коррекции ошибки для создания избыточности. Матричные коды масштабируются, и их теоретическая информационная емкость в один бит на ячейку дает им б ольшую плотность данных, чем у стековых кодов.

7-2-15.jpg

Символ штрихового кода Data Matrix версии ECC 200

Например, символ кода Data Matrix с размером ячейки ($X$-размер) в $10$ mil ($0{,}25$ мм) может закодировать максимум $2000$ знаков, занимая около $8$ кв. см, по сравнению с 25 кв. см для тех же данных у символа PDF$417$ с тем же самым $X$-размером.

Данный штриховой код может масштабироваться от 1-mil плотности до четырнадцатидюймовой площади и имеет теоретическую максимальную плотность до 500 миллионов символов на дюйм. На практике плотность, конечно, ограничивается разрешающей способностью печатающих устройств и сканеров. Код Data Matrix имеет фиксированную степень защиты от ошибок для каждого размера символа кода. Поскольку информация кодируется абсолютной позицией элемента внутри кода, то есть позицией относительно границ кода, код не так чувствителен к дефектам печати, как традиционный штриховой код. Схема кодирования имеет высокий уровень избыточности, данные рассредоточены внутри символа. Это позволяет сохранять читаемость кода при его частичном повреждении или потере части кода. Каждый код имеет измерительные линейки, которые выглядят, как сплошная линия по одному краю символа, и равномерно расположенные квадратные точки одинакового размера по другому краю. Эти линейки используются для определения ориентации и плотности кода.

Существуют две основные версии данной символики. Одна использует сверточное кодирование для коррекции ошибок, которое использовалось в первых версиях кода Data Matrix, эта версия описывается как ECC $000$-$140$. Вторая версия описывается как ECC $200$ и использует коды Рида - Соломона для коррекции ошибок. Символы версии ECC $000$-$140$ всегда имеют нечетное количество модулей по каждой стороне квадрата. Символы версии ECC $200$ всегда содержат четное число элементов по каждой из сторон. Максимальная емкость символа ECC $200$ (рис. 15 ) составляет $3116$ цифр или $2335$ букв в символе, состоящем из $144$ модулей.


Наиболее популярными применениями для Data Matrix является маркировка небольших предметов - таких, как электронные элементы и печатные платы электронных приборов. Эти приложения используют способность Data Matrix разместить примерно 50 символов в коде размером 3 мм и тот факт, что код может быть прочитан при 20${\%}$ контрастности печати. Код читается ПЗС-камерой или ПЗС-сканером.

Полезные ссылки

  1. ☝ К началу
  2. ☜ Обработка документов, распознавание текста и штриховых кодов
Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты