Barcode and QR Code Reader Python

Barcode and QR Code Reader Python

Introduction to QR Code Reader Python

Today we will be developing Barcode and QR code Reader Python. We all know how essential QR Codes have become these days. QR Codes make any information accessible, whether it is a QR Code for any website like a Linkedin profile, Github profile, or a QR Code that contains information. Keeping all these advantages in mind, in this article, we are going to develop a Barcode and QR Code Reader using Python and OpenCV.

This reader will be in two types (1) Image-based Reader and (2) Real-time Reader (Webcam)

For the development of this project of Barcode and QR Code Reader, we will be using a famous Python library named OpenCV and along with it NumPy and Pyzbar. These libraries will eventually help us to build the two types of readers. So let a start with the actual coding of this project.

What we are going to develop?

We are going to develop a Python program using which anyone can read a Barcode or Qrcode on their own computer. As we already told you that this program will read Barcodes and QR codes in the two following ways-

Installing Libraries

In this project development of OpenCV Barcode and QR code reader, at first, we have to install all the required libraries. Use the below-given commands to install them

Numpy

pip install numpy

OpenCV

pip install opencv-python

Pyzbar

pip install pyzbar

Image-based Qr code scanner Python

This type of Barcode and QR Code scanner Python is the simplest one. In this type, the user simply has to provide the image in which there are QR codes. The process is simple, once the user provides the script with the input image, the script will then process the image and will return whatever information is there in the

Importing Libraries

import cv2
import numpy as np
import pyzbar.pyzbar as pyzbar

Reading the input image

image = cv2.imread("new.png")

Explanation:

Here we have used imread() – The imread() method opens the supplied file and loads an image. Use the cv2. imread() function of OpenCV to read an image in Python. Depending on how many color channels are present in the image, imread() produces either a 2D or 3D matrix. A 2D array will do for a binary or grayscale image.

This method produces an empty matrix if the picture cannot be read (due to a missing file, poor permissions, an unsupported or invalid format, etc.). syntax: imread.cv2 (path, flag)

Decoding the Image

decodedObjects = pyzbar.decode(image)

Explanation:

Then, all we have to do is use the decode function we imported and send the image as input in order to decode the barcode in the image.

The output of this function is an array of Decoded class objects. The array’s elements each stand for a QR code that was found. This implies that photos with multiple Qr codes can be used with the library.

for obj in decodedObjects:
    print("Type:", obj.type)
    print("Data: ", obj.data, "\n")

Explanation:

Since there is just one Qr code in our image, it is assumed that this array will only have one member. However, for a more reliable solution, we will use a for loop to repeatedly traverse through the array. This way, the code will function whether one, several, or no barcodes are detected.

Additionally, we will print the kind of barcode (type attribute) and the decoded content from the Qr code (data attribute), in the test picture. We have used the obj.data and obj.type for that purpose.

cv2.imshow("Frame", image)
cv2.waitKey(0)

Explanation:
A window containing an image is displayed using the cv2. imshow() technique. The window adjusts itself to the size of the image. cv2.imshow(window name, picture) is the syntax.

The Python OpenCV waitkey() function enables users to display a window after a specified number of milliseconds or until a key is pushed. It requires a parameter of time in milliseconds and waits until that amount of time has passed before destroying the window; if the parameter is supplied as 0, it waits until a key is pushed.

Complete Code for Qr Code Scanner using Python

import cv2
import numpy as np
import pyzbar.pyzbar as pyzbar

image = cv2.imread("add_your_image_here")

decodedObjects = pyzbar.decode(image)
for obj in decodedObjects:
    # print("Type: QRCODE")
    # print("Data:  b'www.copyassignment.com'")
    print("Type:", obj.type)
    print("Data: ", obj.data, "\n")


cv2.imshow("Frame", image)
cv2.waitKey(0)

Output

output for read qr code python
Output for Image-based Barcode and QR Code Scanner in Python

Note: Replace add_your_image_here with your image.

Real-time Python Qr code scanner

You must understand how this process will function before beginning. To prepare your webcam to scan the QR code, you must first launch it and run your Python program. You can use your smartphone to take the QR code image, which you can then display in front of your webcam. It recognizes the QR code that appears on your screen appropriately. Furthermore, this application connects you to a website concealed in the QR code.

Importing Libraries

We will use the same libraries that we used in Image-based Barcode and QR Code Scanner

Capturing Video and Setting Fonts

cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_PLAIN

With the use of the VideoCapture() function, video is stored in the cap variable. In order to access the webcam, we gave the option 0 to VideoCapture(0). The device index or file name of a video can be found under VideoCapture. To define a Camera, the device index is simply an integer. The first or primary camera is used if we pass 0; the second camera is used if we pass 1, etc. Then, frame by frame, we record the video.

The next line helps in setting up the font. This font will be used to display the hidden information in the QR Code or Barcode.

Decoding and Main Logic

while True:
    _, frame = cap.read()

    decodedObjects = pyzbar.decode(frame)
    for obj in decodedObjects:
        #print("Data", obj.data)
        cv2.putText(frame, str(obj.data), (50, 50), font, 2,
                    (255, 0, 0), 3)

    cv2.imshow("Frame", frame)

    key = cv2.waitKey(1)
    if key == 27:
        break

Line 1: We initialized the While loop with a True condition. Since the video stream of the image is already known to OpenCV to be a collection of images, it will be essential to include the processing inside a While loop.
Line 2: Here we used _ and frame variable that holds the output of cap.read()

  • _ is a recognized Python identifier, so it is acceptable to use it as a variable name. It uses a special identifier to retain the outcome of the most recent evaluation. And in our case, it is True/False
  • cap.read(): True/False is the result of cap.read(). If the frame is correctly read, True will be returned. So, by looking at this returned value, you can determine when the video ends.

Line 3: All we have to do is use the decode function and send the image as input in order to decode the barcode in the image. The output will be an array.
Line 4 to 6: We use a for loop to repeatedly traverse through the array. This way, the code will function whether one, several, or no barcodes are detected. Then we used a putText() function.

  • putText(): To add text to images in Python, use the Opencv putText() function. With the help of OpenCV’s putText() function, we can add text to an image in the specified color, size, family, and placement. The image on which we wish to display the text is the first argument to the putText() function.

Line 7: A window containing an image is displayed using the cv2. imshow() technique.
Line 8: In this case Real-time Barcode and QR Code Scanner we used wait cv2.waitKey(1) whereas in the case of Image-based Barcode and QR Code Scanner we used cv2.waitKey(0)

  • waitKey(1): A frame will be shown for 1 millisecond by waitKey(1) before the display is automatically closed.

Line 9 to 10: And finally we used a conditional to break the while loop. In order to do so, we compared the value of the key to 27, and if that satisfies then the while loop is exited.

Complete Code for Real-time OpenCV Barcode Reader in Python

import cv2
import numpy as np
import pyzbar.pyzbar as pyzbar

cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_PLAIN

while True:
    _, frame = cap.read()

    decodedObjects = pyzbar.decode(frame)
    for obj in decodedObjects:
        #print("Data", obj.data)
        cv2.putText(frame, str(obj.data), (50, 50), font, 2,
                    (255, 0, 0), 3)

    cv2.imshow("Frame", frame)

    key = cv2.waitKey(1)
    if key == 27:
        break

Output

Output for qr code scanner using python
Output for Barcode and QR Code Reader using Python

Required Files

QR Code and Barcode used in this project:

Reference Links

Conclusion

We hope this article was helpful to you and was a great source of learning for you. As promised in this article Barcode and QR code Reader using OpenCV we have tried to explain each line of code in detail thus not leaving our fellow readers in doubt. We believe in developing projects and so we came up with an exciting OpenCV project. Try making changes according to your requirement and modify the project accordingly.

Thank you for visiting our website.


Also Read:

Share:

Author: Dhvanil V