Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python实现扫码工具

Python实现扫码工具

作者头像
ZackSock
发布于 2020-10-10 02:01:15
发布于 2020-10-10 02:01:15
2.6K00
代码可运行
举报
文章被收录于专栏:ZackSockZackSock
运行总次数:0
代码可运行

Python实现扫码工具

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

一、案例分析

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

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

二、环境

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
系统:Windows 10
python:python 3.7.9
opencv:opencv-python-4.4.0.44
pyzbar:pyzbar-0.1.8

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install opencv-python

然后是pyzbar模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install pyzbar

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

三、识别二维码

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

1.读取二维码图片2.解析二维码中的数据3.在解析出的数据中提取data信息

实现代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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长什么样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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的信息。所以我们需要通过下面的代码再次解析:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
text = data[0].data.decode('utf-8')

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def scan_qrcode(img_path):
    qrcode = cv2.imread(img_path)
    data = pyzbar.decode(qrcode)
    return data[0].data.decode('utf-8')

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

四、调用摄像头

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

1.调用摄像头2.循环3.在循环内读取一帧画面4.显示当前读取的画面5.等待键盘输入6.判断是否按退出键q7.按了退出键则退出,没按则继续循环

具体代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

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

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

五、实现扫码工具

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的内容,只有当我们真正解析到了数据,程序才会输出结果,并退出程序。

到这里,我们就实现了扫码工具。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新建文件夹X 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HTTPS证书申请及windows server部署
StartSSL免费DV证书 沃通(Wosign)免费DV证书 这两个已经被苹果拉入黑名单。我10月份在StartSSL申请的证书还可以使用。但是近期申请的已经不被信任,苹果设备上使用近期申请的证书都已经无法打开(亲测)。 如果证书无效或不被信任在微信企业号里面打开的时候会提示 网络出错,请轻触重新加载 -1202的提示。 -1202的错误的意思就是kCFURLErrorServerCertificateUntrusted
forrest23
2018/08/03
3.2K0
Cloudflare免费ssl证书设置
cloudflare是一家国外的 CDN 加速服务商,还是很有名气的。提供免费和付费的加速和网站保护服务。cloudflare提供了不同类型的套餐,即使是免费用户,cloudflare 提供的功能也是很全面的。
爱游博客
2019/08/07
23.6K0
Cloudflare免费ssl证书设置
关于免费SSL证书的那些事儿
根据 Let’s Encrypt CA 的统计,截至 2017 年 11 月,Firefox 加载的网页中启用 HTTPS 的比例占 67%,比去年底的 45% 有巨大提升。浏览器开发商如 Mozilla, Google 准备采取下一步措施:将所有 HTTP 网站标记为不安全。 随着 HTTPS 的普及,给网站加个 SSL 证书已经是大势所趋而且很有必要了。 目前已经存在不少免费好用的 SSL 证书,因此,本文就来盘点一下关于免费 SSL 证书的那些事儿。 一、Let’s Encrypt 官方网站:htt
Zip
2018/07/20
2K0
域名启用 HTTPS 加密功能更安全,国内免费 SSL 证书对比
屈建山
2017/08/07
3.8K0
WordPress整站轻松开启HTTPS
Jianbo
2017/12/29
4K0
WordPress整站轻松开启HTTPS
服务器不支持ssl怎么回事,客户端和服务器不支持一般 SSL 协议版本或加密套件 解决方法…
此网站无法提供安全连接 www.huichengff.com 使用了不受支持的协议。
全栈程序员站长
2022/09/05
16.8K0
IP也可以申请SSL证书开启https?其实已经有许多靠谱又便宜的国产品牌支持
公网IP作为常用的互联网访问,对于IP安全性目前协议上传输是非常重要的。网站需要IP地址实现HTTPS加密,那么IP能申请SSL证书吗?答案是可以的,目前,JoySSL已经支持IP安装SSL证书实现HTTPS保护了。
学长陶小桃
2022/10/26
13.6K0
IP也可以申请SSL证书开启https?其实已经有许多靠谱又便宜的国产品牌支持
申请UK2商家Comodo PositiveSSL免费SSL证书完整过程
对于我们用户来说,即便网站没有使用SSL也没有多大的关系,但是从安全角度考虑,尤其是用户交互的网站平台是必须要使用SSL安全证书的,这样数据在传输过程中可以起到安全作用。应该是在去年的时候,Google提出来如果有网站采用SSL(HTTPS)地址模式,同等条件下会优先排名展示,至此包括国内的主流搜索引擎提供商也类似的都加入这些因素。
老蒋
2021/12/27
1.4K0
申请UK2商家Comodo PositiveSSL免费SSL证书完整过程
分享一个免费SSL证书申请网站,给网站开启https协议
这些天,由于公司的业务需求,接触到了 ssl 证书和 https 协议。博客前几篇文章也分享了在 WEB 服务器上安装 SSL 证书,为网站开启 https 协议的教程,感兴趣的童鞋可以前往查看相关文
张戈
2018/03/23
3.9K0
分享一个免费SSL证书申请网站,给网站开启https协议
IIS 使用 Let’s Encrypt 证书部署 HTTPS 站点
Let’s Encrypt(https://letsencrypt.org ) 是可以签发免费 SSL / TLS 证书的 CA 机构,它是为普及 HTTPS 而发起的,推动了基础 DV SSL 证书的普及。其证书已经被 Mozilla、Google、Microsoft 和 Apple等主流浏览器支持,只需要 web 服务器配置好 HTTPS 证书,浏览器会在加载时验证 web 服务器 HTTPS证书是否有效。 使用 Let’s Encrypt 一个很重要的理由是免费,避免 ISP 劫持;还有申请速度快、无需注册账户等优点。在对比了众多免费 CA 后,Let’s Encrypt是比较方便和理想的,它提供了基础 DV SSL证书,只提供了数据加密;不验证身份,无法向用户证明网站的所有者。但即使这样也满足了基本需要了。
Savalone
2020/02/11
4.5K0
IIS 使用 Let’s Encrypt 证书部署 HTTPS 站点
HTTPS证书知识扫盲
现在搞网站域名不加个HTTPS就显得不专业,特别在使用JWT进行认证的接口一定要加HTTPS为你的接口增加一层安全屏障。今天就来聊聊配置HTTPS的关键SSL证书,也被称为CA证书。
码农小胖哥
2020/09/28
1.8K0
免费SSL证书申请及部署实践
网络上关于如何签发免费SSL证书的博文一大片,但是真正操作起来的能让新手不迷惑的却很少,很多操作步骤受限于国内无法访问外网的阻碍,导致无法真正实施成功。 实际上,关于申请免费SSL证书主要涉及两大部分: 第一,如何快速申请到一个免费的DV证书(通常免费的证书都是DV证书,DV证书对于个人或者测试用途足够了)。 第二,成功申请到证书之后如何配置部署,使得网站可以通过HTTPS访问。
编程随笔
2022/09/08
4.9K0
免费SSL证书申请及部署实践
给网站安装免费的通配SSL证书,轻松实现HTTPS并自动续签
出于安全考虑,现在大部分的网站都已经配置了SSL证书,直观的感觉就是现在大部分的网站都是HTTPS,而不是HTTP了。甚至,Chrome 从90版本开始,就已经是默认请求HTTPS:
Mintimate
2024/08/14
2.5K1
给网站安装免费的通配SSL证书,轻松实现HTTPS并自动续签
DNSPod十问濮灿:中国网站的SSL证书即将断供?
问答时间:2020年8月20日 嘉宾简介: 濮灿:沃通电子认证有限公司总经理,360政企安全云安全事业部总经理、360未来安全研究院云安全研究院院长。从事多年技术开发和技术团队建设,对Linux内核、网络协议栈、高性能网络、DNS解析服务、WEB安全、SDP、SDWAN等多个技术方向有开发和项目经验。擅长网络安全和云安全方向,曾任上海牙木通讯有限公司研发总经理,盛大创新院高级研究员,上海聚流软件科技有限公司CEO,现主要负责360云安全和虚拟化安全的技术架构和产品市场战略。 主持人简介: 吴洪声(人称
腾讯云DNSPod团队
2020/08/21
2.9K0
证书签发机构StartCom也被曝签发假证书
位于以色列埃拉特的证书颁发机构StartCom 之前已经被大部分浏览器取消信任,但前几天被曝光签发了假的证书,包括最高信任级别的 EV 证书。 StartCom StartCom 是一家位于以色列埃拉特的证书颁发机构。2016年10月24日,Mozilla在其安全博客上宣布,由于在对证书颁发机构沃通(360 旗下)数个问题的调查中发现它收购了StartCom,而交易双方并未披露此事,Mozilla将从Firefox 51开始,停止信任2016年10月21日后签发的证书。2016年9月1日,Google也
FB客服
2018/02/28
1.8K0
证书签发机构StartCom也被曝签发假证书
ssl证书怎么申请?网站ssl证书申请
随着搜索引擎巨头百度、谷歌等大力倡导网站https加密访问,以及加强互联网信息安全建设的需要,越来越多的网站、系统开始实现https加密。网站实现https加密需要用到SSL证书,那么网站SSL证书如
沃通WoTrus数字证书
2023/02/27
18.2K0
ssl证书怎么申请?网站ssl证书申请
使用Certify来自动申请并配置Let’s Encrypt免费SSL证书到IIS8
越来越多的网站在启用HTTPS,也就是SSL加密通讯连接访问。特别是去年开始BAT在国内的推广和应用要求。要知道部署发布一个苹果iOS企业应用,下载服务器就必须使用HTTPS协议。
崔文远TroyCui
2019/02/26
2.9K0
使用Certify来自动申请并配置Let’s Encrypt免费SSL证书到IIS8
分享几个免费SSL证书申请网站,给网站开启HTTPS协议
全民 HTTPS 时代来临,分享几个免费 SSL 证书申请网站,给网站开启 HTTPS 协议。 一、腾讯云 申请非常简单,打开页面并登陆之后点击申请证书,填写要申请的域名之后在解析一个 DNS 记录用于验证,十分钟不到就可以颁发证书了!如果是使用 dnspod 或腾讯云解析的域名,则可以全自动验证,坐等颁发即可。 申请地址:点击直达 二、阿里云 和腾讯云基本一致,使用的是赛门铁克的免费 1 年单域名证书,申请页面较为难找,而且在购买页面,略显麻烦,点开购买地址后选择【免费 DV SSL】并提交 购买地址:点
沈唁
2018/05/24
4.1K0
如何获取免费的 SSL 证书?
SSL 证书作为保障网站安全的关键工具,其重要性不言而喻。它不仅能加密数据传输,保护用户隐私,还能提升网站的可信度和搜索引擎排名。对于预算有限的个人站长和小型企业来说,免费的 SSL 证书无疑是保护网站安全的最佳选择,本文将简单介绍SSL证书的加密原理和几种获取免费证书的方式。
星尘安全
2025/05/15
4070
如何获取免费的 SSL 证书?
免费申请通配符域名SSL证书
域名 SSL 证书是数字证书的一种,用于校验服务器身份,同时具有数据加密传输的特性。在开启 SSL 证书之后不仅能够避免敏感信息如帐号密码等遭窃听,同时还能启用 http/2 等高级特性。在最新版的 Chrome 浏览器中,所有非加密链接的网站更是被标识为了不安全。同时我们可以看到,百度、淘宝、京东等网站也早已开启全站 https 加密连接,全民 SSL 时代即将来临。
reizhi
2022/09/26
22.3K0
免费申请通配符域名SSL证书
推荐阅读
相关推荐
HTTPS证书申请及windows server部署
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验