Создаем QR-коды с помощью Python
Нас всюду окружают QR-коды. Это удобный способ передать пользователю ссылку на сайт в рекламе, пароль от Wi-Fi или страницу загрузки меню в кафе. Их используют, чтобы получить номер в очереди, подтвердить вакцинацию, быстро проверить документы. QR-коды на достопримечательностях позволяют загрузить их изображения, трехмерные модели, информацию и даже музыку (как, например, шопеновские лавочки в Варшаве), расширяющие наш опыт туризма. Они могут заменить увесистую стопку скидочных карточек и упростить авторизацию в мессенджере.
В профессиональной деятельности QR-коды массово используются для инвентаризации, маркировки продуктов и образцов. Такие задачи остро нуждаются в автоматизации. К счастью, в Python есть модуль qrcode, позволяющий превратить текст в симпатичные квадратики.
Создаем QR-коды
Для начала, нам нужно установить модуль qrcode. Он использует библиотеку Pillow, так что мы загрузим все разом:
Теперь нам даже необязательно писать программу, чтобы создать QR-код. Мы можем сделать это прямо в командной строке.
qr "https://okumy.com/" > okumy.png
В результате мы получим такое изображение:
В Python мы можем воспользоваться функцией qrcode.make() :
import qrcode img = qrcode.make('https://okumy.com/') type(img) # qrcode.image.pil.PilImage img.save("okumy.png")
А теперь напишем программу для инвентаризации. Она автоматически сгенерирует QR-коды с инвентарным номером для каждого предмета. Останется только распечатать их на наклейках в ближайшем копицентре. Докупив оборудование, мы можем начать с номера, на котором остановились.
import qrcode def main(): start = int(input('Введите первый номер:')) stop = int(input('Введите последний номер:')) for i in range(start, stop + 1): value = '#' + str(i).rjust(8, '0') qrcode.make(value).save(value + '.png') if __name__ == '__main__': main()
Теперь можно держать все инвентарные номера в базе данных, и управлять списанием прямо с телефона.
Продвинутые QR-коды
Если вы хотите большего, можно воспользоваться классом qrcode.QRCode . Он позволяет настраивать разные параметры.
import qrcode qr = qrcode.QRCode( version=10, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=15, border=6, ) qr.add_data('https://okumy.com/') qr.make(fit=True) img = qr.make_image(fill_color=(75, 0, 75), back_color=(190, 190, 255)).save('ok.png')
version — число от 1 до 40, отвечающее за размер поля QR-кода. Единица задает матрицу 21 на 21 квадрат. None позволяет автоматически подстраивать размер.
error_correction — определяет избыточность QR-кода, допустимый процент ошибок. Варьируется от 7% ( ERROR_CORRECT_L ) до 30% ( ERROR_CORRECT_H ), по умолчанию — 15%.
box_size — размер квадратов в пикселях.
border — определяет толщину границы. Не может быть меньше 4 (значение по умолчанию).
fill_color , black_color — это цвет фона и квадратов. Желательно делать их контрастными, иначе камера телефона не сможет прочесть QR-код. Помимо текста, они могут принимать RGB-кортежи.
Заключение
Модуль qrcode позволяет генерировать QR-коды в Python или прямо из командной строки. Базовая функция make() позволяет создать QR-код в одну строку, а использование класса QRCode позволит контролировать разнообразные параметры. Этому модулю можно найти множество самых разнообразных применений, от эффектной рекламы до граффити.
Практический Python для начинающих
Станьте junior Python программистом за 7 месяцев
Python — cоздание и считывание QR кода
QR код является в настоящее время распространенным способом хранение информации, как на реальных объектах так и в виртуальной среде, например сканированием штрих кода можно оплатить покупку или перейти на интересующий сайт. Данную возможность можно реализовать в Python , используя Opencv, имеющий встроенную функцию для считывания информации, и библиотеки qrcode. Для начала установим соответствующие пакеты:
pip3 install opencv-python qrcode
import qrcode # импотируем модуль
string = «https://myrusakov.ru» # строка для перевода в QR
file = «myrusakov_out.jpg» # файл для хранения полученного штрих кода
image = qrcode.make(string) # метод отвечает за преобразование строки в QR
image.save(file) # сохранение полученного объекта в файл myrusakov_out.jpg
При этом в QR коде можно закодировать достаточно длинную строку, размеры которой все же ограничены. Нас же пока что интересует хранение адресной строки сайта, и последующее считывание данных. Следует отметить что для считывания кода в программной области существует множество инструментов, мы же используем Opencv, как наиболее удобный для нас, в виду возможности интеграции с веб камерой компьютера, или видеопотоком. Для корректного исполнения кода, изображение с QR кодом следует держать одной папке с нашим скриптом. Следующий скрипт выводит декодированную строку.
import cv2 # импорт модуля из библиотеки Opencv
import numpy as np # модуль обработки массивов
import sys # системный модуль
import time
# Первый блок проверяет условие, передан ли скрипту в командной строке дополнительный аргумент в виде картинки **QR кода**. Если первое условие ложно, то считывается указанная нами картинка.
if len(sys.argv)>1:
inputImage = cv2.imread(sys.argv[1])
else:
inputImage = cv2.imread(«myrusakov_out.jpg») # стандартный метод opencv для считывания изображения
# Создание функции выводящей в отдельном окне изображение QR с синим обрамлением.
def display(im, bbox):
cv2.line(im, tuple(bbox[j][0]), tuple(bbox[ (j+1) % n][0]), (255,0,0), 3)
# Display results
cv2.imshow(«Results», im)
# В Opencv имеется встроенный метод детектор QR
qrDecoder = cv2.QRCodeDetector() # создание объекта детектора
# Нахождение и декодирование нашего кода. Метод **detectAndDecode** возвращает кортеж из трех значений которыми кодируется QR, где первый аргумент data содержит декодированную строку, bbox — координаты вершин нашего изображения и rectifiedImage, содержит **QR** изображение в виде массива пикселей.
data, bbox, rectifiedImage = qrDecoder.detectAndDecode(inputImage)
print(«Decoded Data : <>«.format(data)) # вывод декодированной строки
#cv2.imshow(«Rectified QRCode», rectifiedImage);
print(«QR Code not detected»)
Таким образом, в данной статье мы научились программно создавать QR код из исходных данных, а также расшифровывать его.
Создано 24.09.2020 13:00:00
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
Генерация и считывание QR-кода в Python
Статьи
Введение
В данной статье научимся генерировать и считывать QR-код в языке программирования Python.
Генерация QR-кода в Python
Чтобы сгенерировать QR-код нам нужен модуль под названием qrcode. Для его установки нужно перейти в терминал/командную строку, прописать pip install qrcode, нажать Enter и ждать установки.
После инсталляции модуля мы его импортируем:
Теперь сохраним в переменную data ссылку, на которую будет вести QR-код. Это может быть всё что угодно, но в качестве примера я укажу ссылку на этот сайт:
import qrcode data = "https://it-start.online"
Далее нам нужно сгенерировать сам QR-код. Для этого используем функцию make():
import qrcode data = "https://it-start.online" img = qrcode.make(data)
Методом save() сохраним итоговый результат:
import qrcode data = "https://it-start.online" img = qrcode.make(data) img.save('qr-code name.png')
Считывание QR-кода в Python
Для считывания QR-кода нам понадобится библиотека под названием cv2. Для её установки нужно перейти в терминал/командную строку, прописать pip install opencv-python нажать Enter и ждать установки.
После инсталляции импортируем библиотеку cv2:
При помощи функции imread() откроем изображение с QR-кодом:
import cv2 img = cv2.imread('qr-code name.png')
Создадим экземпляр класса QRCodeDetector():
import cv2 img = cv2.imread('qr-code name.png') detector = cv2.QRCodeDetector()
Осталось считать qr-код и вывести в консоль:
import cv2 img = cv2.imread("qr-code name.png") detector = cv2.QRCodeDetector() data, bbox, straight_qrcode = detector.detectAndDecode(img) print(f"Данные из qr-кода: ") # Вывод: Данные из qr-кода: https://it-start.online
Заключение
В ходе статьи мы с Вами научились генерировать и считывать QR-коды в языке программирования Python. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂
Как сделать QR код с картинкой на Python
Как поместить полноценное изображение на фон QR кода с помощью Python (быстро, без регистрации и смс).
Суть проблемы
Всем привет, Хабрчане! В наше нелегкое время QR коды требуют на каждом углу, от Кинотеатров до общественных Туалетов. Пандемия увеличила популярность этих удобных квадратов и дала понимание, что без них не обойтись.
К сожалению их удобство не смогло совладать с раздражающим процессом демонстрации сертификата администраторам и охранникам во всех общественных местах.
Лица проверяющих, к которым зачастую выстраиваются очереди, выглядят мягко сказать недовольными. А если этот набор пикселей затерялся в галерее… И так пару раз за день. Вся эта процедура раздражает и бесит!
Поиск решения
Мне надоело показывать унылые QR коды унылым администраторам и охранникам заведений, и решил чуть приободрить это тухлое занятие.
Идея заключалась в генерации забавных QR-кодов. Тут же побежал на просторы интернетов в поисках готовых библиотек и модулей.
Из достойного попался на глаза модуль MyQR (Amazing-QR):
- Плюсы: На Python, возможность создания gif изображений
- Минусы: Шакальное качество, эстетически несочетающиеся с изображением полосы
- Источник — https://github.com/x-hw/amazing-qr
К великому сожалению все они оказались чересчур примитивными, генерирующими пережатый 8/10 шакалов дЖпег со страшными полосами в QR коде, что совсем мне не подходило.
Время костылей
Было решено написать свой костыль модуль-надстройку для qrcode (Python).
Определился с минимальными требованиями для него:
- Добротное качество выходного изображения
- Отсутствие непонятных позиционных полос
- Возможность изменения стиля и цвета пикселей* кода
Весь код есть на Github, ссылка будет внизу, в источниках
И так, начнем…
Первым делом устанавливаем все зависимости командой: pip install -r requirements.txt
В зависимости от вашей ОС устанавливаем модуль pyzbar. Инструкция: https://pypi.org/project/pyzbar/
Если у вас Mac OS и вылезают ошибки zbar, то перед каждым запуском ОС выполняйте команду: export DYLD_LIBRARY_PATH=/opt/homebrew/lib
Все остальное для быстрого использования уже настроено и готово к работе, просто откройте файл example.py
from path import Path from main import gen_qr_code text = "текст для шифровки в QR код" path_to_download = Path().joinpath("example", "example.jpg") path_to_save = Path().joinpath("example", "example.png") gen_qr_code(text, path_to_download, path_to_save)
Модуль Path нужен для работы с путями. Функция gen_qr_code является генератором QR-кода, для нее подготавливаем:
- text — текст, url, то что будет шифроваться в QR код
- path_to_download — путь до фоновой картинки (вместе с именем и форматом самой картинки)
- path_to_save — путь куда сохранять готовое изображение (в формате .png)
1) Передаем 3 аргумента в gen_qr_code()
2) Запуск из корневой директории команды — python example.py
Логика работы банальна — Фоновое изображение автоматически подгоняется под будущие размеры QR-кода, затем модуль qrcode генерирует числовую матрицу из текста, который ему передали, после модуль Pillow рисует png картинку из матрицы, и наконец png накладывается на фоновую картинку.
Хочу поблагодарить за внимание дорогие мои, добра вам и счастья в копилку. Сделаем этот мир чуточку веселее!
Если кого нибудь заинтересует более подробный функционал (изменение цвета, яркости, формы пикселей qr кода — прошу написать мне, с удовольствием поделюсь)