怎样用Python识别条形码?

怎样⽤Python识别条形码
最近⼀位热⼼的⽹友到宋宋,想做⼀个条形码或者⼆维码的识别系统。
现在,他在北京的某知名⼤型连锁超市,需要通过Python识别条形码,进⾏快速的商品库存录⼊。如果已经存在的则不进⾏录⼊。不知
Python能否实现?所以趁此机会我们给⼤家介绍下OpenCV和pyzbar。
废话不多说,进⼊正题......
条码在⽣活中随处可见,其可分为三类:⼀维条码、⼆维条码、三维条码
⼀维条码:
我们平时习惯称为条形码。条形码是将宽度不等的多个⿊条和空⽩,按照⼀定的编码规则排列,⽤以表达⼀组信息的图形标识符。常见的条形码是由反射率相差
我们平时习惯称为条形码。条形码是将宽度不等的多个⿊条和空⽩,按照⼀定的编码规则排列,⽤以表达⼀组信息的图形标识符。常见的条
形码是由反射率相差很⼤的⿊条(简称条)和⽩条(简称空)排成的平⾏线图案。
⼆维条码简称为⼆维码,常见的⼆维码为QR Code,QR全称Quick Response,是⼀个近⼏年来移动设备上超流⾏的⼀种编码⽅式,它⽐传统的Bar Code条形码能存更三维条码:
三维条码具有更⼤的信息容量、相同的识别便易性和较好的安全性。三维码的主要特征在于利⽤⾊彩或灰度(或称⿊密度)表⽰不同的数据并进⾏编码。
其实Python的条码扫描库,⼀直都有⼀个很是出名,那就是zbar,但此库虽然⽜,却已经停⽌维护了,如果是python3,则不能使⽤zbar库
了,现在对于我们Python3来说使⽤⽐较多的是:pyzbar连续铸造机
tips:宋宋⽼师的电脑是Mac系统的,单纯只安装pyzbar是有问题的。需要安装系统⽀持的zbar,使⽤:brew install zbar:
然后再安装pyzbar,就没有问题啦!
pip install pyzbar
如果需要摄像头识别条形码或者⼆维码需要安装opencv和PIL,OpenCV是⼀个基于BSD许可(开源)发⾏的跨平台计算机视觉库,可以
运⾏在Linux、Windows、Android和Mac OS操作系统上。OpenCV-Python是OpenCV的Python的API接⼝,它拥有OpenCV C++
API的功能,同时也拥有Python语⾔的特性,可以做到跨平台使⽤。
pip3 install opencv-python
步骤1:
使⽤opencv2,初始化摄像头信息,调整摄像头识别图像的width和height。
import cv2
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)
步骤2:
艾草精油提取设备测试cv2是否可以,调⽤摄像头识别图像,按esc退出
cwmp
while True:
# 读取摄像头中的图像,ok为是否读取成功的判断参数
ret,img = ad()
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 = ad()
# 转为灰度图像
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=24上⾯的信息包含了data即条形码的值,还有就是Rect矩形区域即识别出的条形码的区域,以及识别的⼀些像素点。
如果没有识别出条形码信息,⽐如宋宋⼀直在摄像头前⾯,哈哈哈我的脸上没有条形码,则打印出来
的是空列表[ ]。
步骤4
上⾯ 代码中的barcodes返回的是⼀个列表信息,我们可以对列表信息进⾏遍历。获取条形码值,type类型和矩形区域。并使⽤cv2将
上图所⽰的矩形绘制出来。
for barcode in barcodes:
# 提取条形码的边界框的位置
(x, y, w, h) =
# 画出图像中条形码的边界框
步骤5
data=b'9787545152210'是字节对象,此时我们需要将字节对象转成字符串。
耳包
# 条形码数据为字节对象,所以如果我们想在输出图像上
# 画出来,就需要先将它转换成字符串
barcodeData = barcode.data.decode("utf-8")
barcodeType = pe
步骤6
读取商品信息表,判断识别出的条形码信息,是否在商品表中,为了避免扫描重复多次识别。使⽤了集合去重复条形码信息。
code_set = set() # 存放条形码的集合    # 避免重复读取        if barcodeData not in code_set:            with open('shopping.csv', 'r') as rs:                reader = ade 步骤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_F 如果有什么问题,可以及时给宋宋⽼师留⾔哦!

本文发布于:2024-09-23 01:26:36,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/114936.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:条形码   识别   信息   摄像头   需要
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议