← Статьи

Какое разрешение камеры нужно для DataMatrix: считаем от размера модуля

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

Сколько пикселей на модуль

  • 1,5 пикселя — читается только при идеальной печати, свете и геометрии, или если код снимается несколько раз.
  • 2 пикселя — рабочий минимум для линии при хорошем декодере.
  • 3 пикселя и больше — запас на расфокус, блики и слабую печать.

Эти пороги — отраслевая практика машинного зрения (VA Imaging). Реальный порог зависит от декодера. На нашей конвейерной выборке (камера 704×450, символ около 100 пикселей, около 2,4 пикселя на модуль) бесплатная libdmtx прочитала 64 кадра из 300 (21 %), а декодер, рассчитанный на такую съёмку, — 295 (98 %). Поэтому проверяйте декодер на своих кадрах, а не по паспорту.

Мелкий модуль не страшен, страшен мелкий модуль с расфокусом

На резком синтетическом кадре код читается и при 1,4 пикселя на модуль. Ограничивает размытие оптики: граница — расфокус σ около 0,4–0,5 модуля при любом размере модуля. Доля прочитанных синтетических кадров, %:

Расфокус σ, px \ пикселей на модуль1,62,02,53,04,0
0,5100100100100100
1,003391100100
1,50007591

Вывод для выбора камеры: на 2 пикселях на модуль фокус и глубина резкости важнее лишних мегапикселей. Если высота коробок на линии меняется, закрывайте диафрагму или берите 3 пикселя на модуль.

Размер модуля и кода

Модуль (X-размер) — сторона одной клетки. Оператор рекомендует не меньше 0,255 мм; меньший допустим, если качество печати в норме (markirovka.ru). Число модулей зависит от длины кода: длинный код с полями 91 и 92 (76–85 символов) при обычном ASCII-кодировании занимает 36×36 модулей, короткий с полем 93 — 20×20 или 22×22.

Итого при модуле 0,33 мм длинный код — квадрат около 12 мм, короткий — около 7 мм, без учёта свободной зоны.

Формула

Ширина сенсора в пикселях = ширина поля зрения × пиксели на модуль / размер модуля:

N(пикс.) = FOV × k / X

Здесь FOV — ширина поля зрения в мм, k — пиксели на модуль, X — размер модуля в мм. Поле зрения берите с запасом на разброс положения кода: смещение этикетки, неровная постановка коробки на конвейере.

Примеры

СитуацияПоле зрения, ммМодуль, ммПикселей на модульНужно пикселей по ширине
Код в фиксированном месте пачки600,333545
То же, на пределе600,332364
Этикетка с разбросом положения1500,3331 364
Код в любом месте короба3000,3321 818
То же, с запасом3000,3332 727
То же, мелкий модуль3000,25533 529

На практике: для кода в известном месте хватает камеры на 1–1,3 Мп. Для поиска кода по всей ширине короба нужна камера на 5 Мп и выше (2448 пикселей по ширине) — или декодер, уверенно работающий на 2 пикселях. Разница между 2 и 3 пикселями — это разница в цене камеры и объёме данных на кадр.

Движение: выдержка и затвор

На движущемся конвейере размытие съедает пиксели не хуже низкого разрешения. Смаз за время выдержки = скорость × выдержка; держите его меньше половины модуля — это запас на расфокус и слабую печать. На резком кадре наш декодер в синтетических испытаниях читал все коды при смазе в 1,25 модуля, 83 % — при 1,5 и 25 % — при 2 модулях.

Выдержка, мксСмаз при 0,5 м/с, ммДоля модуля 0,33 мм
500,0250,08
1000,050,15
2000,10,3
5000,250,76 — без запаса

Короткая выдержка требует яркой импульсной подсветки. На движущейся линии нужен глобальный затвор: скользящий (rolling shutter) искажает геометрию кода и подходит только для неподвижных объектов.

Чек-лист выбора камеры

  1. Узнайте размер модуля по шаблону печати, а не по размеру кода в миллиметрах.
  2. Измерьте разброс положения кода на линии и добавьте запас — это поле зрения.
  3. Посчитайте пиксели по формуле для k = 3 и k = 2.
  4. Посчитайте выдержку по скорости линии и проверьте, хватит ли света.
  5. Проверьте декодер на настоящих кадрах с линии, а не на тестовой печати.

Попробовать

Библиотека чтения libscanner рассчитана на коды «Честного знака» при двух пикселях на модуль. На 12 315 кадрах с работающего конвейера прочитано 98,4 %, медиана времени на кадр — 11 мс, 90-й процентиль — 13 мс; поверхность — плоская или этикетка на цилиндре с дугой до 90°. Загрузите кадр со своей линии в онлайн-сканер, поставьте пакет для Python командой pip install libscanner-dmr или возьмите библиотеку на GitHub.

«Честный знак» — товарный знак ООО «Оператор-ЦРПТ», «GS1» — GS1 AISBL; продукт не связан с их владельцами и ими не сертифицирован.