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):
n = len(bbox)
for j in range(n):
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)
if len(data)>0:
print("Decoded Data : {}".format(data)) # вывод декодированной строки
display(inputImage, bbox)
#rectifiedImage = np.uint8(rectifiedImage);
#cv2.imshow("Rectified QRCode", rectifiedImage);
else:
print("QR Code not detected")
cv2.imshow("Results", inputImage)
cv2.waitKey(0)
cv2.destroyAllWindows()
Таким образом, в данной статье мы научились программно создавать QR код из исходных данных, а также расшифровывать его.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.