QR Code Reader Using Python

This Python script showcases a real-time QR code scanner utilizing OpenCV and the pyzbar library for decoding QR codes from webcam video input. It highlights detected QR codes, prints the data on the console, and displays it in the video feed.

Key Features:

  • Captures video from a webcam and decodes QR codes in real time.
  • Draws a rectangle around detected QR codes and displays decoded data on the frame.
  • Option to stop scanning after reading the first QR code.
  • Includes user-friendly controls with a simple ‘ESC’ key exit
import cv2
from pyzbar.pyzbar import decode
import numpy as np  # Ensure numpy is imported

# Initialize the webcam (camera 0 by default)
cap = cv2.VideoCapture(0)

print("Press 'ESC' to quit.")

# Flag to control reading once
qr_read = False

while True:
    # Capture frame-by-frame
    ret, frame = cap.read()
    if not ret:
        print("Failed to capture frame.")
        break

    # Convert the frame to grayscale for better QR detection (optional)
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Decode the QR code(s)
    decoded_objects = decode(gray_frame)
    for obj in decoded_objects:
        if not qr_read:  # Check if the QR code has already been read
            # Draw a rectangle around the QR code
            points = obj.polygon
            if len(points) == 4:
                pts = points
            else:
                pts = cv2.convexHull(np.array([point for point in points], dtype=np.float32))

            cv2.polylines(frame, [np.int32(pts)], True, (0, 255, 0), 3)

            # Display the decoded QR code data on the frame
            qr_data = obj.data.decode('utf-8')
            print("QR Code Data:", qr_data)
            cv2.putText(frame, qr_data, (obj.rect.left, obj.rect.top - 10),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

            # Set the flag to True after reading the QR code
            qr_read = True

            # You can break the loop here if you want to stop once a QR code is found
            break

    # Display the frame with QR code highlights
    cv2.imshow('QR Code Scanner', frame)

    # Check if the 'ESC' key is pressed to quit the application
    key = cv2.waitKey(1) & 0xFF
    if key == 27:  # 27 is the ASCII code for the 'ESC' key
        print("Escape pressed, exiting...")
        break

# Release the capture and close all OpenCV windows
cap.release()
cv2.destroyAllWindows()
OUTPUT:
The code launches the webcam feed in a window. When a QR code is detected, the data is printed in the console and displayed in the video feed, highlighted by a green rectangle. The script exits gracefully when 'ESC' is pressed.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top