Decoding Barcodes in Python (using pyzbar)
In this blog, we will demystify the mystery of Decoding Barcodes from images in Python. We will be making use of pyzbar module in achieving the same. Decoding Barcodes is easy in Python language, you just need to follow the course of this blog.
Installation and Loading of Dependencies Required
pyzbar
The pyzbar module is capable of reading and decoding one-dimensional barcodes and QR codes. The features of the module are:
- Easy implementation in Python
- Works with PIL / Pillow images, OpenCV / numpy ndarrays, and raw bytes
- Decodes locations of barcodes
PIL
PIL or Pillow is an Image Processing library that provides us with extensive methods of operations that can be performed on images. We will use it for opening the images.
We can install these packages easily using the pip
module.
pip install pyzbar pip install pillow
After the installation part is done, we will be importing:
decode
frompyzbar.pyzbar
moduleImage
fromPIL
module
from pyzbar.pyzbar import decode from PIL import Image
Decoding the Barcodes!
To decode the barcodes, we will open the image of the Barcode using the Image
module, and then we will pass the image as a parameter inside the decode()
method.
The decode()
method returns a list of namedtuple
called Decoded
. Every decoded tuple consists of the following attributes:
data
— The decoded string in bytes. We have to further decode it using utf8 to get a string.type
— This attribute holds the type of barcode decoded.rect
— ARect
object which represents the captured localization area.polygon
— A list ofPoint
instances that represent the barcode.
Input Image:
Python Code:
from pyzbar.pyzbar import decode from PIL import Image info = decode(Image.open('PATH\\NAME OF IMAGE')) print(info)
Output:
[Decoded(data=b'https://www.codespeedy.com/', type='CODE128', rect=Rect(left=34, top=11, width=773, height=177), polygon=[Point(x=34, y=11), Point(x=34, y=187), Point(x=807, y=188), Point(x=807, y=12)])]
To get the information (data) as a string, we can loop over the Decoded Tuple in the manner mentioned below:
from pyzbar.pyzbar import decode from PIL import Image info = decode(Image.open('PATH\\NAME OF IMAGE')) for i in info: print(i.data.decode("utf-8"))
Output:
https://www.codespeedy.com/
We loop over info because there can be more than one Decoded Tuples in the list. So the loop extracts data from all of them in this way.
So, that was all about demystifying Decoding Barcodes. Thank you for devoting your valuable time in reading this blog. You may check out these other articles as well:
Leave a Reply