С Python прочитаем любые штрих- и QR‑коды
Штрих-код — это метод представления данных в визуальной и машиночитаемой форме, он состоит из полос и пробелов. Сегодня мы видим штрих-коды повсюду, чаще всего на продуктах в супермаркетах.
Штрих-коды можно считывать с помощью оптического сканера штрих-кода, но здесь, для начала, напишем скрипт Python для считывания и декодирования штрих-кодов с рисунков, где они изображены.
Для выполнения описанных здесь упражнений необходимо установить нужные нам зависимости:
Как сделать считыватель штрих-кода на Python
Как только зависимости будут установлены, откройте новый файл Python и импортируйте то, что нужно для считывателя:
Я разбил всю функциональность по функциям и первая функция, которую мы обсудим, следующая:
Затем мы перебираем все обнаруженные штрих-коды, рисуем прямоугольник вокруг штрих-кода и печатаем тип и данные штрих-кода. Чтобы прояснить ситуацию, вот как каждый объект выглядел, если мы его распечатали:
Таким образом, функция pyzbar.decode() возвращает данные, содержащие штрих-код, тип штрих-кода, а также точки расположения в виде прямоугольника и многоугольника.
Это подводит нас к следующей функции, которую мы использовали, draw_barcode() :
Ну наконец то, он возвращает изображение, содержащее нарисованные штрих-коды. Теперь давайте воспользуемся этими функциями для наших примеров изображений:
В каждый файл мы загружаем его с помощью функции cv2.imread() и используем ранее обсуждавшуюся функцию decode() для декодирования штрих-кодов, а затем показываем фактическое изображение.
Обратите внимание, что скрипт также обнаружит QR-коды, и это нормально, но для получения более точных результатов читайте вторую часть этой заметки.
Когда я запускаю сценарий, он показывает каждое изображение и печатает его тип и данные, нажмите любую клавишу, и вы получите следующее изображение, вот мой результат:
Вот последнее показанное изображение:
Это здорово, теперь у вас есть отличный инструмент для создания собственного сканера штрих-кода на Python. Я знаю, что вы все хотите читать прямо с камеры и подготовил код для считывания и обнаружения штрих-кода с камеры в реальном времени. Вот он:
Вы также можете добавить какой-то звуковой сигнал при обнаружении каждого штрих-кода, так же, как в супермаркетах, ознакомьтесь с руководством по воспроизведению звуков, которые могут помочь вам в этом.
Как сгенерировать и прочитать QR-код в Python
Создание QR-кода
Во-первых, давайте начнем с создания QR-кодов, это в целом очень просто при наличии библиотеки qrcode :
Это сгенерирует новый файл изображения в текущем каталоге с именем «waksoft.susu.ru.png», который содержит изображение QR-кода указанных данных (в данном случае URL этого веб-сайта), будет выглядеть примерно так:
Итак, при создании класса QRCode мы указываем параметр версии, который представляет собой целое число от 1 до 40, которое контролирует размер изображения QR-кода (1 — маленький, матрица 21×21, 40 — матрица 185×185), но это будет перезаписано, когда данные не соответствуют указанному вами размеру. В нашем случае он автоматически масштабируется до версии 3.
Параметр box_size управляет количеством пикселей в каждом прямоугольнике QR-кода, тогда как граница определяет, сколько прямоугольников должно иметь толщину.
И форма изображения действительно увеличена, а не 21×21:
Читаем QR-код
Хорошо, откройте новый файл Python и следуйте за мной, давайте прочитаем только что сгенерированное изображение:
К счастью для нас, OpenCV уже имеет встроенный детектор QR-кода:
У нас есть изображение и детектор, давайте обнаружим и расшифруем эти данные:
Функция detectAndDecode() принимает изображение в качестве входных данных и декодирует его, чтобы вернуть кортеж из 3 значений: данные, декодированные из QR-кода, выходной массив вершин найденного четырехугольника QR-кода и выходное изображение, содержащее исправленный и преобразованный в двоичную форму QR-код.
Наконец, давайте покажем изображение и выйдем при нажатии клавиши:
После запуска распечатываются декодированные данные:
И показано следующее изображение:
Как видите, синие линии нарисованы точно в границах QR-кода. Отлично, мы закончили с этим скриптом, попробуйте запустить его с другими данными и посмотрите свои результаты!
Обратите внимание, что это идеально подходит для QR-кодов, а не для штрих-кодов.
Если вы хотите обнаруживать и декодировать QR-коды в реальном времени с помощью веб-камеры (и я уверен, что вы это делаете), вот код для этого:
Отлично, я закончил и теперь вы можете интегрировать его в свои собственные приложения!
QR и штрих-коды в Python
QR Codes метод 1
Код QR (Quick Response) — это двухмерный код, содержащий информацию. Фактически, он может хранить больший объем информации, чем даже штрих-коды. Как правило, это пиксельный блок, черно-белый (черные пиксели на белом фоне). На самом деле QR-коды используются всевозможными организациями и фирмами для хранения большого количества данных о себе для своих клиентов. Итак, допустим, вы проходили мимо компании и хотели узнать о ней больше. Предположим также, что у них был QR-код на рекламном щите или визитной карточке. Как правило, вы отсканируете QR-код и получите доступ к хранящейся в нем информации. Итак, мы спрашиваем, как мы можем записать информацию в QR-код? Что ж, это легкая часть; мы можем легко сделать это с помощью Python. В этом разделе мы узнаем, как сгенерировать QR-коды с помощью Python.
Первое, что нужно сделать, это установить qrcode. Также необходимо установить подушку для генерации изображения.
После того, как мы его установили, мы импортируем его.
Затем мы определяем веб-сайт или информацию, которую хотим сохранить в QR-коде.
h_url = «»»
www.google.com
This is a search engine. Another great search engine is
www.duckduckgo.com «»»
Теперь мы определяем переменную qr как qrcode.QRCode (), которая принимает не более 4 аргументов — версию, исправление ошибок, размер поля и границу. Параметр версии представляет собой размер QR-кода и находится в диапазоне от 1 до 40. Параметр размера блока, в частности, представляет собой размер каждого блока в пикселях. Также параметр границы определяет толщину границы. Параметр исправления ошибок определяет контроль ошибок для QR-кода.
После создания переменной qr мы добавляем информацию, которую хотим сохранить в ней, с помощью qr.add_data (). Для этого нужен один аргумент — информация, которую нужно добавить в QR-код.
qr. add_data ( h_url )
qr. make ( fit = True )
Затем мы создаем изображение и используем fill_color и back_color, чтобы определить цвета, которые мы хотим сделать для наших пикселей и фона. Однако здесь мы можем изменить цвета на RGB, если захотим.
Наконец, чтобы сохранить сгенерированный QR-код, мы используем save (), сохраняя его в каталоге python. Лучше всего хранить его как изображение png.
Весь код будет выглядеть примерно так:
This is a search engine. Another great search engine is
qr. add_data ( h_url )
qr. make ( fit = True )
QR-коды, метод 2
Есть много модулей для генерации QR-кодов! В этом примере мы будем использовать FoxHustle-QR.
Сначала установите его, используя:
Полный код занимает всего три строки:
В этом модуле требуется всего три строки кода вместо 10. Здесь мы использовали метод QRGenerator () для достижения этой цели. Затем мы передаем в QRGen два аргумента — контент, который вы хотите сохранить в QR-коде, и тип qr. Имейте в виду, что этот модуль дает QR-коды, которые иногда трудно декодировать с помощью декодеров QR-кодов.
QR-код, метод 3
Еще один генератор QR-кода (среди множества их) — qr-img.
Для начала установим нужный нам модуль:
Затем мы можем создать QR-код, используя следующий код:
Это генерирует QR-код с изображением в центре (в моем случае «own.png»). Немного необычно, но тем не менее работает. Здесь изображение — это изображение, которое вы хотите разместить в центре QR-кода. Out_image — это расположение и имя выходного изображения или QR-кода. Данные — это данные, которые вы хотите поместить в QR-код. И имя — это любое слово, какое захотите; это просто для удовольствия. Затем используйте метод qrpic () для генерации QR-кода, передав 4 аргумента — имя, изображение, данные и out_image.
QR-код декодер
Как бы здорово ни было создавать QR-коды, которые могут считывать телефонные приложения, было бы здорово создать декодер. Декодер QR-кода используется для чтения информации, содержащейся в QR-коде.
Для начала установим нужный нам модуль:
Затем мы декодируем с помощью метода qr_decode () и распечатываем его.
image = «qrcode.png»
text = qr_img. qr_decode ( image )
print ( text )
Обратите внимание, что это не работает с QR-кодами, созданными с помощью метода 2.
Штрих-коды
Штрих-код — это многострочный объект, который мы все видим практически на всем. Это то, что мы видим на наших пищевых продуктах, на продуктах, купленных в магазинах, и практически на всем, что мы можем купить. Эти штрих-коды, как и QR-коды, хранят информацию. Однако проблема со штрих-кодами заключается в том, что они ограничены примерно 20 буквенно-цифровыми символами. Здесь QR-коды — это решение проблемы. В этом разделе мы узнаем, как создавать штрих-коды с помощью Python.
Во-первых, начнем с установки модуля штрих-кода:
Этот конкретный модуль предлагает 11 различных типов штрих-кодов: EAN-8, EAN-13, EAN-14, UPC-A, JAN, ISBN-10, ISBN-13, ISSN, Code 39, Code 128 и PZN. В этом примере мы собираемся использовать EAN-13.
Чтобы сгенерировать штрих-код, нам нужно всего три строки кода:
ean = barcode. get_barcode_class ( ‘ean13’ )
ean2 = ean ( ‘4502264821487’ )
ean2. save ( ‘barcode’ )
Здесь метод save используется для сохранения штрих-кода в изображение, и он принимает единственный аргумент — имя штрих-кода, который вы хотите сохранить. Эти три строки кода создают так называемый файл svg.
Но предположим, что вы хотите вместо изображения png, тогда используйте следующий код:
from barcode. writer import ImageWriter
import barcode
И штрих-коды, и QR-коды широко используются для хранения информации о продукте, компании или другом материале. Разница между штрих-кодом и QR-кодом заключается в том, что QR-код может хранить примерно в 350 раз больше информации, чем штрих-код, и поэтому более широко используется в наши дни. В этом руководстве мы узнали, как с помощью Python создавать штрих-коды и QR-коды. Теперь вы можете создавать свои собственные штрих-коды и QR-коды для своих целей!
Генератор штрих кодов python
Viivakoodi (barcode in Suomi) is the fork of pyBarcode project.
This library provides a simple way to create barcodes using only the Python standardlib. The barcodes where created as SVG objects.
Make sure you have setuptools/distribute installed.
Unpack the downloaded file, cd into the viivakoodi directory and run python setup.py install. Or just copy the barcode dir somewhere in your PYTHONPATH.
The best way is to use pip: pip install viivakoodi.
EAN-8, EAN-13, EAN-14, UPC-A, JAN, ISBN-10, ISBN-13, ISSN, Code 39, Code 128, PZN
Now open ean13_barcode.[svg|png] in a graphic app or simply in your browser and see the created barcode. That’s it.
v0.8: | Code 128 added. Data for charsets and bars moved to subpackage barcode.charsets. |
---|---|
v0.7: | Fixed some issues with fontsize and fontalignment. Added Python 3 support. It’s not well tested yet, but the tests run without errors with Python 3.3. Commandline script added. |
v0.6: | Changed save and write methods to take the options as a dict not as keyword arguments (fix this in your code). Added option to left align the text under the barcode. Fixed bug with EAN13 generation. |
v0.5.0: | Added new generate function to do all generation in one step. Moved writer from a subpackage to a module (this breaks some existing code). UPC is now rendered as real UPC, not as EAN13 with the leading «0». |
v0.4.3: | Fixed bug in new write method (related to PIL) and updated docs. |
v0.4.2: | Added write method to support file like objects as target. |
v0.4.1: | Bugfix release. Removed redundancy in input validation. EAN8 was broken. It now works as expected. |
v0.4: | Removed **options from writers __init__ method. These options never had effect. They were always overwritten by default_options. New config option available: text_distance (the distance between barcode and text). |
v0.4b2: | Basic documentation included. The barcode object now has a new attribute called raw to have the rendered output without saving to disk. |
v0.4b1: | Support for rendering barcodes as images is implemented. PIL is required to use it. |
v0.3: | Compression for SVG output now works. |
v0.3b1: | Writer API has changed for simple adding new (own) writers. SVG output is now generated with xml.dom module instead of stringformatting (makes it more robust). |
v0.2.1: | API of render changed. Now render takes keyword arguments instead of a dict. |
v0.2: | More tests added. |
v0.1: | First release. |
About
Barcode generator for Python. Fork of pyBarcode project.
Как создавать штрих-коды в ваших PDF с Python
Библиотека Reportlab — отличный способ создания PDF-файлов на Python. Недавно я заметил, что в нем есть возможность делать штрих-коды. Я слышал о том, что он может генерировать QR-коды, но я действительно не копался под одеялом, чтобы посмотреть, что еще он мог сделать. В этом руководстве мы рассмотрим некоторые штрих-коды, которые может генерировать Reportlab. Если у вас еще нет Reportlab, зайдите на их сайт и получите его, прежде чем перейти к статье.
Библиотека штрихкодов Reportlab
Reportlab предоставляет несколько различных типов штрих-кодов: code39 (т.е. код 3 из 9), code93, код 128, EANBC, QR и USPS. Я также видел одно под названием «четыре состояния», но я не мог понять, как заставить его работать. Под некоторыми из этих типов есть подтипы, такие как Стандарт, Расширенный или Мультиширина. Мне не очень повезло заставить MultiWidth работать с штрих-кодом code128, поскольку он постоянно выдавал мне ошибку атрибута, поэтому мы просто проигнорируем это. Если вы знаете, как это сделать, напишите мне в комментариях или через мою контактную форму и дайте мне знать. Я обновлю статью, если кто-нибудь может показать мне, как добавить этот или четырехсторонний штрих-код.
В любом случае, лучший способ научиться — это просто написать код. Вот довольно простой пример:
Давайте разберемся с этим немного. Код39.Extended39 на самом деле не принимает ничего, кроме самого значения. С другой стороны, code39.Standard39, code93.Standard93 и code128.Code128 имеют в основном один и тот же API. Вы можете изменить barWidth, barHeight, включить символы запуска / остановки и добавить «тихие» зоны. Модуль штрих-кода usps предоставляет два типа штрих-кода: FIM и POSTNET. FIM или Faceing ID Marks кодируют только одну букву (AD), которая лично мне не показалась очень интересной. Поэтому я просто показываю версию POSTNET, которая должна быть довольно знакома людям в Соединенных Штатах, так как она отображается внизу большинства конвертов. POSTNET кодирует почтовый индекс!
Генератор штрих кодов python
Pure python QR Code generator
For a standard install (which will include pillow for generating images), run:
A Quick Response code is a two-dimensional pictographic code used for its fast readability and comparatively large storage capacity. The code consists of black modules arranged in a square pattern on a white background. The information encoded can be made up of any kind of data (e.g., binary, alphanumeric, or Kanji symbols)
From the command line, use the installed qr script:
Or in Python, use the make shortcut function:
For more control, use the QRCode class. For example:
The version parameter is an integer from 1 to 40 that controls the size of the QR Code (the smallest, version 1, is a 21×21 matrix). Set to None and use the fit parameter when making the code to determine this automatically.
fill_color and back_color can change the background and the painting color of the QR, when using the default image factory. Both parameters accept RGB color tuples.
The error_correction parameter controls the error correction used for the QR Code. The following four constants are made available on the qrcode package:
The box_size parameter controls how many pixels each «box» of the QR code is.
The border parameter controls how many boxes thick the border should be (the default is 4, which is the minimum according to the specs).
Other image factories
You can encode as SVG, or use a new pure Python image processor to encode to PNG images.
The Python examples below use the make shortcut. The same image_factory keyword argument is a valid option for the QRCode class for more advanced usage.
You can create the entire SVG or an SVG fragment. When building an entire SVG image, you can use the factory that combines as a path (recommended, and default for the script) or a factory that creates a simple set of rectangles.
From your command line:
Two other related factories are available that work the same, but also fill the background of the SVG with white:
Install the following two packages:
From your command line:
To apply styles to the QRCode, use the StyledPilImage image factory. This takes an optional module drawer to control the shape of the QR Code, an optional color mask to change the colors of the QR Code, and an optional image to embed in the center.
These QR Codes are not guaranteed to work with all readers, so do some experimentation and set the error correction to high (especially if embedding an image).
Examples to draw the QR code with rounded corners, radial gradiant and embedded image:
Get the text content from print_ascii:
The add_data method will append data to the current QR object. To add new data by replacing previous content in the same object, first use clear method:
Pipe ascii output to text file in command line:
Alternative to piping output to file to avoid PoweShell issues: