如何使用OpenCV读取货架产品条码

问题描述 投票:0回答:1

我正在按照本教程使用 OpenCV 读取条形码和 QR 码。下面的代码可以工作并检测 QR 条形码,但我想使用条形码检测器来读取商店产品上的条形码,如下所示

如果条形码整齐地打印在白纸上或显示在大计算机屏幕上,则此代码有效。

import cv2
import numpy as np
from pyzbar.pyzbar import decode

cap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)


while True:

    success, img = cap.read()
    for barcode in decode(img):
        myData = barcode.data.decode('utf-8')
        print(myData)
    
        if myData in myDataList:
            myOutput = 'Authorized'
            myColor = (0,255,0)
        else:
            myOutput = 'Un-Authorized'
            myColor = (0, 0, 255)
    
        pts = np.array([barcode.polygon],np.int32)
        pts = pts.reshape((-1,1,2))
        cv2.polylines(img,[pts],True,myColor,5)
        pts2 = barcode.rect
        cv2.putText(img,myOutput,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,
                    0.9,myColor,2)

cv2.imshow('Result',img)
cv2.waitKey(1)

如何修复代码或使用其他方法来准确读取货架产品上的条形码?

python tensorflow opencv computer-vision
1个回答
0
投票

您可以执行销售点扫描仪的操作:使用许多不同方向的线扫描产品,并查看这些线中的任何内容是否可以可靠地解码。

条形码具有特定的时序限制(边缘之间的时间/距离不能是任意的),并且它们包含校验和。这就是您或 zbar 可以丢弃在任意位置穿过对象的扫描线的方式。您不必知道条形码在哪里。

您可以跨不同的线对图像进行采样,并将这些样本提供给 zbar 的低级接口,该接口每次扫描都会获取一系列强度值。

© www.soinside.com 2019 - 2024. All rights reserved.