Índice
Utilizar pyzbar para decodificar códigos de barras y códigos QR unidimensionales
Al leer este artículo, aprenderá sobre los consejos y trucos para generar códigos de barras unidimensionales en diferentes formatos, así como la generación de códigos de respuesta rápida (QR Code).
Además, este tutorial describe los métodos para decodificar tanto el código de barras como el código QR utilizando la misma biblioteca de Python.
En este tutorial, utilizaré el módulo llamado decodificación pyzbar
. Basado en la documentación oficial de pyzbar
“… Una biblioteca Python pura que lee códigos de barras unidimensionales y códigos QR utilizando la biblioteca zbar, un paquete de software de código abierto para leer códigos de barras de varias fuentes, como secuencias de video, archivos de imagen y sensores de intensidad sin procesar.
Admite muchas simbologías populares (tipos de códigos de barras), incluidos EAN-13 / UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 y QR Code ”.
Según los experimentos que he realizado, pyzbar
se desempeña mejor en comparación con python-opencv
en términos de precisión al decodificar códigos QR. Además de eso, pyzbar
también puede decodificar códigos de barras.
Pasemos a la siguiente sección y comencemos a instalar los módulos necesarios.
1. Configuración
Se recomienda encarecidamente configurar un entorno virtual antes de continuar con la instalación. Puede instalar fácilmente todos los módulos a través de pip install
.
Nuestro primer módulo es el paquete de código de barras python que ayuda a generar códigos de barras unidimensionales basados en los formatos que hemos especificado. Ejecute el siguiente comando para instalarlo
pip install python-barcode
De forma predeterminada, el resultado se exportará como SVG. Necesita instalar dependencias adicionales como Pillow . Puede optar por instalar las dependencias de forma independiente o junto con python-barcodelo :
pip install python-barcode[images]
Puede instalar el qrcodepaquete
individualmente a través del siguiente comando.
pip install qrcode
Opcionalmente, también puede incluir las Pillowdependencias
junto con la instalación estándar.
pip install qrcode[pil]
La instalación de pyzbar
es un poco complicada y depende del sistema operativo de su máquina.
- Para los usuarios de Windows,
zbar
DLL viene junto con las ruedas de Windows Python. - Para Mac OS X, puede instalar la
zbar
mediante el siguiente comando.
brew install zbar
- El siguiente comando debe usarse si está usando Linux.
sudo apt-get install libzbar0
- Una vez que haya terminado, ejecute el siguiente comando para instalar el paquete Python
pyzbar
.
pip install pyzbar
De hecho, también es compatible con la funcionalidad de línea de comandos que le permite ejecutarlo directamente en la línea de comandos. Para hacerlo, debe instalarlo el programa de la siguiente manera:
pip install pyzbar[scripts]
2. Generación de códigos de barras
En esta sección, vamos a generar códigos de barras usando el paquete python-barcode
.
En el momento de escribir este artículo, este paquete admite los siguientes formatos:
- EAN-8
- EAN-13
- EAN-14
- UPC-A
- ENE
- ISBN-10
- ISBN-13
- ISSN
- Código 39
- Código 128
- PZN
- Voy a generar un nuevo código de barras usando el formato EAN13. El resultado estará en formato PNG.
Agreguemos la siguiente declaración de importación. ImageWriter
necesario si está guardando los resultados como imágenes. De lo contrario, se establecerá de forma predeterminada en SVG.
from barcode import EAN13 from barcode.writer import ImageWriter
Continúe agregando el siguiente código debajo. Dado que estamos escribiendo una imagen, debe especificar el modo de archivo como wb
. Para su información, EAN13 acepta una cadena que contiene 12 dígitos en lugar de 13.
El último dígito es una suma de verificación y se generará automáticamente. Si su entrada es una cadena de 13 dígitos, se ignorará el último dígito. No podrá ser visto este último dígito.
with open('barcode.png', 'wb') as f: EAN13('123456789102', writer=ImageWriter()).write(f)
El fragmento de código completo es el siguiente:
Debería generar la siguiente imagen cuando ejecute el archivo Python.
3. Generación de QRCode
La generación de código QR es un poco complicada en comparación con el código de barras debido al hecho de que el código QR es bidimensional .
Agregue la siguiente declaración de importación
import qrcode from PIL import Image
Cree una instancia de QRCode
objeto con los siguientes parámetros
qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=10, border=4, )
-
version
— Controla el tamaño del código QR. Acepta un número entero de 1 a 40. La versión 1 consta de una matriz de 21 x 21. -
error_correction
— Controlar la corrección de errores utilizada para el Código QR. -
box_size
— Controla el número de píxeles de cada cuadro del código QR. -
border
— Controlar el grosor de las cajas del borde. El valor predeterminado es 4, que también es el valor mínimo de acuerdo con la especificación.
Hay 4 constantes disponibles para error_correction
. Cuanto mayor sean los errores que se puedan corregir, mejor.
-
ERROR_CORRECT_L
— Se pueden corregir aproximadamente un 7% o menos de errores. -
ERROR_CORRECT_M
— Se pueden corregir aproximadamente un 15% o menos de errores. Este es el valor predeterminado. -
ERROR_CORRECT_Q
— Se pueden corregir aproximadamente un 25% o menos de errores. -
ERROR_CORRECT_H
— Se pueden corregir aproximadamente un 30% o menos de errores.
Continúe agregando el siguiente fragmento de código debajo. Reemplace el parámetro de entrada por add_data
según sus propios casos de uso.
qr.add_data("https://manualestutor.com/@ngwaifoong92") qr.make(fit=True)img = qr.make_image(fill_color="black", back_color="white") img.save("qrcode.png")
Puede encontrar el código completo en el siguiente extracto .
import qrcode from PIL import Image qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=10, border=4, ) qr.add_data("https://manualestutor.com/@ngwaifoong92") qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") img.save("qrcode.png")
Debería obtener un código QR una vez que haya ejecutado el código. En mi caso, se ve así.
Una vez que has terminado, pase a la siguiente sección y comience a implementar nuestro decodificador.
4. Decodificación con pyzbar
Una característica principal que hemos visto de pyzbar
es que la decodificación se realiza directamente utilizando la misma función.
Además, admite la decodificación de varios códigos de barras o códigos QR en una sola imagen. Importar el decode()
, las cuales funcionan desde el módulo de la siguiente manera:
from pyzbar.pyzbar import decode
Puede pasar una instancia de PIL.Image
o una instancia de numpy.ndarray
. Puede cargar fácilmente una imagen en numpy.ndarry
utilizando OpenCV
. Para cargar con PIL
, usa el siguiente código
from PIL import Imageimg = Image.open('qrcode.png')
Aquí hay un ejemplo de cómo puede cargar su imagen usando OpenCV
.
import cv2img = cv2.imread('qrcode.png')
Añada el siguiente código debajo. Imprimirá los resultados como cadenas.
result = decode(img)
decode()
función devuelve una lista de namedtuple
llamado Decoded
. Cada uno de ellos contiene los siguientes campos:
-
data
– La cadena decodificada en bytes. Necesita decodificarlo usando UTF8 para obtener una cadena. -
type
– Solo útil para códigos de barras, ya que describe el formato del código de barras. -
rect
– UnaRect
objeto que representa el área de localización capturada. -
polygon
– Una lista dePoint
instancias que representan el código de barras o el código QR.
Si tuviera que imprimir todo el resultado devuelto, debería obtener el siguiente resultado.
[Decoded(data=b'https://manualestutor.com/@ngwaifoong92', type='QRCODE', rect=Rect(left=40, top=40, width=330, height=330), polygon=[Point(x=40, y=40), Point(x=40, y=369), Point(x=370, y=370), Point(x=369, y=40)])]
Utilice el siguiente código para recorrer cada uno de los elementos e imprimir la cadena decodificada
for i in result: print(i.data.decode("utf-8"))
El código completo se puede encontrar en la siguiente propiedad.
5. Conclusión
Recapitulemos lo que hemos aprendido hoy.
Comenzamos con algunas explicaciones sobre los conceptos fundamentales detrás python-barcode
, qrcode
y pyzbar
.
Después de eso, pasamos a instalar los módulos necesarios. La instalación es bastante sencilla con pip install
.
Una vez finalizado, implementamos la generación tanto de códigos de barras como de códigos QR con los parámetros de configuración que elijamos.
Finalmente, utilizamos el pyzbar
módulo para decodificar las imágenes que hemos generado anteriormente.
Gracias por tomarte el tiempo de leer este artículo.
Añadir comentario