一维、二维、三维条码

一维二维都很常见了,三维条码还是第一次听说,不知是不是量子云码一类的。

网上摘抄了三维条码简介:

三维条码具有更大的信息容量、相同的识别便易性和较好的安全性。
三维码的主要特征在于利用色彩或灰度(或称黑密度)表示不同的数据并进行编码。

其实Python有条码扫描库,Python2一直都有一个很是出名,那就是zbar,但此库。虽然牛,却已经停止维护了,如果是python3,不能使用zbar库。

现在对于Python3来说使用比较多的是:pyzbar

安装pyzbar

pip install pyzbar

识读二维码

步骤1:

使用opencv2,初始化摄像头信息,调整摄像头识别图像的width和height。

import cv2capture = cv2.VideoCapture(0)# 摄像头设置,
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1024)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 1024)
capture.set(cv2.CAP_PROP_EXPOSURE, 0.1)

步骤2:

测试cv2是否可以,调用摄像头识别图像,按esc退出

while True:# 读取摄像头中的图像,ok为是否读取成功的判断参数ret,img = capture.read()cv2.imshow('frame', img)k = cv2.waitKey(1)if k == 27:    # 'ESC'关闭break

步骤3:

识读条码

import cv2
import csv
import pyzbar.pyzbar as pyzbar   #条码识读模块barcodeData1 = ''found = set()
capture = cv2.VideoCapture(0)# 摄像头设置
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1024)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 1024)
capture.set(cv2.CAP_PROP_EXPOSURE, 0.1)while True:# 读取摄像头中的图像,ok为是否读取成功的判断参数ret, frame = capture.read()# 转为灰度图像gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)barcodes = pyzbar.decode(gray)   # 识读条码print(barcodes)

如果识别出来条形码信息则打印如下:(为了方便观察添加了换行)

[
Decoded(
data=b’9787545152210’,
type=‘EAN13’,
rect=Rect(left=677, top=116, width=195, height=136),
polygon=[
Point(x=677, y=239),
Point(x=677, y=249),
Point(x=771, y=251),
Point(x=871, y=252),
Point(x=872, y=118),
Point(x=872, y=116),
Point(x=678, y=117)]
)]

上面的信息包含了data即条形码的值,还有就是Rect矩形区域即识别出的条形码的区域,以及识别的一些像素点。

如果没有识别出条形码信息,则打印出来的是空列表[ ]。

步骤4

上面代码中的barcodes返回的是一个列表信息,我们可以对列表信息进行遍历。获取条形码值,type类型和矩形区域。并使用cv2将上图所示的矩形绘制出来。

    for barcode in barcodes:# 提取条形码的边界框的位置(x, y, w, h) = barcode.rect# 画出图像中条形码的边界框cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)

步骤5

data=b’9787545152210’是字节对象,此时我们需要将字节对象转成字符串。

        # 条形码数据为字节对象,所以如果我们想在输出图像上# 画出来,就需要先将它转换成字符串barcodeData = barcode.data.decode("utf-8")   # utf-8编码barcodeType = barcode.type

步骤6

读取商品信息表,判断识别出的条形码信息,是否在商品表中,为了避免扫描重复多次识别。使用了集合去重复条形码信息。

code_set = set() # 存放条形码的集合    # 避免重复读取        if barcodeData not in code_set:            with open('shopping.csv', 'r') as rs:                reader = csv.reader(rs)                # 遍历超市库存文件                for line in reader:                    if barcodeData in line:  # 说明超市有这个商品                        print(f'本超市存在此商品,名称:{line[1]},价格:{line[3]}')                        break                    else:                        pass
else:            pass   code_set.add(barcodeData)

步骤7

打开摄像头,如果按键是ESC则退出,识别系统

    cv2.imshow('qrcode+barcode', frame)    k = cv2.waitKey(1)    if k == 27:        breakcv2.destroyAllWindows()

完整代码:

import cv2import csvimport pyzbar.pyzbar as pyzbarbarcodeData1 = ''code_set = set()capture = cv2.VideoCapture(0)# 摄像头设置capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1024)capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 1024)capture.set(cv2.CAP_PROP_EXPOSURE, 0.1)while True:    # 读取摄像头中的图像,ok为是否读取成功的判断参数    ret, frame = capture.read()    # 转为灰度图像    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)    barcodes = pyzbar.decode(gray)    print(barcodes)    for barcode in barcodes:        # 提取条形码的边界框的位置        # 画出图像中条形码的边界框        (x, y, w, h) = barcode.rect        cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)        # 条形码数据为字节对象,所以如果我们想在输出图像上        # 画出来,就需要先将它转换成字符串        barcodeData = barcode.data.decode("utf-8")        barcodeType = barcode.type        # print(barcodeData)        # 判断多次扫描一个条形码,只打印一次        if barcodeData == '' or barcodeData != barcodeData1:            barcodeData1 = barcodeData            print("Recognize result>>> type: {0}  content: {1}".format(barcodeType, barcodeData))        else:            pass        # 避免重复读取        if barcodeData not in code_set:            with open('shopping.csv', 'r') as rs:                reader = csv.reader(rs)                # 遍历超市库存文件                for line in reader:                     if barcodeData in line:  # 说明超市有这个商品                        print(f'本超市存在此商品,名称:{line[1]},价格:{line[3]}')                        break                    else:                        pass        else:            pass        code_set.add(barcodeData)    cv2.imshow('qrcode+barcode', frame)    k = cv2.waitKey(1)    if k == 27:        breakcv2.destroyAllWindows()

Python识别条形码相关推荐

  1. 用python识别条形码,二维码并且定位标注

    原理很简单用OpenCV处理图片pyzbar识别条形码 python里面有一个包pyzbar可以用识别二维码和条形码,我们再结合OpenCV处理图片的功能就可以标注出二维码位置内容 我们生活中的常见的 ...

  2. Python条码识别:使用Python进行条形码识别的详细教程

    Python条码识别:使用Python进行条形码识别的详细教程 身处数字化时代,条形码作为重要的物流标识符,已经广泛应用于各行各业.对于条形码的识别,在Python中,有许多开源库可以使用,例如Zba ...

  3. python 识别二维码/条形码

    python 识别二维码/条形码 1. 安装包 pip install -y pillow -i https://mirrors.aliyun.com/pypi/simple/ pip install ...

  4. Python识别快递条形码及Tesseract-OCR使用详解

    识别快递单号 这次跟老师做项目,这项目大概是流水线上识别快递上的快递单号.首先我尝试了解条形码的基本知识 百度百科:条形码 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列 ...

  5. Python实现条码识别:从图像中自动检测和识别条形码

    Python实现条码识别:从图像中自动检测和识别条形码 在现代零售业中,条形码是一项必不可少的技术.它们提供了一种快速.准确和可靠的方法来追踪和管理库存.随着计算机视觉技术的发展,我们可以利用Pyth ...

  6. Python识别快递单号(条形码识别、字符识别,Tesseract-OCR)

    #识别快递单号 这项目大概是流水线上识别快递上的快递单号.尝试了解条形码的基本知识 我从这博客的三篇博文中很好的了解了识别条形码的相关知识--moverzp的博客 百度百科:条形码 条形码(barco ...

  7. 使用 OpenCV 和 Python 识别信用卡号

    使用 OpenCV 和 Python 识别信用卡号 在之前的博文中,我们学习了如何安装 Tesseract 二进制文件并将其用于 OCR. 然后我们学习了如何使用基本的图像处理技术来清理图像以提高 T ...

  8. Opencv+ZBar识别条形码、二维码

    文章目录 Opencv识别条形码.二维码 1.ZBar环境配置 2.一维码(条形码)识别 3. 二维码的识别 4. Opencv识别二维码 结束 Opencv识别条形码.二维码 最近的一次作业,恰好之 ...

  9. Python模拟登录,Python识别图形验证码实现自动登陆

    前言 利用Python识别图形验证码,selenium模块实现自动登陆.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: re: numpy模块: pytess ...

最新文章

  1. CentOS LVM
  2. 发现不错的文章,推!
  3. 在windows上搭建redis集群(Redis-Cluster)
  4. java写一个外网访问的接口_Java程序员如何入门?教你写第一个程序
  5. IOS开发学习笔记007-数据结构
  6. numpy教程:排序、搜索和计数
  7. 博客开通,以后大家多来玩啊!
  8. 你好,Wi-Fi 6
  9. 大卫科波菲尔优秀读后感范文4000字
  10. 如何获取Python字符串长度?
  11. 计算机硬件工程师主要干什么,计算机硬件工程师主要学习什么内容
  12. 百度地图API 拾取坐标
  13. Git 配合G码云使用基本操作相关指令
  14. python学习线路图
  15. Jni调用so动态库
  16. vue 打开一个iframe_vue嵌套iframe一系列问题
  17. C语言农历天干地支,求思路。农历年月日时推天干地支
  18. Docker之maxscale容器实现mysql读写分离配置文件
  19. 浏览器阻挡cookies_解决WordPress登录出现Cookies被阻止或者您的浏览器不支持
  20. 腾讯云服务器域名解析操作详解

热门文章

  1. USACO 2.1 Ordered Fractions
  2. 软件产生的熵变系统分析
  3. windows 剪贴板_如何在Windows 10上清除剪贴板历史记录
  4. python-docx库_用 python 来操作 docx, xlsx 格式文件(二)(使用 docx 库操作 docx 格式文件...
  5. 高效团队建设与团队领导
  6. 太美医疗ctms和etmf可以解决什么问题
  7. 2020年伊犁州教师职称计算机考试,关于做好2020年教师专业技术职务评聘工作的通知...
  8. MySQL单表查询基础卷(A)
  9. 老旧电脑不用升级硬件也能运行lumion啦
  10. 智慧长沙发展规划印发:2020年市民可享多项便利