Верификация DataMatrix Честний знак — почему она важна

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Работая в крупном разработчике и интеграторе решений для маркировки - заметил, что многие не знают об особенностях распознавнаия маркировки и мало понимания как она распознается и какие трудности могут быть при ее не правильном нанесение.

Правильность маркировки как раз проверяется ее верификацией на специальных лабораторных приборах - верификаторах 2D кода. О важности верефикации для успешной продаже товара на кассе и хочу рассказать.

Немного об эксперименте с маркировкой

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

Сейчас, на момент января 2022 г. уже вся скоропортящаяся молочная продукция обзавелась кодами DataMatrix GS1, позволяющими заменить штрихкод товара на кассе. Вы можете самостоятельно попробовать "пробить" товар на кассах самообслужвивания в Пятерочке, Ашане, ВкусВилл и других супермаркетах - Зачастую, товар без проблем пробьется, как и по обычному штрих-коду EAN-13... Но, иногда он все же не распознаеться. Вот как с этим быть, как этого избежать - я и хочу рассказать в данной статье.

Распознание Штрих кодов и кодов DataMatrix

Если штрих-код пришел к нам из азбуки морзе, где ширина линий как раз и означает "длину" импульса для счета - привет аналоговый мир), то 2D DataMarix уже более современен и представялет собой скорее Эксель таблицу с нулями и единицами в графическом исполнние в виде черных и белых квадратов,заключенных между неким постоянным шаблоном, как на Изображение ниже:

Матрица данных и "Фиксированный шаблон" кода DataMatrix. (Источник:https://barcode-coder.com/en/datamatrix-specification-104.html)
Матрица данных и "Фиксированный шаблон" кода DataMatrix. (Источник:https://barcode-coder.com/en/datamatrix-specification-104.html)

В чем сложность распознавть? Одна из основных проблем - что мы имеем дело с объектами реального мира, где снять код идеально бинарно - трудно, напечатать его ровно и качественно - трудно, а сохранить его в целости и сохранности от производства до кассы, не испачкав и не стерев по дороге - тоже не тривиальная задача.

Для наглядности, я дошел до близжайшего супермаркета и нашел пару образцов кода, с которым на кассах придется "попотеть":

Каплеструйная печать на линии производителя, наносимая на прозрачную крышку сметаны.
Каплеструйная печать на линии производителя, наносимая на прозрачную крышку сметаны.

1ый пример: каплеструйная печать непосредственно на линии. При даже не большой вибрации продукта - сбивается геометрия кода. Разглядеть тут хоть какую-то вменяемую сетку для распознвания кода не так просто. Осложняет все еще и место нанесения, код нанесен на прозрачную крышку, без белой подложки. Его контраст будет не большим - разница между черным и "белым" квадратом (модулем DataMatrix) сетки не велика.

Лазерная маркировка - выжигание пегмента из черной краски.
Лазерная маркировка - выжигание пегмента из черной краски.

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

Лазерная маркировка при программной инвертации изображения
Лазерная маркировка при программной инвертации изображения

Если программно инвертировать изображение с лазерной маркировки - мы получим весьма качественный код с хорошим контрастом, НО многие OpenSourceраспознавалки не умеют самостоятельно инвертировать снимки, необходимо дорабатывать их.

Если вам интересна внутренняя сторона распознавния кода, рекомендую прочитать статью.

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

  1. Чем подсветить датаматрикс, чобы его лучше увидеа камера?

    1. Это строго регламентированно ГОСТом, необходимо либо красной подсветкой, либо белой.

    2. Но так-как эпоха 1D штрих кодов не зкончилась - а они требую красной, то зачастую красную подсветку и используют.

    3. Как ни странно, допускается ИК (инфрокрасная) посдветка и с ней распознавнаие работает все несколько надежнее. Парадокс в том, что многие цветные чернила в ИК диапазоне становятся не видимыми, и сканер видит только черную краску на белом фоне, найти код становится лечге. Такой вот аппаратный фильтр изображения.

  2. Разрешение съемки

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

  3. Условия съемки

    1. Напрвленный точечный свет в сканер кассы может значительно испортить надежность распознавания кода из-за бликов и пересветки, не смотря на применяемые поляризационные фильтры

    2. Солнечный свет, попадающий на сканер и товар, так-же может повлиять на распознвание кассой маркировки

  4. Пред обработка кадра

    1. Если есть доступ к связке железо + ПО, и оно не является единым модуелм, то зачастую его можно настроить или даже перепрошить, добавив свои требования. Так можно реализовать то же инвертирование изображения для лазерной маркировки.

  5. Алгоритм распознвания

    1. Тут кто что использовал - тот и молодец. Есть пара OpenSource алгоритмов, требующих хороший снимок на вход.

    2. Есть готовые модули распознвания кодов, выдающие сразу строку в com порт.

И вот с такими особенностями маркировки сталкивается Ретейл сейчас при выбытие товаров на кассах.

Чем же облегчает жизнь кассира верификация кодов на производстве?

Верификация позволяет убедится в том, что произведенный продукт отвечает всем требованиям к маркировке и гарантированно будет распознаваться даже модулем с Aliexpress. Тем самым производитель будет уверен, что магазин ему не вернет товар, кассир сможет его пробить, а сам производитель не "упадет" своей репутацией в глазах покупателя из-за плохой маркировки.

Как она происходит:

Верификация может быть как 100% поточной, непосредственно на линии производства, так и выборочной - в лаборатории на специальном девайсе - Верификаторе. Стандарт оценки кода, как и требования к верификатору описаны в ГОСТ 15415-2012 и ГОСТ 16022-2008.

Основной задачей верификатора является не распознать код, а дотошно проверить его структуру, и происходить это по 7и параметрам:

  • контраст символа

  • модуляция

  • запас по коэффициенту отражения

  • повреждение фиксированных шаблонов

  • осевая неоднородность

  • неоднородность сетки

  • неиспользованное исправление ошибок

Каждый из этих параметров имеет буквенную величину, называемую Грейдами, ABCDF, где А - самая высокая оценка, F - самая низкая. Коды начиная с "троекчников" - с оценки "С", маркировка уверенно распознаются всем оборудованием на кассах, складах и т.д. Все что ниже - могут иметь проблемы.

Пример поточной верификации на Типографии в один ручей:

Парметры верификации и что они нам могут сказать о коде

Контраст символа

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

Модуляция

Чтобы преобразовать матрицу черных и белых модулей в таблицу нулей и единиц необходимо использовать фильтрацию изображения для его разложения на черное и белое. Кто хоть раз запускл OpenCV - точно знает парметр Threshold, или Порог чувствительности, все модули, которые Ниже этого порога - становятся "черными" Единицами в двоичном коде таблицы. те модули, что Выше порога - "белыми" Нулями.

Пример брака по контрастности символа. Источник: MVTec Halcon Guide: https://www.mvtec.com/fileadmin/Redaktion/mvtec.com/products/halcon/documentation/solution_guide/solution_guide_ii_c_2d_data_codes.pdf
Пример брака по контрастности символа. Источник: MVTec Halcon Guide: https://www.mvtec.com/fileadmin/Redaktion/mvtec.com/products/halcon/documentation/solution_guide/solution_guide_ii_c_2d_data_codes.pdf

Этот параметр показывает нам на сколько идеально напечатан каждый модуль кода. Если модуляция будет назкой - некоторые модули скорее всего не распознаются. Но небольшие повреждения кода не так страшны - у кода есть запас прочности.

Запас по коэффициенту отражения

Близкая по смыслу к контрасту величина, но проверяется не весь код целиком, а каждый модуль в отдельности относительно черного (0) и белого (255) значения в 8и битном изображение.

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

Повреждение фиксированных шаблонов

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

 Источник: MVTec Halcon Guide: https://www.mvtec.com/fileadmin/Redaktion/mvtec.com/products/halcon/documentation/solution_guide/solution_guide_ii_c_2d_data_codes.pdf
Источник: MVTec Halcon Guide: https://www.mvtec.com/fileadmin/Redaktion/mvtec.com/products/halcon/documentation/solution_guide/solution_guide_ii_c_2d_data_codes.pdf

Фиксированный шаблон - один из самых важных параметров кода, если он нарушен, алогоритмы могут попросту не найти код на изображение.

Осевая неоднородность

Если код будет не кваратным - а DataMatrix должен быть всегда квадратным. Это может также погубно повлияеть на его нахождене на снимке и распознавние.

 Источник: MVTec Halcon Guide: https://www.mvtec.com/fileadmin/Redaktion/mvtec.com/products/halcon/documentation/solution_guide/solution_guide_ii_c_2d_data_codes.pdf
Источник: MVTec Halcon Guide: https://www.mvtec.com/fileadmin/Redaktion/mvtec.com/products/halcon/documentation/solution_guide/solution_guide_ii_c_2d_data_codes.pdf

Неоднородность сетки

Распознавнаие 2D кода построенно на наложение на него сетки по центрам модулей, в последующем имнно центры каждого квадарта (модуля) преобразовываются в двоичный код. Область преобразования называется аппертрой, и варируется от 0.8 до 0.6 от размера модуля.

Если сетка имеет значительные икажения, а ровно и сам код не квадрат - это значительно усложняет алогритм распознавнаия такого кода, не каждая OpenSoure библиотека имеет алгоритмы для корректировки искажений. Из-за искажения кода вы можете получить NoRead на кассе. Товар не возможно будет приобрести, даже если он будет полностью годным к употреблению.

Неиспользованное исправление ошибок

DataMatrixк код - это не просто набор двоичного кода по ASCII таблице, иначе бы потеря одного модуля ломала все распознавнаие кода.

Благо это не так, и он специально закодирован с надежностю порядка 15-20%, то есть если на 1/6 код закрыть, замазать - он распознается! И важно, чтобы на производстве, при нанесении этого кода - исправление ошибок не было использовано, а осталось на случай повреждения при транспортировке или продаже.

Источник: https://habr.com/ru/post/599405/


Интересные статьи

Интересные статьи

На вебинаре проведенном LoRa Alliance под эгидой компании Semtech, президент ассоциации пользователей DLMS анонсировал будущий выпуск первого коммуникационного профиля на базе протокола...
Есть одна довольно любопытная задачка, она уже давно вошла в математический фольклор, а так же стала излюбленным испытанием на собеседованиях. Ее условия просты, а решение, кажетс...
Если вкратце: потому что мы так сказали. :) Ладно, это слишком короткое объяснение для статьи, дорогой читатель, и мои провокационные слова требуют объяснения. Встреча Коми...
Привет, Хабр. В этом посте мы хотим рассказать о том, как и почему мы в IPONWEB используем язык программирования с красивым названием Lua. Lua — скриптовый встраиваемый язык программирования с...
От скорости сайта зависит многое: количество отказов, брошенных корзин. Согласно исследованию Google, большинство посетителей не ждёт загрузки больше 3 секунд и уходит к конкурентам. Бывает, что сайт ...