📜  如何在Python中制作条形码阅读器?

📅  最后修改于: 2022-05-13 01:54:35.150000             🧑  作者: Mango

如何在Python中制作条形码阅读器?

条形码以图形表示和机器可读的形式表示数据。为了在Python中制作 Barcode Reader,我们使用pyzbar库。使用 pyzbar 我们可以解码一维条码和二维码。

这个 pyzbar 可以根据条码对象返回 3 个字段:

  • 类型:有多种条码可用。它们由唯一的代码名称区分,如 CODE-128、Code-11、CODE-39 等。如果 pyzabr 检测到的符号是 QRcode,则该类型是 QR-CODE。
  • 数据:这是嵌入在条码中的数据。根据条形码的类型,此数据有多种类型(字母数字、数字、二进制等)。
  • 位置:这是位于代码中的点的集合。对于条形码,这些点是起点和终点线边界。对于 QRcode,它是与 QR 码四边形的四个角对应的四个点的列表。

安装:

pip install pyzbar

pyzbar 提供 rect 方法来定位图像中的条形码。 Rect 代表一个矩形,它会给你条码的坐标。我们还可以解码一张图像中包含的多个条形码。使用以下步骤,我们将制作一个条码记录器。 (确保您安装了两个库)

方法:

  • 导入cv2。
  • 从 pyzbar 导入解码函数。
  • 从用户那里获取图像。
  • 使用 pyzbar 解码该图像
  • 在给定的图像中找到条形码
  • 打印数据和图像类型
  • 显示定位的条形码。

下面是实现

Python3
# Importing library
import cv2
from pyzbar.pyzbar import decode
  
# Make one method to decode the barcode
def BarcodeReader(image):
     
    # read the image in numpy array using cv2
    img = cv2.imread(image)
      
    # Decode the barcode image
    detectedBarcodes = decode(img)
      
    # If not detected then print the message
    if not detectedBarcodes:
        print("Barcode Not Detected or your barcode is blank/corrupted!")
    else:
       
          # Traverse through all the detected barcodes in image
        for barcode in detectedBarcodes: 
           
            # Locate the barcode position in image
            (x, y, w, h) = barcode.rect
             
            # Put the rectangle in image using
            # cv2 to heighlight the barcode
            cv2.rectangle(img, (x-10, y-10),
                          (x + w+10, y + h+10),
                          (255, 0, 0), 2)
             
            if barcode.data!="":
               
            # Print the barcode data
                print(barcode.data)
                print(barcode.type)
                 
    #Display the image
    cv2.imshow("Image", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
 
if __name__ == "__main__":
  # Take the image from user
    image="Img.jpg"
    BarcodeReader(image)


输出:

b'GeeksForGeek-112021'
CODE128