最近一位热心的网友找到宋宋,想做一个条形码或者二维码的识别系统。

现在,他在北京的某知名大型连锁超市,需要通过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 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:

如果上面的测试没有问题我们就开始进入识别系统,当摄像头读取到信息之后,我们要将其转成灰度图,这样可以更准确的识别到条形码的信息。之所以使用while True,是指扫描不成功的情况下,可以多次识别。

import cv2
import csv
import pyzbar.pyzbar as pyzbarbarcodeData1 = ''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

上面

怎样用Python识别条形码?相关推荐

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

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

  2. Python识别条形码

    一维.二维.三维条码 一维二维都很常见了,三维条码还是第一次听说,不知是不是量子云码一类的. 网上摘抄了三维条码简介: 三维条码具有更大的信息容量.相同的识别便易性和较好的安全性. 三维码的主要特征在 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 2018-2019-1 20165305 实验三 实时系统
  2. mysql 多key索引_MYSQL的EXPLAIN到底多好用?
  3. 循环造数据_项目管理数据与信息--DIKW模型
  4. Python爬虫四(正则表达式)
  5. C盘文件内容及清理思路
  6. 使用 PyMOL 将靶点与配体复合物中的靶点和配体拆出来
  7. TensorFlow 学习------第二天
  8. VCF (Variant Call Format)格式详解
  9. 人工神经网络的应用有哪些方面,人工神经网络在生活中的应用
  10. 所有键盘鼠标模拟方式原理及实现
  11. vue做音乐播放器完整功能
  12. 微信小程序与HTML5的标签差异梳理
  13. iPad 上能播放局域网高清片源影音播放利器XBMC使用体会
  14. 微信小程序使用canvas画布
  15. 非线性方程的数值解法:牛顿法及牛顿下山法(含Matlab程序)
  16. HEVC解码器HM源码阅读(三)读取一个NALU
  17. 【C语言】switch语句的理解
  18. AcWing 1293. 夏洛克和他的女朋友
  19. 关于时间与字符串相互转换
  20. 四种常见商务书信写作的排版格式

热门文章

  1. Python计算离散序列的自相关函数
  2. 自相关函数 互相关函数 平稳随机过程
  3. pascal指针 c语言指针,pascal指针 - Pascal教程
  4. T-Tree索引与MMDB简单映射(草稿)
  5. 基于Qt的嵌入式监控系统
  6. 二阶滤波器matlab代码,双二阶滤波器之MATLAB设计及C语言实现
  7. C语言入门教程,C语言学习教程(非常详细)
  8. 计算机断网后显示配置0%,电脑断网后自动报警提醒怎么设置
  9. 华三路由交换配置命令_h3c路由器配置命令
  10. MFC的消息处理模式