Спецификация Aztec Code (без Small Aztec) / Спецификации и стандарты / Recog.ru - Распознавание образов для программистов


Спецификация Aztec Code (без Small Aztec)

Структура

Сравнительно молодой двухмерный код (1997 г. патентование [2]) достиг уровня мирового стандарта в 2008 году [1]. Основной особенностью кода является присутствие в нём центральной мишени, что позволяет наносить код в те места, где края могут быть заполнены какими-то цветами, в отличии, к примеру, от DataMatrix кода, в котором обязательно должна быть зона, огораживающая код от остальной части изображения. Технология Aztec кода позволяет кодировать до 3832 цифровых символов, 3067 символов алфавита или 1914 байт. Пример Aztec кода представлен на рисунке 1.
Рис.1. Пример Aztec кодирования
Рис.1. Пример Aztec кодирования

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

Кодируемые данные располагаются по слоям (уровням), которые обвиваются вокруг центральной мишени по так называемому принципу «домино» по часовой стрелке (Рис. 3).
Рис. 3. Расположение данных, структура кодовых слов и принцип «домино» в Aztec Code
Рис. 3. Расположение данных, структура кодовых слов и принцип «домино» в Aztec Code

Информация о режиме кодирования находится между ориентировочными элементами мишени по принципу «домино» и содержит в себе 40 бит. Уровни шириной в два бита и с различной длиной кодовых слов (см. рис. 1.3) располагаются по принципу «домино», исключая синхронизирующие элементы – пунктирные линии сетки, которых при увеличении количества уровней становится больше. Центральные пунктирные линии присутствуют в любом стандартном коде Aztec. Остальные линии добавляются между 4 и 5 слоями, в слоях 12 и 27, разделяя кодовые слова.
В начальном уровне #1 содержится 128 бит информации, а в последующих добавляется по 32 бита, поэтому общее количество бит информации в символе длины L может быть рассчитано по формуле:
Cb=(112+16*L)*L.
Коррекция Рида-Соломона [3] осуществляется для кодовых слов различной длины:
  • в 1-2 уровневых символах используются 6-битные кодовые слова;
  • в 3-8 уровневых символах используются 8-битные кодовые слова;
  • в 9-22 уровневых символах используются 10-битные кодовые слова;
  • в 23-32 уровневых символах используются 12-битные кодовые слова.
Поэтому количество кодовых слов, о которых говорится в блоке данных, рассчитывается следующим образом:
Cw=Cb div K,
где K – количество бит в кодовом слове, а div – функция целого деления.
Возможные размеры символов Aztec Code представлены в таблице 1.1. В таблице показаны физические размеры символов и их вместимость (количество кодовых слов умноженных на количество бит).

Низкоуровневое кодирование

Информация о режиме кодирования, как отмечалось выше, содержит 40 бит, из которых только 16 бит содержат полезную информацию, остальные 24 бита – выполняют функцию коррекции ошибок Рида-Соломона. Первые 5 бит содержат размер символа, который определяется через количество слоёв минус 1. Т.е. если первые 5 бит – нулевые, то код содержит только 1 уровень. Следующие 11 бит кодируют длину сообщения, которая определяется как количество кодовых слов минус 1, включая символы следующие за кодовыми словами для контроля ошибок.

Таблица 1. Размеры и вместимость символов Aztec Code
Таблица 1. Размеры и вместимость символов Aztec Code
Эти 16 служебных бит расположены в 4-битных словах, а остальные 6 проверочных слов добавляются кодированием Рида-Соломона с полем Галуа GF(16), основанным на главном полиноме модуля x^4+x+1 (коэффициент генерации полинома = 19). Порождающий полином (x-21)..(x-26) следующий:
x^6+7x^5+9x^4+3x^3+12x^2+10x+12.

Все десять слов следуют друг за другом, начиная с верхнего левого угла.
Информационное сообщение (закодированное в уровнях символа) кодируется по-разному в зависимости от размеров. В таблице 2 показаны характеристики распределения Рида-Соломона, необходимые для кодирования-декодирования информации.

Таблица 2. Размеры кодовых слов и главные полиномы модуля
Таблица 2. Размеры кодовых слов и главные полиномы модуля

Высокоуровневое кодирование


Высокоуровневое кодирование состоит из двух этапов. На первом этапе, строка символов преобразуются в поток бит. На втором этапе поток бит подвергается преобразованию, которое предназначено для того, чтобы исключить длительного повторения одинаковых бит.
На этапе 1 берутся символы сообщения, которые кодируются с использованием таблицы 3. Размеры символов могут быть 4, 5 и 8 бит – соответственно для цифр (Digit), остальных режимов таблицы 1.3 и побайтного кодирования. Сообщение начинает кодироваться в режиме Upper и может быть переключено в другой режим с помощью UL (Upper), LL (Lower), ML (Mixed), PL (Punct), DL (Digit) или переведено в режим только для ввода единственного символа с помощью US (Upper) и PS (Punct). При переключении на режим Digit происходит смена количества бит на символ с 5 на 4.
BS (Binary Shift) – переключение на ввод 8-битной строки символов с заданным размером. После BS следует 5-битное значение: если неравно нуля, то содержит в себе количество последующих байт строки; если 0, то следующие 11 бит содержат в себе количество байт минус 31. После окончания строки, кодирование возвращается в режим, который был до BS.

Таблица 3. Высокоуровневое кодирование Aztec Code
Таблица 3. Высокоуровневое кодирование Aztec Code

Символ, обозначенный FLG(n) в таблице 3, является специальным флагом, представляющим различные неинформационные символы, предоставляемые многими стандартными символиками. В битовом потоке значение FLG(n) сопровождается 3 дополнительными битами, кодирующими аргумент «n» в бинарном режиме, поэтому значение n может быть от 0 до 7.
FLG(0) представляет «FNC1» — флажок данных происходящий от Code 128. Когда FNC1 используется в первой позиции данных, это сигнализирует об использовании правил EAN/UPC формата данных, использующих Application Identifiers, и установке бита 0 в модификаторе идентификаторе символики. Когда FNC1 используется во второй позиции данных или в третьей позиции следуют 2 цифры, то это сигнализирует об использовании некоторого другого индустриально-специфического формата, идентифицированного предыдущими данными и устанавливающим бит 1 в модификаторе. Когда FNC1 используется в дальнейших локациях, он служит в качестве разделителя области и вставляет ASCII код 29 в это место в выходных данных.
FLG(1)- FLG(6) предназначены для представления расширенного канального переходного символа ECE, который в выходной строке данных представлен как «\nnnnnn», наклонная черта влево, сопровождаемая 6 цифрами. Присутствие ECE где-нибудь в символе принуждает все наклонные черты влево внутри кодируемых данных быть удвоенным в выходной строке и также устанавливает бит 2 в модификаторе идентификаторе символики. Аргумент «n» показывает, сколько из этих 6 цифр явно кодируются, используя режим Digit, в символе, заполненном нулями. ECE #000123, например, кодируется FLG(3), после чего кодирование возвращается в режим предшествующий FLG(n).
FLG(7) пока не используется.
На втором шаге кодировании сообщения результирующий поток бит делится на последовательность из B-битных (B = 6, 8, 10 или 12) кодовых слов. Анализируя последовательность, первые B-1 бит проверяются на наличие одинаковых бит информации. Если все B-1 бит равны 0, тогда добавляется бит пустышки (dummy), который равен 1, сразу после первых B-1 бит кодового слова, после чего следует последний бит и дальнейшие элементы последовательности. Если все B-1 бит равны 1, тогда добавляется бит пустышки (dummy), который равен 0. Это делается для того, чтобы «разбавить» возможные одинаковые биты в коде, чтобы не принесло пользы для чтения кода.
В конце, символ и границы байта в первоначальном сообщении не имеют никаких необходимых отношений с границами ключевого слова. Поэтому добавляются дополнительные пустышки с 1 (или 0 в случае необходимости), чтобы устранить любую двусмысленность.

Пример кодирования

Возьмём пример кодирования фразы «Test code». На рисунке 4. показано, как происходит перевод в биты информации и получения последовательности.
Рис. 4. Перевод в биты информации и получение последовательности
Рис. 4. Перевод в биты информации и получение последовательности

Если используется одноуровневый Aztec Code, то необходимо разбить последовательность по 6 бит. Затем проверить, необходимо ли добавлять dummy. Если нужно, то добавить (Рис. 5). После этого добавляются кодовые слова контроля ошибок, и генерируется код (Рис. 6). Как видно из рисунка, значительную часть слоя занимают корректирующие кодовые слова Рида-Соломона.
Рис. 5. Перевод в кодовые слова и добавление dummy
Рис. 5. Перевод в кодовые слова и добавление dummy

Рис. 6. 1-уровневый Aztec Code кодирующий фразу «Test Code»
Рис. 6. 1-уровневый Aztec Code кодирующий фразу «Test Code»

Литература:

1. ISO/IEC 24778:2008(E) Information technology – Automatic identification and data capture techniques – Aztec Code bar code symbology specification. – 2008.
2. United States Patent 5591956. Longacre Jr., Andrew (Skaneateles, NY), Hussey, Rob (Liverpool, NY) Two dimensional data encoding structure and symbology for use with optical readers. Patent dated Jan. 7, 1997. Dedication filed March 20, 1997.
3. Блейхут Р. Теория и практика кодов, контролирующих ошибки: пер. с англ. – М.: Мир, 1986. – 576 с.
  • 0
  • 09 апреля 2011, 18:06
  • vidikon

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.