二维码作为一种信息传递的工具,在当今社会发挥了重要作用。从手机用户登录到手机支付,生活的各个角落都能看到二维码的存在。那你知道二维码是怎么解析的吗?有想过自己实现一个扫码工具吗?如果想的话就继续看下去吧!

一、案例分析

我们先思考一下,实现扫码工具需要写什么操作。在扫码过程中我们需要打开摄像头,如何由手机或者电脑识别二维码。所以我们要实现两个关键的步骤:调用摄像头、识别二维码。

这两个操作分别对应了两个模块,它们就是opencv和pyzbar,其中opencv是英特尔的计算机视觉处理模块,而pyzbar则是用于解析二维码的模块。

二、环境

环境包括python环境和模块。我的环境如下:

系统:Windows 10

python:python 3.7.9

opencv:opencv-python-4.4.0.44

pyzbar:pyzbar-0.1.8

模块安装很简单,我们直接用pip安装,先安装opencv模块:

pip install opencv-python

然后是pyzbar模块:

pip install pyzbar

在未指定安装版本时,系统会自动安装最新版。安装好模块后,我们就可以来实现扫码工具了。

三、识别二维码

有了pyzbar模块后,我们识别二维码的工作就非常简单了,首先需要准备一张二维码。有了二维码后就可以开始解析了,具体步骤如下:

读取二维码图片

解析二维码中的数据

在解析出的数据中提取data信息

实现代码如下:

import cv2

from pyzbar import pyzbar

# 1、读取二维码图片

qrcode = cv2.imread('qrcode.jpg')

# 2、解析二维码中的数据

data = pyzbar.decode(qrcode)

print(data)

# 3、在数据中解析出二维码的data信息

text = data[0].data.decode('utf-8')

print(text)

在上面我们解析了两次,第一次获取了一个data,我们先来看看data长什么样子:

[Decoded(data=b'http://weixin.qq.com/r/vC_fhynEKnRVrW3k93qu', type='QRCODE', rect=Rect(left=140, top=113, width=390, height=390), polygon=[Point(x=140, y=113), Point(x=140, y=503), Point(x=530, y=503), Point(x=530, y=113)])]

可以看到是一个列表,而且列表的第一个数据包含url的信息。所以我们需要通过下面的代码再次解析:

text = data[0].data.decode('utf-8')

这样我们就能拿到二维码中包含的信息了。为了方便后续使用,可以将上面的代码写成一个函数:

def scan_qrcode(img_path):

qrcode = cv2.imread(img_path)

data = pyzbar.decode(qrcode)

return data[0].data.decode('utf-8')

接下来我们再看看如何调用摄像头。

四、调用摄像头

在opencv中提供了一个VideoCapture类用于读取视频,同样可以用来调用摄像头。调用摄像头的步骤如下:

调用摄像头

循环

在循环内读取一帧画面

显示当前读取的画面

等待键盘输入

判断是否按退出键q

按了推出键则退出,没按则继续循环

具体代码如下:

import cv2

# 调用摄像头

cap = cv2.VideoCapture(0)

while True:

# 读取一帧画面

ret, frame = cap.read()

# 显示当前帧

cv2.imshow('scan qrcode', frame)

# 等待键盘输入

key = cv2.waitKey(10)

# 当按下q键时关闭摄像头

if key == ord('q'):

break

# 销毁所有窗口

cv2.destroyAllWindows()

你们可以自己尝试运行一下上面的代码,效果就像是打开了自己的前置摄像头。

现在调用了摄像头,我们可以把两部分的代码结合起来。

五、实现扫码工具

我们扫码工具的主体部分是调用摄像头的操作,我们需要对读取到的每一帧画面进行解析,当解析出结果后输出并退出。具体代码如下:

import cv2

from pyzbar import pyzbar

def scan_qrcode(qrcode):

data = pyzbar.decode(qrcode)

return data[0].data.decode('utf-8')

cap = cv2.VideoCapture(0)

while True:

ret, frame = cap.read()

cv2.imshow('scan qrcode', frame)

# 解析二维码

text = None

try:

text = scan_qrcode(frame)

except Exception as e:

pass

if text:

print(text)

break

key = cv2.waitKey(10)

if key == ord('q'):

break

cv2.destroyAllWindows()

上面我们把scan_qrcode函数修改了一下,从原来的传入图片路径到直接传入图片对象。因为通过VideoCapture对象获取的图片帧和通过cv2.imread获取的图片是同一数据类型。

上面关键步骤在解析二维码的操作。首先定义一个text,因为解析过程中如果没有二维码会出现异常,所以用try-except语句处理。如何通过if判断text的内容,只有当我们真正解析到了数据,程序才会输出结果,并退出程序。

到此这篇关于Python实现扫码工具的文章就介绍到这了,更多相关python扫码工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

python编程软件例子-Python实现扫码工具的示例代码相关推荐

  1. python编程软件例子-python面向对象编程实例

    1.编写程序, 编写一个学生类, 要求有一个计数器的属性, 统计总共实例化了多少个学生 classStudent:"""学生类"""coun ...

  2. python编程软件例子-软件开发|10 个 Python 图像编辑工具

    以下提到的这些 Python 工具在编辑图像.操作图像底层数据方面都提供了简单直接的方法. 当今的世界充满了数据,而图像数据就是其中很重要的一部分.但只有经过处理和分析,提高图像的质量,从中提取出有效 ...

  3. python编程软件v-Thonny(Python编程工具) V3.2.5 官方版

    相关软件 软件大小 版本说明 下载地址 Thonny是一款专门针对python初学者开发的编程学习软件.使用一个友好的IDE,为您提供几个有用的学习工具,所有这些都打包成一个直观的GUI,让你更快的熟 ...

  4. 如何用python做二维码识别软件_Python什么都能做(一)用 Python 做一个扫码工具...

    Python实现扫码工具 二维码作为一种信息传递的工具,在当今社会发挥了重要作用.从手机用户登录到手机支付,生活的各个角落都能看到二维码的存在.那你知道二维码是怎么解析的吗?有想过自己实现一个扫码工具 ...

  5. python做电脑软件-Python编程软件(专业电脑编程工具)V3.9.1 最新版

    Python编程软件(专业电脑编程工具)是一款十分优秀好用的专业电脑编程辅助工具.哪款编程工具比较好用?小编为你推荐这款Python编程软件,功能强大全面,使用后可以帮助用户更轻松高效的进行电脑编程操 ...

  6. 推荐一款手机Python编程软件

    前言 推荐一款手机Python编程软件 最近网友问我有没有手机上运行Python代码的编程软件,所以根据网友们的需求,我介绍一款手机Python编程软件. 具体步骤如下 下载PyDrand3手机编程软 ...

  7. 怎样下载安装python编程软件3.85_Python3.9最新版-Python编程开发工具下载v3.9.0 官方正式版-西西软件下载...

    Python编程开发工具是一款非常强大的编程软件,Python 是一种面向对象.直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.这种语言具有非常简捷 ...

  8. python电脑下载什么软件-Python编程软件(专业电脑编程工具)V3.9.1 最新版

    Python编程软件(专业电脑编程工具)是一款十分优秀好用的专业电脑编程辅助工具.哪款编程工具比较好用?小编为你推荐这款Python编程软件,功能强大全面,使用后可以帮助用户更轻松高效的进行电脑编程操 ...

  9. 编程软件python下载怎么读-使用最方便的计算机编程软件,Python下载使用完美教程...

    Python是一种通用的计算机编程软件,Python对程序员来说是一个非常有用的工具,它允许你快速地编写代码,并且我们使用软件做出的代码运行速度异常快,Python还具有别的软件不具有的突出点那么就是 ...

最新文章

  1. Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86
  2. python爬网页数据用什么_初学者如何用“python爬虫”技术抓取网页数据?
  3. centos下搭建yum服务器
  4. 实战SSM_O2O商铺_48【用户登录】用户登录Dao-Service-Controller-View层的开发
  5. 在参数上使用@Param(“paramName”)注解”解决了传多个参数的问题
  6. Dotnet的局部函数和委托的对比
  7. Reparameterization Trick
  8. JavaScript的一些小技巧(转)
  9. Android应用系列:双击返回键退出程序
  10. csdn 博客添加目录方法
  11. mysql 中间表的好处_MySql 使用中间表来提高统计查询速度
  12. unity下载及安装
  13. ZZULIOJ 1030~1039(oj入门题)
  14. golang微服务网关
  15. linux c 数字字符串互转 相关函数 atoi、atof、atol、atrtod、strtol、strtoul
  16. VUE-CLI不同版本共存
  17. 强化学习笔记-01强化学习介绍
  18. Device Sheets
  19. 用idea打包项目成war最简单的方法
  20. CM10稳定版推出;CyanogenMod域名险被劫持

热门文章

  1. mysql 查询 插入
  2. 学习vue的双向数据绑定的原理
  3. js 对象浅拷贝和深拷贝
  4. Linux中OBS在Wayland环境下黑屏只显示鼠标的应对措施
  5. OpenCV2.4.9 显示鼠标框选区域,其他部分全为零,鼠标创建ROI区域
  6. 安装oracle并且小总结oracle sql
  7. 在openshift上自定义node.js的版本
  8. C# 二进制字节流查找函数IndexOf
  9. Luence初始与简单应用-Document的增删改查.
  10. delegate,event, lambda,Func,Action以及Predicate