-
2022-02-25 00:57:42
计算机视觉开辟了 许多可能性,最简单和最受欢迎的日常应用之一是使用二维码和条形码扫描仪。
当你在超市收银台结账时会发生什么?
收银员使用设备扫描你购物篮中的每件商品,然后将价格自动记录在系统中以生成你的账单。该设备只不过是一个二维码/条形码扫描仪,而这正是我们今天要构建的!
在深入研究代码之前,让我们快速了解一下二维码及其用途。
什么是二维码?
二维码代表快速响应码。它是一种矩阵类型代码,通常用于跟踪项目。二维码以像素的形式存储数据,这些数据对应于二进制代码,可以解释为显示实际数据。
这是二维码的基本结构。
二维码在各个领域都有应用,例如:
用户身份识别和身份验证(身份证)
跟踪单个项目(库存管理)
共享支付信息(GPay、Paytm)
分享链接、照片、媒体
二维码的主要优点之一是可以以加密形式共享数据,而无需显式透露编码数据。这可以作为额外的保护层,以防止滥用敏感信息。
与二维码非常相似的条形码也是机器可读的加密代码,但与二维码不同的是,数据以不同间距和厚度的条形形式加密。二维码被认为是 2D 条形码,因为它可以水平和垂直存储数据,而不是通常在水平方向存储数据的条形码。因此二维码比条形码更强大。
现在我们知道了什么是二维码,让我们开始使用我们的 python 代码。
导入库
对于我们的项目,我们将使用 OpenCV 来读取图像、获取视频流输入并显示我们的输出。
我们需要的主要库是pyzbar和zbar库来解码我们的加密二维码。这些是有助于解码条形码和二维码的开源 python 库。
我们还需要 NumPy 库。
进行必要的安装:
import numpy as np from pyzbar.pyzbar import decode import cv2
从图像扫描代码
首先,我们将借助 cv2 库读取保存在“qr1.png”中的二维码图像。然后借助 pyzbar 中的 decode 方法,让我们尝试解码我们的代码并分析结果。
这是我们将用作“qr1.png”的二维码
(来源:VectorStock.com/26810014)
#Reading QR Code from an Image img = cv2.imread("qr1.png") code = decode(img) print(code)
输出:
现在,显示了很多信息。让我们了解输出的每个部分。
data ->此字段为我们提供文本或二维码中编码的信息
type ->这个字段告诉我们代码的类型 QRCODE 或 BARCODE
rect -> 这给出了包含 QR 图像的矩形的左侧、顶部、宽度和高度。即使二维码倾斜,矩形仍保持直立,为我们提供了一个包围整个二维码的边界矩形
polygon ->这为我们提供了 QR 图像周围多边形的确切角点。如果二维码的图像是倾斜的,那么包围它的多边形也是如此。
这就是为什么我们要使用多边形的坐标来绘制我们的边界框,这样即使旋转二维码我们也能得到代码的准确边界。
现在,一张图片可能有多个二维码。因此,让我们将代码放入 for 循环中,以便它可以检测图像中的所有条形码。
由于我们主要对编码信息感兴趣,让我们只显示编码文本。
for barcode in decode(img): print(barcode.data) #in bytes text = barcode.data.decode('utf-8') print(text) print(barcode.rect)
输出
第一行输出显示 b'Hello! '。b 表示它是字节文字。稍后使用“utf-8”方案对其进行解码,以获得 str 文本。
现在你已经成功地解码了二维码中的编码文本!
实时解码二维码
现在让我们尝试使用摄像头输入实时执行此操作。
大多数现实生活中的应用程序,例如超市的二维码扫描仪、用户身份验证或跟踪对象,都需要我们实时解码代码。所以让我们开始吧!
下面的一段代码将使我们能够打开网络摄像头并为输出创建一个辅助窗口。
#Scanning QR Code from Camera Feed vid = cv2.VideoCapture(0) vid.set(3,640) vid.set(4,740)
现在,当视频播放时,我们将像之前一样解码帧中的二维码。除此之外,我们还将使用多边形点在我们的二维码周围绘制边界框,并在相机帧输入本身上显示它们对应的解码文本。
while True: success, img = vid.read() for barcode in decode(img): text = barcode.data.decode('utf-8') print(text) polygon_Points = np.array([barcode.polygon], np.int32) polygon_Points=polygon_Points.reshape(-1,1,2) rect_Points= barcode.rect cv2.polylines(img,[polygon_Points],True,(255,255, 0), 5) cv2.putText(img, text, (rect_Points[0],rect_Points[1]), cv2.FONT_HERSHEY_DUPLEX, 0.8, (255,255, 0), 2) cv2.imshow("Video", img) cv2.waitKey(1)
输出
在上面的代码行中,
cv2.polylines(img,[polygon_Points],True,(255,255, 0), 5)
显示我们的二维码周围的边界框。'img' 指定输入帧。
请注意,这里我们使用多边形点,因此即使旋转二维码,我们也能得到准确的边界框。(255,255,0) 指定边界框的颜色,5 表示厚度。
代码行
cv2.putText(img, text, (rect_Points[0],rect_Points[1]), cv2.FONT_HERSHEY_DUPLEX, 0.8, (255,255, 0), 2)
用于显示解码后的文本。如果你仔细观察,你会发现这里我们使用矩形的坐标而不是多边形的坐标来显示文本。这样做的原因是为了确保无论二维码是否旋转,文本都直立显示,以便于阅读。
此输出将向我们显示当二维码直立时和以一定角度保持在相机前时的比较结果。
让我们在一些真实世界的物体上进行测试,看看它是否有效!
确实如此!随意使用尽可能多的二维码进行测试!
另一个有趣的功能是,这个库不仅可以解码二维码,还可以解码条形码,而无需对我们的代码进行任何更改!
让我们看看带有条形码相机馈送输入的结果。
瞧!你现在已经使用一些简单的 OpenCV 函数和 pyzbar 库构建了你的条形码和二维码扫描仪!
现在是有趣的部分!
构建用户认证系统
让我们看一个真实的用例场景。
公司的每个员工都会获得一张带有相应二维码的身份证。一些从事特殊项目的员工被授予进入特定实验室的权限,而其他人则进入禁区。每个员工必须在入口处扫描他们的身份证才能进入实验室。
我们已经有了我们的二维码扫描仪。现在让我们把迄今为止学到的所有东西都用起来。我们将构建一个简单的用户身份验证系统,用于检查二维码是否属于授权人员并决定是否授予他们访问权限。
那么让我们开始编写代码吧!
import numpy as np from pyzbar.pyzbar import decode import cv2
#Scanning QR Code from Camera Feed vid = cv2.VideoCapture(0) vid.set(3,640) vid.set(4,740)
已导入库并设置了视频捕获。现在我们必须读取包含授权员工解码的二维码文本的文本文件,并将它们存储在一个列表中。
这是我们的文本文件“Authorised.txt”
with open('Authorised.txt', 'r') as file: auth_list = file.read().strip() print(auth_list)
输出
作为参考,让我们在输入图像上运行之前的代码,以显示每个二维码的解码文本。稍后我们将需要它来验证我们的模型是否正常工作。让我们看看我们得到的输出。
输出
现在我们需要做的就是检查每个二维码,如果解码的文本出现在授权人员列表中。如果匹配,那么我们将使用绿色 (0,255,0) 边界框并显示文本“Access Granted”,否则我们将使用红色 (0,0, 255) 边界框并显示消息“Unauthorised Access”。
while True: success, img = vid.read() for barcode in decode(img): text = barcode.data.decode('utf-8') text=str(text) if text not in auth_list: color=(0,0,255) displaytext = "Unauthorised Access" else: color=(0,255,0) displaytext = "Access Granted" polygon_Points = np.array([barcode.polygon], np.int32) polygon_Points=polygon_Points.reshape(-1,1,2) rect_Points= barcode.rect cv2.polylines(img,[polygon_Points],True,color, 3) cv2.putText(img, displaytext, (rect_Points[0],rect_Points[1]), cv2.FONT_HERSHEY_PLAIN, 0.9, color, 2) cv2.imshow("Video", img) cv2.waitKey(1)
输出
赞!你做到了!
我们的模型完美地扫描二维码并仅授予授权员工访问权限!你已使用二维码扫描仪成功构建了一个用户身份验证系统,该系统仅授予授权员工扫描身份证上的二维码后的访问权限!
二维码真正有用的领域有很多。所以继续尝试不同的代码及其应用程序吧!
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓
更多相关内容 -
二维码扫描器
2017-09-10 15:34:30本文档为德沃二维码扫描器规格书。采用GraphLib影像技术:GraphLib5.0影像技术,具有图像增强,去除噪声、复原、分割、提取等特征,同时体现出德沃对于领先科技、与众不同的解决方案和为协助商业客户解决数据采集... -
微光二维码扫描器串口协议
2018-11-27 14:05:34本资源是详细写明了 微光二维码扫码器的串口协议 -
C#得利捷串口二维码扫描器包装采集,打印箱码
2021-03-09 11:27:43C#得利捷串口二维码扫描器采集盒码,到达计数后打印箱码,程序为演示demo,没有数据库相关操作。 -
微光二维码扫描器WIFI接口规范
2019-01-30 09:26:46微光二维码扫描器WIFI接口规范 -
微光二维码扫描器通讯协议V2.8
2019-01-30 09:25:39微光二维码扫描器通讯协议V2.8 -
安卓条码扫描二维码相关-BarcodeScanner二维码扫描器安卓源码.rar
2019-07-29 16:44:03BarcodeScanner二维码扫描器安卓源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
二维码扫描仪
2021-02-16 12:35:34qr_code_scanner 一个新的Flutter应用程序。 入门 该项目是Flutter应用程序的起点。 如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门: 要获得Flutter入门方面的帮助,请查看我们的,其中提供了教程... -
CTF之二维码扫描.7z
2021-12-02 12:15:57CTF入门之二维码扫描神器,支持二维码修复 -
微光互联z100二维码扫描器
2015-11-17 11:29:56这是微光互联扫码器Z100的资料,包含官方文档和例程、工具。 -
swiftScan:一种条形码和二维码扫描仪(二维码各种码识别,生成,界面效果)
2021-02-26 05:03:33Swift:包装系统API带有扫描代码和图像识别功能 扫描码界面 QR码和条形码的识别和生成 相册中的图像识别(测试结果不好) 模仿其他应用 1,QQ扫码界面2,支付宝扫码界面3,微信扫码界面 其他设置参数自定义效果 可以... -
Avnet_A2M 工业二维码扫描仪方案介绍_Public.pdf-综合文档
2021-05-24 15:38:08人机交互和机器视觉是目前市场上非常火的两个点。智能家居、工业控制、楼宇自动化等很多场景都能适用。目前市场上针对这两个领域的解决方案都离不开AI控制和图像处理,然而AI控制需要云端支持,对设备网络环境要求较... -
Qt实现二维码扫描器
2013-11-22 15:56:50Qt实现的一个二维码扫描器,利用QZXing库进行解码。 更多信息请参考:http://blog.sina.com.cn/s/blog_a6fb6cc90101gng5.html -
高级二维码扫描仪 支持所有类型QR码条形码 for Android .rar
2021-06-17 17:30:01高级二维码扫描仪 支持所有类型QR码条形码 for Android -
Avnet_A2M 工业二维码扫描仪方案介绍_Public-综合文档
2021-05-22 02:57:28Avnet_A2M 工业二维码扫描仪方案介绍_Public -
二维码的扫描及生成 (内含二维码的源码)
2018-09-04 09:53:19二维码的扫描及生成 ,里面有二维码的源码,可以扫描二维码,也可以生成二维码,可以生成带二维码的图片。 -
二维码扫描设备串口开发文档demo
2018-11-06 17:48:58dewo 二维码扫描设备开发文档,lib,源代码 -
要读取二维码图像,您需要使用二维码扫描仪或许多可以使用手机摄像头扫描二维码的应用程序
2021-06-16 08:20:38要读取二维码图像,您需要使用二维码扫描仪或许多可以使用手机摄像头扫描二维码的应用程序。 下面是应用程序运行的典型屏幕,自定义配色方案下拉菜单在 Windows 7 中处于活动状态。 L&F 可能因操作系统呈现 UI 组件... -
Qt 桌面版本的二维码扫描器(更新版本)
2017-07-24 17:06:24较之前的版本更新了几个bug,文字不自动换行,新增粘贴板功能。等 -
二维码扫描 qrscan
2015-05-14 17:43:57二维码扫描 qrscan 灵敏 高效 使用的ios解码库 -
Qt5二维码扫描器(PC版本)
2017-07-26 14:04:43Qt基于QZXing做的PC版本二维码扫描器,可自由拖动实现电脑上的二维码扫描功能。同时也可以移植到其他设备。 -
二维码扫描枪编码字符串转化.rar
2020-05-13 10:17:04主要支持扫码,扫描枪扫二维码,将扫描枪给出的编码,转化为可读字符串,包含汉字转换,用外置的扫码枪进行扫码,可以识别出二维码里的内容并输出。经过反复测试,没有发现什么问题。 -
zxing android 二维码扫描器实现源码
2012-10-09 15:44:01由于自身需要以及网上查阅了些资料都不怎么满足,就自己试...该项目为zxing android版本扫描器全部源码实现,导入eclipse可直接运行,能快速扫描二维码和条形码。最主要的是可以学习了,嘎嘎,赶紧下下来,不下别后悔! -
如何监听USB二维码扫描仪扫描到的数据
2016-04-07 08:59:29如题,USB接口的二维码扫描仪,类似一个键盘的输入设备,它获取到的数据会直接输出到光标位置,如何去监听它并得到扫描到的数据?求大神指导,谢谢! -
二维码扫描器android版
2012-07-25 18:50:24经过自己改造,本版本已经可以多次扫描了,而且已经将核心类打包在里边,可直接运行 -
ZXinge二维码扫描器
2018-04-18 15:08:38firefox唯一过检的二维码扫描器 --ZXing二维码扫描器。为了过360名字改了。亲测能用,360会扫为病毒文件,建议恢复文件时候再使用。