штрих код Фотографии PNG | Векторы и PSD-файлы
штрих код
1200*1200
Штрих код векторного материала
1200*1200
Черно белый штрих код Загрузка растрового изображения Штрих код продукта Черно белая полоса
2480*2480
разнообразие штрих кода
1500*1501
посадочный талон билет на посадочный талон авиакомпании на рейс Концепция путешествия путешествие или бизнес с штрих кодом векторная иллюстрация
1200*1200
вектор штрих кода
954*407
штрих код
1200*1200
вектор штрих код
1200*1200
вектор штрих код
1200*1200
сканер штрих кода
1200*1200
25 зеленых и синих бизнес иконок
5556*5556
двухмерный штриховой код
1200*1200
значок вектор штрих код
1007*1007
Билет шаблон набор векторных современные макет свадебный кинотеатр день рождения или цирк билеты шаблон прозрачный фон
5000*5000
Рекламная подарочная коробка со штрих кодом golden cyber monday
1200*1200
новый штрих код
1200*1200
вектор id карта шаблон
1200*1200
черная разделительная линия разделительная линия шаблон разделительная линия креативная минималистская разделительная линия
1501*1501
векторная icon
1024*1024
значок вектор
1024*1024
сокращенный штрих код
1200*1200
элемент штрихкода
1200*1200
Штрих код cyber monday Рекламная этикетка
1200*1200
черно белый штрих код
1200*1200
мно значок магазин подарок копилка
2000*2000
штрих код
1007*1007
Штрих код набор вектор современной простой плоский штрих код маркетинга модные сканирования знак изолированных иллюстрация
5000*5000
значок штрих кода проекта
5120*5120
элемент штрих кода
1200*1200
ru.pngtree.com
Онлайн сканер штрих кодов бесплатно
При работе с складскими остатками или при учете поступившей продукции, например, необходимо всегда иметь устройство, которое могло было бы учитывать все маркировки вне зависимости от их типа и размера. Для этого были разработаны специализированные терминалы сбора данных (или ТСД). По сути своей они представляют собой обычные мобильные телефоны, с высокой степенью защиты от условий внешней среды (пыль, влажность и т.д). Однако на деле это обыкновенные мобильные устройства, работу которых можно заменить, сэкономив на этом.
Мы решили предоставить Вам онлайн сканер штрих-кодов для большинства типов маркировок. Все, что необходимо, это загрузить фотографию в специальную форму или же сфотографировать в режиме онлайн. Код будет просканирован и предоставлен в специальной форме. Вы сможете его распечатать и сделать все, что угодно.
Как работает онлайн сканер штрих-кодов
Представленный инструмент умеет распознавать 12 видов самых популярных правил кодирования. На данный момент Вы можете отсканировать номера следующих:
- Code 128. Тот же самый EAN/ГС1. Имеет 128 символов и им обычно маркируются целые партии продукции.
- Code 39.
- Различные EAN коды, начиная с 8 значного и заканчивая остальными видами, включая вытянутые.
- UPC/UPC-E.
- Codabar.
- Interleaved 2 of 5. (Чередование 2 из 5).
- Code 93.
- Standart 2 of 5.
Процедура расшифровки кода на фото выглядит следующим образом:
- Выбираете файл. Это может быть готовое фото с ПК или же можно в прямом эфире сделать фотографию с мобильного устройства. В последнем случае страница может запросить доступ к камере телефона, тогда нужно просто разрешить это.
- Выбираете тип штрих-кода. Это можно сделать заранее или уже после загрузки файла.
- Указываете разрешение приближенное к размеру фото. В последствии его можно изменять, для улучшения качества распознавания.
- Задаете размер считывателя маркировки. Тут лучше подбирать последовательно, в зависимости от того, что Вам подойдет.
- Указываем количество потоков для сканирования. По умолчанию оставляем “0”, если будут проблемы с расшифровкой, то можно это значение поменять на “1”.
- Если у Вас имеется только фрагмент кода, то отмечаем это.
- При выборе режима нескольких каналов, результатом распознавания будет несколько файлов. Подойдет в тех случаях, когда требуется сразу несколько копий штих-кода.
- При внесении изменений в параметры инструмента распознавания, Вам необходимо подтверждать все операции, нажатием кнопки обновления.
Какие правила необходимо соблюдать при сканировании
Примерный процент распознаваемости документов нашим инструментов, где-то в районе 80%. Однако данный момент соблюдается при соблюдении некоторых условий:
- Нет необходимости фотографировать объект с штрих-кодом слишком близко. Лучше оставьте немного места вокруг, чтобы сканер мог самостоятельно найти нужный участок.
- При работе сначала оставьте пункты 6 и 7 по умолчанию не нажатыми.
- Для улучшения распознавания, основную работу выполняют пункты 2, 3 и 4.
- Сканер может работать также с близкими внешне штрих-кодами, которые не представлены в списке параметров.
Если какое-либо изображение упорно не распознается, то Вы можете написать нам в комментариях, постараемся решить проблему.
Где можно применить сканер штрих-кодов на практике
Как мы уже ранее отметили, терминалы сбора данных стоят существенных денег, особенно если требуется их многозадачность. Исправить это можно практически, применив при расшифровке наш инструмент и мобильное устройство, у которого имеется более-менее удобоваримая камера, даже фронтальная. Работа также может осуществляться прямо с ПК или Веб-камеры.
Чтобы долго на этом не останавливаться, мы собрали несколько образцов, различных маркировок на товарах и представим настройки для их расшифровки далее.
- EAN – 13. Был специально взят изрядно помятый пакет, с целью расшифровки. В итоге:
- Настройки были заданы следующие.
- Результат сканирования представлен на скриншоте.
- EAN 128. При обработке фотографии, вначале были проблемы, однако, чтобы этого не случалось, необходимо оставлять область вокруг маркировки. После ее добавления, инструмент расшифровал значение и вывел все на экран.
- Настройка была выполнена по умолчанию. Только указан нужный формат.
- Результат.
- Code 39. Распознать подобные кодировки сложнее, поэтому настройку нужно начинать с параметров по умолчанию. Решать будет положение и состояние кода на распознаваемом документе.
- Настройки. Оставили по умолчанию, только перевели сам формат.
- Результат.
Таким образом, надеемся, что инструмент сможет помочь Вам сканировать всю необходимую продукцию. При работе старайтесь не допускать умышленной порчи элементов штриха и цифро-буквенного обозначения. Если будут наблюдаться проблемы, то можете рассказать о них в комментариях к статье.
vse-markirovki.ru
Сканировать QR-код, Штрих-код, DataMatrix-код онлайн
Обработка JPEG фотографий онлайн.
Главное нужно указать изображение, на котором есть QR, DataMatrix или обычный штрихкод, а затем нажать кнопку ОК внизу страницы для начала сканирования. Поддерживаемые форматы штрих-кодов: EAN-13, EAN-8, UPC-A, UPC-E, ISBN-10, ISBN-13, Code 39, Code 128, ITF-14. На этом сайте ещё есть создание QR-кода.
Пример QR-кода, Штрих-кода и DataMatrix-кода, содержащего ссылку на этот сайт:
QR и DataMatrix коды могут содержать: числа, двоичный код, символы кириллицы и латиницы, а также иероглифы.
Штрих-код обычно содержит только цифры: код страны, регистрационный номер производителя, код товара, а также контрольное число, которое служит для проверки правильности считывания кода сканером.
Для достижения наилучшего результата желательно, чтобы распознаваемый код был повёрнут на нормальный угол (не был сильно перекошен) и занимал большую площадь изображения. Вы можете редварительно повернуть и обрезать изображение в настройках на этой странице, при этом обрезать лишнее нужно так, чтобы вокруг кода как бы оставалась белая рамка, то есть если обрезать ещё сильннее, то код может не распознаться. Если на изображении есть несколько QR или штрихкодов, то они все будут распознаны, а вот DataMatrix-код распознаётся только первый попавшийся, так что если DataMatrix несколько, то нужно выделить конкретный, используя предварительную обрезку.
Исходное изображение никак не изменяется. Вам будет предоставлен распознанный QR, DataMatrix или Штрих-код, а также изображение для проверки правильности поворота и обрезки, но только если эти параметры будут использованы.
www.imgonline.com.ua
Бесплатный генератор штрих-кодов онлайн
Меню
Штрих — код — Штриховой код представляет собой последовательность расположенных по правилам определенной символики темных (штрихов) и светлых (пробелов) прямоугольных элементов различной ширины, которая обеспечивает представление символов данных в машиночитаемом виде, представляющая возможность считывания её техническими средствами.
Виды штриховых кодов
- Линейные штрихкоды
- EAN -Международная ассоциация товарной нумерации (European Article Number ) — (подразделяются на: тринадцати- (EAN-13) и восьмизначные (EAN-8))
- UPC — американские универсальные товарные коды – (Universal Product Code)
- Interleaved 2 of 5 (ITF)
- GS1-128
- Код 39
- Codabar
- Двумерные штриховые коды
Считываемые и не считываемые цветовые сочетания штриховых кодов
Интернет ресурс «Service-Online.su» разработан для свободного и бесплатного использования. На этом сайте никогда не будет вирусов или других вредоносных программ. Наша задача упростить вашу работу и постараться помочь Вам по мере своих сил.
Данный сайт является бесплатным сервисом предназначенным облегчить Вашу работу. На сайте представлено большое количество бланков которые удобно заполнять и распечатывать онлайн, сервисов по работе с текстами и многое другое.
Материалы сайта носят справочный характер, предназначены только для ознакомления и не являются точным официальным источником. При заполнении реквизитов необходимо убедиться в их достоверности сверив с официальными источниками.
© Service-Online.SU 2013-2019
По всем вопросам обращайтесь на почту: support(@)service-online.su
⇧
service-online.su
Как устроен штрихкод? / Habr
Привет, Хабр!Со штрихкодами современный человек сталкивается каждый день, даже не задумываясь об этом. Когда мы покупаем в супермаркете продукты, их коды считываются именно с помощью штрихкода. Также посылки, товары на складах, и прочее и прочее. Однако, мало кто знает, как же реально это работает.
Как устроен баркод, и что закодировано на этой картинке?
Попробуем разобраться, заодно напишем декодер таких кодов.
Введение
Использование штрихкодов имеет давнюю историю. Первые попытки автоматизации начинались еще в 50х, патент на устройство считывания кодов был получен в 1952г. Инженер, занимавшийся сортировкой вагонов на железной дороге, захотел упростить процесс. Идея была очевидной — кодировать номер с помощью полос и считывать их с помощью фотоэлементов. В 1962г коды стали официально использоваться для идентификации вагонов на американской железной дороге (система KarTrak), в 1968 прожектор заменили лазерным лучом, что позволило повысить точность и уменьшить размер считывателя. В 1973г появился формат «универсального кода продукта» (Universal Product Code), и в 1974 с использованием сканера кодов был продан первый продукт (жевательная резинка Wrigley’s — это же США;) в супермаркете. В 1984 треть магазинов использовали штриходы, в России же они начали использоваться примерно с 90х годов.
Разных кодов под разные задачи сейчас используется довольно много, к примеру, последовательность «12345678» может быть представлена такими способами (и это еще не все):
Приступим к побитовому разбору. Далее, все ниженаписанное будет относиться к виду «Code-128» — просто потому, что его формат довольно простой и понятный. Желающие поэкспериментировать с другими видами, могут открыть онлайн-генератор и посмотреть самостоятельно.
На первый взгляд штрихкод кажется просто беспорядочной последовательностью линий, на самом деле, его структура четко фиксирована:
1 — Пустое место, нужное для четкого определения начала кода
2 — Стартовый символ. Для Code-128 возможны 3 варианта (называемых А, В и С): 11010000100, 11010010000 или 11010011100, им соответствуют разные кодовые таблицы (подробнее в Википедии).
3 — Собственно код, содержащий нужные нам данные
4 — Контрольная сумма
5 — Стоп символ. Для Code-128 это 1100011101011.
6(1) — Пустое место.
Теперь о том, как кодируются биты. Тут все очень просто — если взять ширину самой тонкой линии за «1», то линия двойной ширины даст код «11», тройная «111», и так далее. Пустое место будет «0» или «00» или «000» по тому же самому принципу. Желающие могут сравнить стартовый код на картинке, чтобы убедиться что правило выполняется.
Теперь можно начинать программировать.
Получаем битовую последовательность
В принципе, это самая сложная часть, и разумеется, алгоритмически ее можно реализовать по-разному. Не уверен, что приведенный ниже алгоритм оптимальный, но для учебного примера его вполне достаточно.
Для начала загрузим изображение, растянем его по ширине, возьмем из середины изображения горизонтальную линию, преобразуем ее в ч/б и загрузим в виде массива.
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
image_path = "barcode.jpg"
img = Image.open(image_path)
width, height = img.size
basewidth = 4*width
img = img.resize((basewidth, height), Image.ANTIALIAS)
hor_line_bw = img.crop((0, int(height/2), basewidth, int(height/2) + 1)).convert('L')
hor_data = np.asarray(hor_line_bw, dtype="int32")[0]
На штрихкоде черному соответствует «1», а в RGB наоборот, 0, так что массив нужно инвертировать. Заодно вычислим среднее значение.
hor_data = 255 - hor_data
avg = np.average(hor_data)
plt.plot(hor_data)
plt.show()
Запускаем программу, чтобы убедиться, что баркод загружен корректно:
Теперь нужно определить ширину одного «бита». Для этого мы выделим начало стартовой последовательности «1101», записывая моменты перехода графика через среднюю линию.
pos1, pos2 = -1, -1
bits = ""
for p in range(basewidth - 2):
if hor_data[p] < avg and hor_data[p + 1] > avg:
bits += "1"
if pos1 == -1:
pos1 = p
if bits == "101":
pos2 = p
break
if hor_data[p] > avg and hor_data[p + 1] < avg:
bits += "0"
bit_width = int((pos2 - pos1)/3)
Мы записываем только переходы через середину, так что код «1101» будет записан как «101», но нам этого достаточно чтобы узнать его ширину в пикселах.
Теперь собственно декодирование. Находим очередной переход через середину, и определяем число бит, попавших в интервал. Поскольку совпадение не абсолютное (код может быть слегка изогнут или растянут), используем округление.
bits = ""
for p in range(basewidth - 2):
if hor_data[p] > avg and hor_data[p + 1] < avg:
interval = p - pos1
cnt = interval/bit_width
bits += "1"*int(round(cnt))
pos1 = p
if hor_data[p] < avg and hor_data[p + 1] > avg:
interval = p - pos1
cnt = interval/bit_width
bits += "0"*int(round(cnt))
pos1 = p
Не уверен что это оптимальный вариант, возможно, есть способ лучше, желающие могут написать в комментариях.
Если все было сделано правильно, то мы получаем на выходе примерно такую последовательность:
11010010000110001010001000110100010001101110100011011101000111011011
01100110011000101000101000110001000101100011000101110110011011001111
00010101100011101011
Декодирование
Здесь никаких сложностей в принципе, нет. Символы в Code-128 кодируются 11-битным кодом, который имеет 3 разновидности (А, В и С) и может хранить либо разные кодировки символов, либо цифры от 00 до 99.
В нашем случае, начало последовательности 11010010000, что соответствует «Code B». Было жутко влом вбивать вручную все коды из Википедии, поэтому таблица была просто скопирована из браузера и ее парсинг был тоже сделан на Python (hint: на продакшене так делать не надо).
CODE128_CHART = """
0 _ _ 00 32 S 11011001100 212222
1 ! ! 01 33 ! 11001101100 222122
2 " " 02 34 " 11001100110 222221
3 # # 03 35 # 10010011000 121223
...
93 GS } 93 125 } 10100011110 111341
94 RS ~ 94 126 ~ 10001011110 131141
103 Start Start A 208 SCA 11010000100 211412
104 Start Start B 209 SCB 11010010000 211214
105 Start Start C 210 SCC 11010011100 211232
106 Stop Stop - - - 11000111010 233111""".split()
SYMBOLS = [value for value in CODE128_CHART[6::8]]
VALUESB = [value for value in CODE128_CHART[2::8]]
CODE128B = dict(zip(SYMBOLS, VALUESB))
Теперь осталось самое простое. Разбиваем нашу битовую последовательность на 11-символьные блоки:
sym_len = 11
symbols = [bits[i:i+sym_len] for i in range(0, len(bits), sym_len)]
Наконец, формируем строку и выводим ее на экран:
str_out = ""
for sym in symbols:
if CODE128A[sym] == 'Start':
continue
if CODE128A[sym] == 'Stop':
break
str_out += CODE128A[sym]
print(" ", sym, CODE128A[sym])
print("Str:", str_out)
Ответ на то, что закодировано в таблице, приводить не буду, пусть это будет домашним заданием для читателей (использование готовых программ для смартфонов будет считаться читерством:).
В коде также не реализована проверка CRC, желающие могут сделать это самостоятельно.
Разумеется, алгоритм неидеален, и был написан за полчаса. Для более профессиональных целей есть готовые библиотеки, например pyzbar. Код с использованием такой библиотеки займет всего 4 строчки:
from pyzbar.pyzbar import decode
img = Image.open(image_path)
decode = decode(img)
print(decode)
(предварительно нужно установить библиотеку, введя команду «pip install pyzbar»)
Дополнение: о подсчете CRC написал в комментариях пользователь vinograd19:
Интересна история контрольной цифры. Она возникла эволюционно.
Контрольная цифра нужна для того, чтобы избежать неправильного декодирования. Если штрихкод был 1234, а его распознали как 7234, то нужна валидация, которая предупредит замену 1 на 7. Валидация может быть неточная, чтобы хотя бы в 90% невалидные номера определялись заранее.
1-й подход: Давайте просто возьмем сумму. Чтобы в остатке от деления на 10 был 0. Ну то есть первые 12 символов несут информационную нагрузку, а последняя цифры подбирается так, чтобы сумма цифр делилась на 10. Декодируем последовательность, если сумма не делится на десять — значит декодировали с багом и нужно сделать это еще раз. Например, код 1234 — валидный. 1+2+3+4 = 10. Код 1216 — тоже валидный, а вот 1218 — нет.
Это позволяет избежать проблем с автоматикой. Однако в момент создания штрихкодов был фоллбек в виде набивания номер на клавишах. И там есть плохой кейс: если поменять порядок следования двух цифр, то контрольная сумма не меняется, и это плохо. То есть если штрихкод 1234 был вбит как 2134, контрольная сумма сойдется, а вот номер мы вбили неправильный. Оказывается, неправильный порядок цифр — это распространенный кейс, если стучать по клавишам быстро.
2-й подход. Хорошо, давайте сумму сделаем чуть сложнее. Чтобы цифры на четных местах учитывались дважды. Тогда при изменении порядка, сумма точно не сойдется к нужной. Например код 2364 валидный (2 + 3+3 + 6 + 4+4 = 20), а код 3264 — невалидный (3+ 2+2 + 6 + 4+4 = 19). Но тут оказался еще один плохой пример вбития. Некоторые клавиатуры такие, что десять цифр располагаются в два ряда. первый ряд 12345 и под ним второй второй ряд 67890. Если вместо клавишы «1» нажать правее клавишу «2», то контрольная сумма предупредит неправильный ввод. А вот если вместо клавишу «1» нажать ниже клавишу «6» — то может не предупредить. Ведь 6=1+5, и в случае когда эта цифра стоит на четном месте при вычислении контрольной суммы, мы имеем 2*6 = 2*1 + 2*5. То есть контрольная сумму увеличилась ровно на 10, поэтому ее последняя цифра не изменилась. Например контрольные суммы кодв 2134 и 2634 одинаковые. Та же ошибка будет, если мы вместо 2 нажмем 7, вместо 3 нажмем 8 и тд.
3-й подход. Ок, давайте что ли возьмем опять сумму, только цифры, стоящие на четных местах будем учитывать… трижды. То есть код 1234565 — валидный, потому как 1 + 2*3 + 3 + 4*3 + 5 + 6*3 +5 = 50.
Описанный способ стал стандартом вычисления контрольной суммы EAN13 за небольшими правками: число цифр стало фиксированным и равно 13, где 13-ая — это та самая контрольная цифра. Цифры на нечетных местах считаются трижды, на четных — один раз.
Заключение
Как можно видеть, даже такая простая вещь как штрихкод, имеет в себе немало интересного. Кстати, еще один лайфхак для тех, кто дочитал до сюда — текст под штрихкодом (если он есть) полностью дублирует его содержание. Это сделано для того, чтобы в случае нечитабельности кода, оператор мог ввести его вручную. Так что узнать содержимое штрихкода обычно просто — достаточно посмотреть на текст под ним.
Как подсказали в комментариях, наиболее популярным в торговле является код EAN-13, битовое кодирование там такое же, а структуру символов желающие могут посмотреть самостоятельно.
Если у читателей не пропал интерес, отдельно можно рассмотреть QR-коды.
Спасибо за внимание.
habr.com
Распознаем штрихкоды на изображениях с помощью Python и OpenCV / Enterra corporate blog / Habr
От переводчика: мы в компании Энтерра очень любим алгоритмы компьютерного зрения. Работаем чаще всего с OpenCv. Время от времени нам пишут разные разработчики с вопросами: «А как лучше начать работать с OpenCv?» или «Какую интересную задачу можно просто решить с помощью OpenCv?» В связи с чем мы решили перевести очень хорошую статью, которая будет полезна всем, кто интересуется компьютерным зрением.Черная Пятница близко.
Толпы злых покупателей. Рой одинаковых теток среднего возраста, готовых сожрать практически всё, что угодно, в ближайшем супермаркете — главное, что со скидкой 75%. Они выстроятся в очереди перед дверьми магазинов в полночь Дня благодарения. Они будут ломиться внутрь, стучать в запертые двери кулаками и головами, пока не сплющат друг друга и не разобьют руки в кровь, став похожими на зомби из «28 дней спустя». Но вместо человеческой плоти, они жаждут удовлетворить инстинкт покупателя. Их боевые кличи о скидках и распродажах достигают небес. А их громовая поступь способна привести к землетрясению на Великой Равнине.
Естественно, от СМИ помощи не жди — они будут смаковать каждую подробность. От обмороженных семейств, ночевавших в палатке на морозе, до старой леди, растоптанной охотниками за скидкой в момент, когда открылись двери. Что-то похожее случилось с галлимимусом в «Парке Юрского периода». А она просто хотела купить Halo для девятилетнего внука Тимми, чьи родители забыли это сделать в прошлом году. В Wal-Mart. Во время Черной Пятницы.
И я обязан спросить: весь этот хаос и бедлам стоят того?
Чёрт возьми, нет!
Любая покупка, которую я совершу в эту Черную Пятницу, будет сделана совершенно безопасно с помощью ноутбука. Но если вы решите выйти в реальный мир и вступить в схватку с охотниками за наживой, вам в первую очередь понадобится загрузить код из оригинального поста.
Просто представьте, как глупо вы будете выглядеть, стоя в очереди в ожидании свободной кассы – только для того, чтобы после сканирования штрихкода последнего сезона «Игры Престолов» выяснить, что в Target его можно купить на 5 долларов дешевле?
Собственно, далее я покажу, как можно обнаружить штрихкод на изображении, используя только Python и OpenCV.
Распознаём штриходы на изображениях на Pyhton и OpenCv
Задача этого поста — показать простое применение компьютерного зрения и технологий обработки изображений для распознавания штрихкодов. Мой алгоритм — это вариация на тему из вот этого вопроса со StackOverflow. Я просмотрел оригинальный код и добавил к нему ряд обновлений и улучшений. Стоит отметить, что этот код не будет работать для всех штрихкодов, но в любом случае вы получите представление о том, какие методы нужно будет использовать.
Важно отметить, что алгоритм не будет работать для всех штрихкодов, но зато даст базовое интуитивное понимание того, какие техники должны быть для этого использованы.
Для примера, мы определим штрихкод со следующего изображения:
Перейдём к коду. Открываем новый файл, называем его detect_barcode.py
— и поехали:
# import the necessary packages
import numpy as np
import argparse
import cv2
# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True, help = "path to the image file")
args = vars(ap.parse_args())
Прежде всего нужно сделать импорт необходимых пакетов. Нам потребуются NumPy для работы с числами,
agparse
для парсинга аргументов командной строки и cv2
для связи с OpenCV.Далее обрабатываем аргументы командной строки. Мы будем использовать единственный аргумент --image
для задания пути к изображению с штрихкодом.
Теперь приступим к непосредственной обработке изображения:
# load the image and convert it to grayscale
image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# compute the Scharr gradient magnitude representation of the images
# in both the x and y direction
gradX = cv2.Sobel(gray, ddepth = cv2.cv.CV_32F, dx = 1, dy = 0, ksize = -1)
gradY = cv2.Sobel(gray, ddepth = cv2.cv.CV_32F, dx = 0, dy = 1, ksize = -1)
# subtract the y-gradient from the x-gradient
gradient = cv2.subtract(gradX, gradY)
gradient = cv2.convertScaleAbs(gradient)
Мы загружаем изображение image
и преобразуем его цветовой режим в оттенки серого.Затем, мы используем оператор Собеля (с выставленным ksize = -1
), чтобы вычислить величину градиента серой картинки в вертикальном и горизонтальном направлениях.
После этого мы вычитаем y-градиент оператора Собеля из x-градиента. После вычитания мы получаем изображение с высоким значением горизонтального градиента и низким значением вертикального.
И сейчас наше изображение выглядит так:
Обратите внимание, что зона штрихкода была определена с помощью операций с градиентом. Следующий шаг — устранить шум на изображении и сфокусироваться сугубо на области со штрихкодом.
# blur and threshold the image
blurred = cv2.blur(gradient, (9, 9))
(_, thresh) = cv2.threshold(blurred, 225, 255, cv2.THRESH_BINARY)
И первое, что мы сделаем — это используем average blur с ядром размера 9×9. Это поможет сгладить высокочастотный шум на нашей картинке с градинентами.Затем мы проведём бинаризацию размытого изображения. Каждый пиксель изображения со значением не выше 225 мы превратим в 0 (чёрный), а остальные — в 255 (белый). В итоге получим:
Однако, как вы можете заметить на исходном изображении, между вертикальными полосками штрихкода есть пространство. Чтобы его закрыть и облегчить нашему алгоритму определение области штрихкода, нам нужно произвести ряд простых морфологических операций:
# construct a closing kernel and apply it to the thresholded image
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (21, 7))
closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
Мы начнем с создания прямоугольника с помощью cv2.getStructuringElement
. Ширина ядра больше его высоты, что позволяет нам перекрыть пространство между вертикальными полосками штрихкода.Далее, произведем нашу морфологическую операцию, применив ядро к бинаризированному изображению, замазывая пространство между полосками. И вы можете сами увидеть, что «пробелы» почти полностью закрыты, по сравнению с изображениями выше:
Конечно, на картинке остались и некоторые светлые пятна, которые не имеют отношения к штрихкоду и способны помешать точно определить его контур.
Давайте постараемся избавиться от этих пятен:
# perform a series of erosions and dilations
closed = cv2.erode(closed, None, iterations = 4)
closed = cv2.dilate(closed, None, iterations = 4)
Тут мы делаем четыре итерации эрозии, за которым следуют четыре итерации дилатация. Эрозия уберёт белые пиксели с изображения, удаляя мелкие блобы, а дилатация не позволит крупным белым областям уменьшиться. Удаленные во время размытия мелкие пятна во время растяжения не появятся вновь.
После серии эрозий и дилатаций можно увидеть, что мелкие пятна успешно были удалены, осталась только область штрихкода:
Наконец, давайте найдем контуры области штрихкода на изображении:
# find the contours in the thresholded image, then sort the contours
# by their area, keeping only the largest one
(cnts, _) = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
c = sorted(cnts, key = cv2.contourArea, reverse = True)[0]
# compute the rotated bounding box of the largest contour
rect = cv2.minAreaRect(c)
box = np.int0(cv2.cv.BoxPoints(rect))
# draw a bounding box arounded the detected barcode and display the
# image
cv2.drawContours(image, [box], -1, (0, 255, 0), 3)
cv2.imshow("Image", image)
cv2.waitKey(0)
К счастью, это довольно просто. Мы находим самый большой контур на изображении с помощью
cv2.findContours
, который (если обработка была произведена корректно) точно соотносится с областью штрихкода.Затем мы определяем минимальный ограничивающий прямоугольник, в который заключим этот самый большой контур, после чего наконец отображаем найденный штрихкод.
Как вы можете видеть, мы успешно нашли штрихкод:
Попробуем сделать это еще с несколькими изображениями?
Успешное определение штрихкодов
Чтобы получить аналогичные результаты, используйте мой код (можно загрузить целиком на странице поста-оригинала) и приведенные здесь изображения. Как только у вас будет код и изображения, откройте терминал и выполните следующую команду:
1 $ python detect_barcode.py --image images/barcode_02.jpg
Без проблем найден штрихкод кокосового масла. Пробуем еще:
1 $ python detect_barcode.py --image images/barcode_03.jpg
И на этом изображении мы успешно обнаружили штрихкод! Но что это мы все про еду, давайте перейдем к книгам.1 $ python detect_barcode.py --image images/barcode_04.jpg
И снова – никаких проблем! Сможем ли мы определить номер для отслеживания посылки?1 $ python detect_barcode.py --image images/barcode_05.jpg
И вновь наш алгоритм успешно обнаружил штрихкод.
Заключение
В этом посте мы рассмотрели необходимые шаги для обнаружения штрихкодов на изображениях с помощью технологий компьютерного зрения. Мы применили алгоритм, использующий язык программирования Python и библиотеку OpenCV.
В основе нашего алгоритма лежат следующие действия:
- Вычислите размер градиента по осям x и y.
- Отделите вертикальный градиент от горизонтального, чтобы выявить область штрихкода.
- Примените размытие и бинаризацию.
- Примените ядро к бинаризированной картинке для удаления «пробелов» между полосками.
- Произведите серию эрозий и дилатаций.
- Найдите на изображении самый большой контур, который и будет являться областью штрихкода.
Если вы хотите использовать более надёжный алгоритм обнаружения штрихкодов, стоит принять во внимание ориентацию изображения, а еще лучше — использовать самообучаемые системы, например, каскады Хаара или HOG+ Linear SVM, чтобы «сканировать» изображение на предмет областей со штрихкодом.
habr.com
Создать штрих код генератор штрих кодов онлайн
Выберите тип штрих кода EAN-8
В окно «штрих код» впишите цифры штрих кода
Выберите нужный масштаб
Выберите положение
Нажмите «создать штрих код»
Сохраните в предложенном формате
Символы EAN-8 следует использовать для маркировки малогабаритных упаковок предметов торговли, которые подлежат сканированию на кассовых терминалах, также они применяются и для идентификации иных предметов торговли, кодируются только цифровые данные.
Выберите тип штрих кода EAN-13
В окно «штрих код» впишите цифры штрих кода
Выберите нужный масштаб
Выберите положение
Нажмите «создать штрих код»
Сохраните в предложенном формате
Символы EAN-13 следует использовать для маркировки любых предметов торговли, которые подлежат сканированию на кассовых терминалах, также они применяются и для идентификации иных предметов торговли, кодируются только цифровые данные.
Выберите тип штрих кода ITF-14
В окно «штрих код» впишите цифры штрих кода, так же, как указано в примере
Выберите нужный масштаб
Выберите положение
Нажмите «создать штрих код»
Сохраните в предложенном формате
Штрих код ITF-14 не предполагается обрабатывать на кассовых терминалах, даный штрих код предназначен для обозначения групп одинаковых торговых единиц в транспортных упаковках.
Изменяя значение первой цифры-индикатора от 1 до 8, можно сформировать 8 уникальных номеров структуры штрихового кода ITF–14 для восьми различных видов стандартных транспортных упаковок одного и того же единичного товара, имеющего штрих код EAN-13 или EAN-8.
Выберите тип штрих кода Code 128
В окно «штрих код» впишите текст штрих кода (латинские буквы и цифры)
Выберите нужный масштаб
Выберите положение
Нажмите «создать штрих код»
Сохраните в предложенном формате
Code-128 (Код 128) используется для обеспечения наибольшей гибкости при кодировании данных с идентификаторами применения. В основном применяется для кодирования логистических единиц (паллет, контейнеров) и печатается на логистических этикетках. Главный идентификационный ключ, кодируемый в таком случае это SSCC (Серийный код транспортной упаковки) с идентификатором применения (00). Помимо кодирования идентификационных ключей допускается кодирование любой дополнительной информации например: вес, срок годности, номер серии, номер партии, дата изготовления, кодируется алфавитно-цифровая информация (латинские буквы и цифры).
Выберите тип штрих кода QR Code
Выберите нужный масштаб
Выберите положение
Нажмите «создать штрих код»
Сохраните в предложенном формате
Символы QR Code применяют для кодирования дополнительной информации к информации на упаковке. Кодируется алфавитно-цифровая информация.
Выберите тип штрих кода ISBN
В окно «штрих код» впишите цифры штрих кода, так же, как указано в примере
Выберите нужный масштаб
Выберите положение
Нажмите «создать штрих код»
Сохраните в предложенном формате
ISBN — код для книжных изданий
www.roscod.ru