Cree un escáner de código QR usando OpenCV en Python

Manav Narula 30 enero 2023
  1. Use la clase QRCodeDetector para crear un escáner de código QR usando OpenCV en Python
  2. Conclusión
Cree un escáner de código QR usando OpenCV en Python

Todos estamos familiarizados con los códigos de barras que están presentes en diferentes productos. Basado en el código Morse, los códigos de barras almacenan información al representarla usando líneas y espacios y almacenan los datos horizontalmente.

En los últimos tiempos, los códigos QR también han ganado popularidad. Los códigos QR se almacenan en una caja y se representan mediante una combinación de cuadrados blancos y negros con algunos puntos.

También se basa en el código Morse, por lo que puede considerarse un tipo de matriz de códigos de barras.

Los códigos QR tienen ventaja sobre los códigos de barras tradicionales en términos de almacenamiento. Almacena datos en dos direcciones; por lo tanto, puede contener más información que los códigos de barras.

Esta información puede ser URL, contactos y otra información de hasta cuatro mil caracteres. Hay una aplicación para el escáner de código QR en casi todos los teléfonos hoy en día.

Este tutorial demostrará cómo crear un escáner de código QR utilizando la biblioteca OpenCV en Python.

La biblioteca OpenCV contiene diferentes funcionalidades y clases que pueden almacenar y procesar imágenes de manera eficiente. Podemos aplicar una amplia gama de técnicas predefinidas en nuestros marcos.

Use la clase QRCodeDetector para crear un escáner de código QR usando OpenCV en Python

La versión 4.0.0 de la biblioteca OpenCV introdujo la clase QRCodeDetector. Esta clase contiene métodos que se pueden usar para detectar y escanear imágenes en busca de códigos QR.

Podemos escanear códigos QR únicos y múltiples usando diferentes métodos.

El método detect() de esta clase se utiliza para escanear la imagen en busca de códigos QR; encuentra la caja que contiene el código QR. El método decode() decodifica el código QR detectado.

Para detectar múltiples códigos QR en una imagen dada, podemos usar las funciones detectMulti() y decodeMulti(). Para detectar y decodificar códigos en una superficie curva, utilizamos los métodos detectCurved() y decodeCurved(), respectivamente.

Podemos usar la función detectandDecode() para detectar y decodificar simultáneamente códigos de una imagen. Para este método también existen los métodos detectandDecodeCurved() y detectandDecodeMulti().

Ahora creemos un código QR muy simple usando esta clase y escanearemos el código QR en la siguiente imagen:

Código QR para escanear

Vea el código a continuación.

import cv2

img = cv2.imread("2.jpg")
det = cv2.QRCodeDetector()
info, box_coordinates, _ = det.detectAndDecode(img)

if box_coordinates is None:
    print("No Code")
else:
    print(info)

if box_coordinates is not None:
    box_coordinates = [box_coordinates[0].astype(int)]
    n = len(box_coordinates[0])
    for i in range(n):
        cv2.line(
            img,
            tuple(box_coordinates[0][i]),
            tuple(box_coordinates[0][(i + 1) % n]),
            (0, 255, 0),
            3,
        )

cv2.imshow("Output", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Producción :

http://sampleurl.com

Código QR escaneado usando OpenCV

En el ejemplo anterior, creamos un objeto de la clase QRCodeDetector y usamos la función detectandDecode() para escanear y decodificar el código QR en la imagen dada. Esta función devolvió la información del código QR que se muestra.

También devolvió las coordenadas del cuadro que rodea el código QR. Usamos estas coordenadas para dibujar sus límites en la imagen usando la función line().

Se muestra la imagen final, y usamos las funciones waitKey() y destroyAllWindows() para evitar que esta ventana se cierre automáticamente y esperar a que el usuario pulse alguna tecla antes de cerrarla.

En nuestro ejemplo, leemos una imagen del directorio y escaneamos el código QR. Podemos hacer esto más interactivo usando la cámara web y leyendo imágenes desde allí.

OpenCV proporciona la clase VideoCapture para capturar y leer imágenes de la cámara web.

Conclusión

Este tutorial demostró el uso de la biblioteca OpenCV de Python para crear un escáner de código QR simple. Comenzamos discutiendo los conceptos básicos de un código QR, sus comparaciones con un código de barras y la información que puede almacenar.

Discutimos, brevemente, la clase QRCodeDetector de la biblioteca OpenCV, que proporciona muchos métodos para detectar y decodificar códigos QR de imágenes. Brindamos un ejemplo de un escáner de código QR simple que usa esta clase para escanear y decodificar el código QR de una imagen determinada.

Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artículo relacionado - Python OpenCV