Cómo generar códigos QR con Python. Mostramos cómo generar un fichero de imagen con el código QR correspondiente al texto introducido. Explicamos cómo leer un código QR. Las aplicaciones permiten introducción de los datos por parámetro.
- Códigos QR.
- Requisitos para generar códigos QR con Python.
- Generar códigos QR con Python.
- Leer códigos QR de imagen con Python.
- Ejecutando aplicación Python que genera códigos QR.
- Ejecutando aplicación Python que lee códigos QR.
- Descargar código fuente de script Python para leer y generar códigos QR.
Códigos QR
Un código QR (Quick Response Barcode ó código de barras de respuesta rápida) es un sistema para almacenar información en una matriz de puntos o un código de barras bidimensional. Estos códigos se caracterizan por los tres cuadrados que se encuentran en las esquinas y que sirven para que los lectores de códigos QR puedan detectar su posición.
Los códigos QR se usan para administración de inventarios en una gran variedad de industrias. Recientemente, la inclusión de software que lee códigos QR en teléfonos móviles, ha permitido nuevos usos orientados al consumidor, que se manifiestan en comodidades como el dejar de tener que introducir datos de forma manual en los teléfonos. Las direcciones y las URL se están volviendo cada vez más comunes en revistas, anuncios, emplazamientos turísticos, restaurantes (para acceder a su menú/carta), etc. El agregado de códigos QR en tarjetas de presentación también se está haciendo común, simplificando en gran medida la tarea de introducir detalles individuales de un nuevo cliente en la agenda de un teléfono móvil.
Los códigos QR también pueden leerse desde PC o smartphone mediante dispositivos de captura de imagen, como puede ser un escáner o la cámara de fotos, siempre y cuando estos dispositivos tengan algún software que permita leer los datos QR.
Requisitos para generar códigos QR con Python
Necesitaremos tener instalado Python y usaremos algún editor para generar el código fuente y compilar el programa. En el siguiente artículo explicamos cómo instalar Python y cómo instalar un IDE para desarrollo Python:
Usaremos la librería «qrcode» y «pillow» (para tratamiento de imágenes), que instalaremos con el siguiente comando:
pip install qrcode
pip install pillow
Generar códigos QR con Python
A continuación mostramos el código fuente en Python para generar códigos QR con diferentes formatos. El código QR generado tendrá el valor que se introduzca por consola o bien que se le pase como parámetro. La aplicación Python permitirá elegir (por parámetro) el tipo de código QR generado: círculo, cuadrado, Barra_Vertical, Barra_Horizontal, redondeado, Cuadrado_Grande, así como el fichero de imagen QR y la ruta donde se creará.
El código fuente va comentado explicando las partes más importantes. Guardaremos el siguiente código fuente Python en un fichero llamado generar_qr.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import qrcode from qrcode.image.styledpil import StyledPilImage from qrcode.image.styles.moduledrawers import CircleModuleDrawer, GappedSquareModuleDrawer, HorizontalBarsDrawer, RoundedModuleDrawer, SquareModuleDrawer, VerticalBarsDrawer import argparse import os # Preparamos el formato para el código QR qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) # Obtenemos el valor del código QR, o bien por parámetro o bien pidiéndolo al usuario parser = argparse.ArgumentParser() parser.add_argument("-d", "--dato", type=str, help="Dato con el que se generará el código QR (URL, texto, ...)") parser.add_argument("-t", "--tipo", type=str, help="Tipo de QR [círculo, cuadrado, Barra_Vertical, Barra_Horizontal, redondeado, Cuadrado_Grande]") parser.add_argument("-i", "--imagen", type=str, help="Ruta y nombre de fichero de imagen .png con QR que se generará") args = parser.parse_args() # Obtenemos el parámetro -d (dato) if args.dato: valorQR = args.dato else: valorQR = input("Introduzca el valor del código QR: ") # Obtenemos el parámetro -t (tipo) if args.tipo: tipoQR = args.tipo else: tipoQR = 'cuadrado_grande' tipoQR = tipoQR.upper() # Obtenemos el parámetro -i (fichero de imagen QR) if args.imagen: imagenQR = args.imagen else: imagenQR = os.path.dirname(os.path.abspath(__file__)) + '\codigo_qr.png' # Aplicamos el valor al objeto QR qr.add_data(valorQR) # Establecemos el tipo de QR según el indicado por parámetro -t if tipoQR == 'CÍRCULO': tipoQRC = CircleModuleDrawer() elif tipoQR == 'CUADRADO': tipoQRC = GappedSquareModuleDrawer() elif tipoQR == 'BARRA_VERTICAL': tipoQRC = VerticalBarsDrawer() elif tipoQR == 'BARRA_HORIZONTAL': tipoQRC = HorizontalBarsDrawer() elif tipoQR == 'REDONDEADO': tipoQRC = RoundedModuleDrawer() elif tipoQR == 'CUADRADO_GRANDE': tipoQRC = SquareModuleDrawer() # Generamos el código QR y lo almacenamos en el fichero de imagen PNG img = qr.make_image(image_factory=StyledPilImage, module_drawer=tipoQRC) f = open(imagenQR, "wb") img.save(f) |
Leer códigos QR de imagen con Python
Para leer el valor contenido en un código QR de una imagen usaremos el siguiente código fuente Python, lo guardaremos en un fichero con el nombre leer_qr.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import argparse import cv2 # Obtenemos el fichero de imagen QR para leer, o bien por parámetro o bien pidiéndolo al usuario parser = argparse.ArgumentParser() parser.add_argument("-f", "--fichero", type=str, help="Ruta y nombre del fichero de imagen QR a leer") parser.add_argument("-s", "--Solo_Valor", type=str, help="Mostrar sólo el valor leído (sí/no)") args = parser.parse_args() # Obtenemos el parámetro -f (fichero QR a leer) if args.fichero: ficheroQR = args.fichero else: ficheroQR = input("Introduzca el fichero QR a leer: ") # Obtenemos el parámetro -s (mostrar sólo el valor leído) if args.Solo_Valor: soloValor = args.Solo_Valor else: soloValor = "sí" # Leer un código QR de imagen img = cv2.imread(ficheroQR) det = cv2.QRCodeDetector() valorQRLeido, pts, st_code = det.detectAndDecode(img) # Mostramos el valor del QR leído if soloValor.upper() == "NO": print("El valor del QR leído es: ", valorQRLeido) else: print(valorQRLeido) |
Ejecutando aplicación Python que genera códigos QR
Para generar un código QR con el valor «https://www.proyectoa.com», con el formato de círculos y que se guarde el fichero de imagen qr_proyectoa.png en D:\ProyectoA_Python\QR\, ejecutaremos la aplicación Python con los siguientes parámetros:
«C:/Program Files/python.exe» d:/ProyectoA_Python/QR/generar_qr.py -d «https://www.proyectoa.com» -t «círculo» -i «D:\ProyectoA_Python\QR\qr_proyectoa.png»
((Suponemos que tenemos instalado Python en C:/Program Files/python.exe))
La aplicación se ejecutará y generará el fichero de imagen qr_proyectoa.png con el código QR:
Lo podremos abrir con cualquier visualizador de imágenes:
Y, usando cualquier dispositivo (como un smartphone) que lea códigos QR, nos obtendrá su valor: «https://www.proyectoa.com»:
Ejecutando aplicación Python que lee códigos QR
Para leer el valor de un código QR contenido en la imagen qr_proyectoa.png de la carpeta D:\ProyectoA_Python\QR\, ejecutaremos la aplicación Python con los siguientes parámetros :
«C:/Program Files/python.exe» d:/ProyectoA_Python/QR/leer_qr.py -s no -f «D:\ProyectoA_Python\QR\qr_proyectoa.png»
Nos devolverá: El valor del QR leído es: https://www.proyectoa.com
Si queremos que sólo devuelva el valor del QR (sin más mensajes), ejecutaremos:
«C:/Program Files/python.exe» d:/ProyectoA_Python/QR/leer_qr.py -s sí -f «D:\ProyectoA_Python\QR\qr_proyectoa.png»
Descargar código fuente de script Python para leer y generar códigos QR
A continuación mostramos enlace a la descarga gratuita del código fuente Python que lee y genera códigos QR: