OpenCV和Zbar两个Python模块实现二维码和条形码识别

在我们的日常生活中,处处可见条形码和二维码。

在以前,我们去逛书店时,或者你现在随手拿起你身边的一本书,你肯定能看到书本的封页后面印有一排黑色线条组成的标签,也就是条形码;你去你们学校的自助机上借书还书时识别的也是条形码;哦,对了,你还记得每次大型考试答题卡上都会贴上监考老师分发给你的那个标签吗?还是条形码;甚至现在你随随便便逛个超市或便利店,收银员或者自助机也都是通过扫商品条形码给你计价的。条形码在我们的日常生活中真的是随处可见。

到了后来,2016年之后,二维码也渐渐开始普及起来,现在二维码几乎成了我们日常生活的一部分:新朋友微信加个好友;上下班搭乘公交地铁;平时买东西付款;和别人收付款的当面交易;各个大小公司或者商场甚至地摊搞活动的时候也告诉你扫码有优惠。

现在只要你出门,或者你不出门,你只要用手机,你是个网民,你就很难不接触到各种条形码与二维码。

那么这些个条形码识别和二维码识别是怎么完成的呢?

其实使用OpenCV和Zbar这两个python模块就可以实现二维码和条形码的识别。

1.软件安装

在Ubuntu上安装Zbar:

$ sudo apt-get install libzbar0

在MacOS系统中安装Zbar:

$ brew install zbar

另外还需要安装OpenCV:
pip install opencv-python

2.识别图片上的二维码或条形码

# 导入模块
from pyzbar import pyzbar
import matplotlib.pyplot as plt
import cv2
# 读取图片
image = cv2.imread(‘image.jpeg‘)
# 找到图像中的条形码并进行解码
barcodes = pyzbar.decode(image)
def decode(image, barcodes):
    # 循环检测到的条形码
    for barcode in barcodes:
        # 提取条形码的边界框的位置
         # 画出图像中条形码的边界框
        (x, y, w, h) = barcode.rect
        cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 5)
        # 条形码数据为字节对象,所以如果我们想在输出图像上
        # 画出来,就需要先将它转换成字符串
        barcodeData = barcode.data.decode("utf-8")
        barcodeType = barcode.type
        # 绘出图像上条形码的数据和条形码类型
        text = "{} ({})".format(barcodeData, barcodeType)
        cv2.putText(image, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,.8, (255, 0, 0), 2)
        # 向终端打印条形码数据和条形码类型
        print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))
    plt.figure(figsize=(10,10))
    plt.imshow(image)
plt.show()
#. 识别二维码
decode(image, barcodes)
# 读取图片
image = cv2.imread(‘image2.png‘)
# 找到图像中的条形码并进行解码
barcodes = pyzbar.decode(image)
# 识别条形码
decode(image, barcodes)

输出结果
[INFO] Found QRCODE barcode: http://weixin.qq.com/r/-irJ0RbEbU***VKy93-s

[INFO] Found CODE128 barcode: http://weixin.qq.com/r/-irJ0RbEbU***VKy93-s

3.识别视频中的二维码或条形码

from pyzbar import pyzbar
import cv2
# 获取二维码或条形码
def decode(image):
    # 找到图像中的条形码并进行解码
    barcodes = pyzbar.decode(image)
    # 循环检测到的条形码
    for barcode in barcodes:
        # 提取条形码的边界框的位置
        # 画出图像中条形码的边界框
        (x, y, w, h) = barcode.rect
        cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 5)
        # 条形码数据为字节对象,所以如果我们想在输出图像上
        # 画出来,就需要先将它转换成字符串
        barcodeData = barcode.data.decode("utf-8")
        barcodeType = barcode.type
        # 绘出图像上条形码的数据和条形码类型
        text = "{} ({})".format(barcodeData, barcodeType)
        cv2.putText(image, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,.8, (255, 0, 0), 2)
# 读取摄像头
cap = cv2.VideoCapture(0)
while(True):
    ret, frame = cap.read()
    if ret==True:
        # 获取二维码或条形码
        decode(frame)
        # 显示图片
        cv2.imshow(‘frame‘,frame)
        # 按q退出
        if cv2.waitKey(1) & 0xff == ord(‘q‘):
            break
    else:
        break
cap.release()
cv2.destroyAllWindows()

识别效果视频地址

参考资料: www.pyimagesearch.com

4.项目打包

百度云盘
用OpenCV和Python识别二维码和条形码
https://pan.baidu.com/s/14CKjZh9YnyDa-KmY2wJcKg

原文地址:http://blog.51cto.com/12340098/2332136

时间: 2024-09-29 15:37:16

OpenCV和Zbar两个Python模块实现二维码和条形码识别的相关文章

[Python]在Windows系统中使用ZXing模块实现二维码、条形码读码

??需要实现Python读取图片中二维码.条形码信息.前段时间研究使用zbarlight模块,费了很大功夫安装调试好,但是发现有些图片读取不正确,而且如果图片中二维码倾斜,就读取不了,不能满足要求.昨天琢磨着试一试ZXing,下载ZXing模块安装后,却一直报错.打开模块源码仔细分析,原来该模块是通过调用java程序,使用ZXing的java库来实现的,通过分析命令行输出得到解码结果.忙活了一天多,各种测试.查资料,终于解决了问题.调试过程非常艰辛,现将做法整理如下(Windows 10系统):

安装二维码、条形码识别工具zbar

参考:http://blog.csdn.net/gaofuqi/article/details/26698547 http://www.imagemagick.org/download/ImageMagick-6.9.9-5.tar.gz 安装zbar http://blog.csdn.net/shanzhizi/article/details/50755168 安装zbar前需要安装imagemagic 安装好imagemagic后,需要执行下 ldconfig /usr/local/lib

Python使用QRCode模块生成二维码

QRCode官网https://pypi.python.org/pypi/qrcode/5.1 简介python-qrcode是个用来生成二维码图片的第三方模块,依赖于 PIL 模块和 qrcode 库. 简单用法 import qrcode img = qrcode.make('hello, qrcode') img.save('test.png') 高级用法 import qrcode qr = qrcode.QRCode( version=1, error_correction=qrcod

一个不同于ZBAR的二维码扫描与识别。

现在好多人使用二维码用到第三方 ZBar,往往被不支持模拟器所困扰.经过楼主的不懈努力,终于一款原生二维码扫描识别与生成工具类完成了.大家可以轻易的添加二维码的头像,改变二维码的样式(颜色修改要慎重,有时候颜色修改的不合适会导致,二维码识别失败).废话不多说直接给demo地址:https://github.com/zcs110/scanQR.git   Code4上直接搜索scanQR就可以了.

在iOS中使用ZBar扫描二维码和条形码

最近做了个外包项目,里面用到了二维码扫描和微信支付!之前比较熟悉的是ZXing,但是在Xcode7.1里面发现竟然莫名的不支持,木有办法,从网上查了一下还有一种支持二维码扫描的东西,没错就是接下来我要说的东东,二维码扫描的利器 ZBarSDK.闲言少絮叨,言归正传! 1.下载 ZBarSDK 官网 https://github.com/bmorton/ZBarSDK 2.导入如下框架 3.在AppDelegetem文件中#import "ZBarSDK.h" 并且 在 - (BOOL)

使用zbar进行二维码或条形码(一维码)扫描

接上篇,因为使用AVFoundation一直无法扫描我们的二维码,最后决定使用条形码.我又在AVCaptureMetadataOutput的metadataObjectTypes中加入了EAN13的条形码类型(我们生成条形码使用的类型),不幸的是,还是无法识别,但是,百度其他的EAN13类型的条形码都可以识别出来,此问题仍未解决. 最后,我决定试一下ZBar,bingo!效率挺高.下面介绍一下zbar的使用过程. 首先,使用cocopods在项目中集成zbar,然后在头文件中导入ZBarSDK,

模块总结-二维码生成模块

qrcode 模块可以便捷地生成二维码,只是生成的二维码图像大小无法编辑. 1 import qrcode 2 qr = qrcode.QRCode( 3 version=1, 4 error_correction=qrcode.constants.ERROR_CORRECT_L, 5 box_size=100, 6 border=4, 7 ) 8 qr.add_data('hello, qrcode') ##二维码增添的数据 9 qr.make(fit=True) 10 img = qr.ma

python qrcode二维码生成与识别

二维码 二维码生成 1.用法 https://github.com/lincolnloop/python-qrcode 2.使用 简单实用 import qrcode # 二维码内容 data = "https://www.baidu.com" # 生成二维码 img = qrcode.make(data=data) # 直接显示二维码 img.show() # 保存二维码为文件 # img.save("baidu.jpg") 设置参数 import qrcode

二维码开源库zbar、zxing使用心得

首先说明我的测试场景是“识别打印在纸上的二维码”,在扫描结果中寻找二维码并进行识别,而不是直接让摄像头对着二维码扫描. zbar和zxing用的都是自己从github上clone的c++源码/接口编译出来的dll,都是默认参数 再说结论:测了大概几千张图片,两个库的准确率差不多(由于图片场景的多样性,确切的准确率数字也没有什么意义),但是zbar的速度要快很多,大概是zxing的4-5倍.其实两个库的准确率都不太如人意,稍微模糊一点就无法识别,甚至有一些不模糊的图像也识别不出.相比之下,微信的识