Cómo crear y decodificar un código QR usando Python

Un código QR (código de respuesta rápida) es un tipo de código de barras de matriz que almacena datos codificados. Se le denominó "Código de respuesta rápida" debido a su capacidad para almacenar y acceder a grandes datos en muy poco tiempo. Puede encontrar estos códigos QR en todas partes: carteles, revistas, salas de cine, sitios web, gimnasios, anuncios, etc.

Con Python puede generar su propio código QR, personalizarlo y decodificar información de un código QR.

Configurar un entorno Python

Se recomienda configurar un entorno aislado para proyectos de Python. Al hacer esto, puede comprender más sobre las dependencias del proyecto.

Crear un entorno virtual

Puede crear un entorno virtual en Python de varias formas: virtualenv, virtualenvwrapper o distribución Anaconda. Aquí usaremos virtualenv para crear un entorno virtual.

  1. Cree una carpeta con el comando mkdir [Carpeta] , donde desea crear este proyecto.
  2. Escriba cd [Carpeta] en el símbolo del sistema para moverse al nuevo directorio.
  3. Escriba virtualenv [Nombre del entorno] para crear un entorno virtual.
  4. Active el entorno virtual escribiendo [Nombre del entorno] Scripts active

Instalar paquetes requeridos

Instale los paquetes de Python necesarios con el comando pip. Asegúrese de tener pip instalado en su sistema .

Ejecute el siguiente comando en su símbolo del sistema.

 pip3 install opencv-python qrcode numpy Image

Si no desea instalar todos los paquetes de una vez, puede instalarlos uno por uno como:

 pip3 install opencv-python

Esto instala el paquete opencv-python que se utiliza principalmente para visión por computadora, aprendizaje automático y procesamiento de imágenes.

 pip3 install qrcode

Esto instala el paquete python qrcode que se utiliza para generar y leer códigos QR.

 pip3 install numpy

Esto instala el paquete de python numpy que se utiliza para trabajar con matrices.

 pip3 install Image

Esto instala el paquete Image python que proporciona una serie de funciones para cargar imágenes desde archivos y crear nuevas imágenes.

Generar código QR

Para generar el código, cree un nuevo archivo con extensión .py que tendrá el código para generar el código QR.

Pegue el siguiente código en su archivo Python y ejecute el programa.

 import qrcode
# Data for which you want to make QR code
# Here we are using the URL of the MakeUseOf website
data = "https://www.makeuseof.com/"
# File name of the QR code Image
# Change it with your desired file name
QRCodefile = "MUOQRCode.png"
# Generating the QR code
QRimage = qrcode.make(data)
# Saving image into a file
QRimage.save(QRCodefile)

Esto creará una imagen de código QR (MUOQRCode.png) para los datos proporcionados (en este caso, www.makeuseof.com ). El código QR generado se verá así:

Genere un código QR personalizado

Puede personalizar el código QR con las increíbles funciones de la biblioteca de códigos QR. Puede cambiar el color de relleno, el color de fondo, el tamaño de la imagen, el tamaño del cuadro y el grosor del borde del código QR.

Cambiar el tamaño de la imagen y el cuadro

Puede cambiar el tamaño de la imagen del código QR utilizando el parámetro de versión en la clase QRCode. Acepta un número entero entre 1 y 40 donde 1 equivale a una matriz de 21×21 y 40 es equivalente a una matriz de 185×185. Tenga en cuenta que los datos no se ajustan al tamaño especificado, la versión se ampliará automáticamente.

De manera similar, puede cambiar el tamaño de la caja usando el parámetro box_size en la clase QRCode. Especifica los píxeles de cada cuadro en el código QR.

 # Importing libraries
import qrcode
import numpy as np
# Data which for you want to make QR code
# Here we are using URL of MakeUseOf website
data = "https://www.makeuseof.com/"
# Name of the QR code Image file
QRCodefile = "CustomisedImgBoxQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode(version=1, box_size=12)
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image()
image.save(QRCodefile)
# print the image size (version)
print("Size of the QR image(Version):")
print(np.array(qrObject.get_matrix()).shape)

Se generará el siguiente archivo de imagen de código QR:

Además, se mostrará la siguiente salida:

 Size of the QR image(Version):
(33, 33)

Tenga en cuenta que la versión se escala automáticamente según el tamaño de los datos.

Cambiar el color de relleno

Puede cambiar el color de relleno del código QR mediante el parámetro fill_color .

 # Importing library
import qrcode
# Data for which you want to make QR Code
# Here we are using URL of MakeUseOf website
data = "https://www.makeuseof.com/"
# Name of the QR Code Image file
QRCodefile = "CustomisedFillColorQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode()
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image(fill_color="red")
# Saving image into a file
image.save(QRCodefile)

Se generará el siguiente archivo de imagen de código QR:

Cambiar el color de fondo

Puede cambiar el color de fondo del código QR mediante el parámetro back_color .

 # Importing library
import qrcode
# Data for which you want to make QR Code
# Here we are using URL of MakeUseOf website
data = "https://www.makeuseof.com/"
# Name of the QR Code Image file
QRCodefile = "CustomisedBGColorQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode()
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image(back_color="blue")
# Saving image into a file
image.save(QRCodefile)

Se generará el siguiente archivo de imagen de código QR:

Cambiar el grosor del borde

Puede cambiar el grosor del borde del código QR utilizando el parámetro de borde en la clase QRCode.

 # Importing libraries
import qrcode
# Data for which you want to make QR Code
# Here we are using URL of MakeUseOf website
data = "https://www.makeuseof.com/"
# Name of the QR Code Image file
QRCodefile = "CustomisedBorderQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode(border=10)
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image()
image.save(QRCodefile)

Se generará el siguiente archivo de imagen de código QR:

Decodificar el código QR usando la imagen del código QR

Puede decodificar información de la imagen del código QR utilizando la biblioteca OpenCV de Python. OpenCV tiene un detector de códigos QR incorporado. Con el detector puede decodificar datos del código QR.

 # Import Library
import cv2
# Name of the QR Code Image file
filename = "MUOQRCode.png"
# read the QRCODE image
image = cv2.imread(filename)
# initialize the cv2 QRCode detector
detector = cv2.QRCodeDetector()
# detect and decode
data, vertices_array, binary_qrcode = detector.detectAndDecode(image)
# if there is a QR code
# print the data
if vertices_array is not None:
print("QRCode data:")
print(data)
else:
print("There was some error")

Si la imagen proporcionada es un código QR válido, se mostrarán los datos decodificados. En este caso, se generará la siguiente salida:

 QRCode data:
https://www.makeuseof.com/

Decodificar código QR en vivo usando una cámara web

La mayoría de las veces, las personas tienden a usar una cámara web para escanear códigos QR. Usando el potencial de la biblioteca Python y OpenCV, puede decodificar fácilmente datos de un código QR.

 import cv2
# initalize the camera
cap = cv2.VideoCapture(0)
# initialize the OpenCV QRCode detector
detector = cv2.QRCodeDetector()
while True:
_, img = cap.read()
# detect and decode
data, vertices_array, _ = detector.detectAndDecode(img)
# check if there is a QRCode in the image
if vertices_array is not None:
if data:
print("QR Code detected, data:", data)
# display the result
cv2.imshow("img", img)
# Enter q to Quit
if cv2.waitKey(1) == ord("q"):
break
cap.release()
cv2.destroyAllWindows()

Cuando ejecute este código, su cámara web se abrirá automáticamente. Simplemente mantenga el código QR frente a la cámara web y los datos se decodificarán y mostrarán en el símbolo del sistema.

Codificar y decodificar códigos QR de forma sencilla

Con este artículo, puede codificar, decodificar y personalizar fácilmente códigos QR como desee. Incluso puede crear una aplicación completa de generación de escáner de código QR utilizando el código proporcionado.

Hay varias formas creativas de utilizar códigos QR . Sea creativo y use los códigos QR como desee.