Lectura y detección de código QR con Python
- publicado por Ing. Jesús Martínez
- Fecha agosto 23, 2023
Contenido:
Introducción:
En la era digital actual, la automatización se ha convertido en un componente fundamental en una variedad de aplicaciones, desde la industria hasta la vida cotidiana. Una de las tecnologías que ha ganado prominencia en este panorama es la capacidad de detectar y leer códigos QR de manera eficiente y precisa. Los códigos QR, con sus patrones de puntos y cuadros, almacenan información en un formato visual que puede ser decodificado por dispositivos electrónicos. Esta tecnología ha revolucionado la forma en que interactuamos con la información y ha encontrado su camino en campos tan diversos como la logística, el marketing y la gestión de inventarios.
En este artículo, vamos a sumergirnos en el emocionante mundo de la visión por computadora utilizando OpenCV y el poderoso lenguaje de programación Python. Aprenderemos cómo detectar códigos QR en imágenes y, lo que es aún más intrigante, cómo extraer y leer la información codificada dentro de ellos. A medida que desglosemos el proceso paso a paso, descubriremos cómo estas tecnologías trabajan en conjunto para brindarnos capacidades de automatización y procesamiento de datos que hace tan solo unos años eran difíciles de imaginar.
Aplicaciones:
Aplicaciones en la Vida Cotidiana:
- Exploración Turística Inteligente: ¿Alguna vez has deseado obtener información instantánea sobre un lugar turístico? Los códigos QR han transformado la forma en que exploramos el mundo. Al escanear un código QR en un monumento o una atracción, puedes acceder a guías turísticas interactivas, historias intrigantes y detalles ocultos que enriquecen tu experiencia.
- Compras y Ahorro Inteligente: La compra inteligente es más que solo elegir productos; se trata de tomar decisiones informadas. Escanear códigos QR en las tiendas revela información de productos, reseñas de clientes y ofertas especiales, lo que te permite tomar decisiones acertadas y ahorrar dinero.
- Autenticación Fácil y Segura: La autenticación de dos factores (2FA) se ha vuelto esencial en la era digital. Los códigos QR ofrecen una forma rápida y segura de completar este proceso. Al escanear un código QR generado por una aplicación de autenticación, puedes verificar tu identidad y fortalecer la seguridad de tus cuentas en línea.
Aplicaciones Empresariales:
- Gestión de Inventarios y Logística: Las operaciones empresariales pueden optimizarse enormemente con la lectura de códigos QR. Desde el seguimiento de productos en la cadena de suministro hasta la gestión de inventario en tiempo real, esta tecnología agiliza las operaciones y reduce los errores.
- Interacción con el Cliente: El marketing y la publicidad han encontrado en los códigos QR un aliado poderoso. Escaneando un código QR en un anuncio, los clientes pueden acceder instantáneamente a contenido relacionado, como descuentos, concursos o enlaces a páginas web, lo que fomenta una mayor interacción y participación.
- Pagos y Boletos Electrónicos: Los códigos QR están transformando la forma en que pagamos y accedemos a eventos. Escanea un código QR en un restaurante para pagar tu cuenta o en el ingreso a un concierto para acceder a tu boleto electrónico, simplificando la experiencia del usuario.
Desarrollo:
El código para esta práctica es muy sencillo, comenzaremos importando las librerías necesarias, en este caso trabajaremos solo con OpenCV y Numpy.
import cv2
import numpy as np
En esta ocasión trabajaremos con imágenes previamente almacenadas en la computadora o sistema, por lo que haremos uso de la función imread()
de OpenCV para leer imágenes desde el almacenamiento del sistema.
img = cv2.imread("codigo2.jpg")
Ahora crearemos una instancia de la clase QRCodeDetector()
de cv2 y la llamaremos detector
detector = cv2.QRCodeDetector()
Utilizaremos el método detectAndDecode()
y le pasaremos la imagen que cargamos previamente, este método nos devolverá los datos que contiene el código QR y los puntos con los cuales dibujaremos su bounding box
datos, puntos, _ = detector.detectAndDecode(img)
Para dibujar la caja contenedora del código QR utilizaremos cv2.polylines()
, pero antes de ello debemos convertir los datos del vector puntos a enteros de 32 bits, esto para que polylines funcione correctamente
puntos = np.asarray(puntos, np.int32)
cv2.polylines(img, puntos, True, (0, 255, 0), 4)
Ahora, dibujaremos en img el texto que contiene el código QR, esto haciendo uso de cv2.putText()
cv2.putText(img, datos, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)
Perfecto, ahora solo nos resta mostrar la imagen con el resultado final
cv2.namedWindow("img", cv2.WINDOW_NORMAL)
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()
Resultados:
Ahora realicemos algunas pruebas con imágenes sencillas y unas un tanto complejas
Como podemos notar, la aplicación funciona muy bien para distintas condiciones, podemos ver que funciona desde lo más sencillo, hasta en distintas orientaciones y superficies. Es muy importante considerar que este código solo funciona para trabajar con códigos QR, por lo que tratamos de leer con él un código tipo Data Matrix, no obtendremos el resultado deseado.
Recuerda que también puedes dotar a esta aplicación con la capacidad de detectar y leer códigos en tiempo real con ayuda de una cámara. Así que déjame saber en la sección de comentarios, si deseas que lo implementemos para un siguiente artículo.
Soy un apasionado por la innovación tecnológica, el desarrollo y el emprendimiento. Durante mi educación superior me enfoqué en la programación de software para visión artificial e inteligencia artificial. Poco después al graduarme tuve la oportunidad de aplicar estos conocimientos en el desarrollo de soluciones para empresas como General Motors, Ford, Harley-Davidson, Mack, Tesla y unas cuantas empresas más del ramo automotriz.
También te puede interesar
Deja una respuesta Cancelar la respuesta
Lo siento, debes estar conectado para publicar un comentario.
1 Comentario
obtener la informacion de un escaner estaria interesante para una segunda parte. Saludos.