python实战扫码下载_实例:用 Python 做一个扫码工具

原标题:实例:用 Python 做一个扫码工具

来自公众号: 新建文件夹X

链接:https://blog.csdn.net/ZackSock/article/details/108610957Python实现扫码工具

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

一、案例分析

这两个操作分别对应了两个模块,它们就是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

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

1.读取二维码图片2.解析二维码中的数据3.在解析出的数据中提取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类用于读取视频,同样可以用来调用摄像头。调用摄像头的步骤如下:

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

具体代码如下:

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.readcv2.imshow('scan qrcode', frame)

# 解析二维码text = Nonetry:text = scan_qrcode(frame)except Exception as e:passif text:print(text)break

key = cv2.waitKey(10)if key == ord('q'):breakcv2.destroyAllWindows

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

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

到这里,我们就实现了扫码工具。 返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端小问题4

爱、喜悦、和平。 1、文字一个一个显示 js代码 <script type"text/javascript">window.οnlοadfunction(){var story document.getElementById(sto);var s document.getElementById(show);var a story.innerHTML.slice("");var i 0;timersetInt…

matlab解带参数的积分方程组,方程组求解问题:方程组中有带参数的积分函数,求参数...

吴老师&#xff0c;您好&#xff01;请教您一个问题。我想求下面方程组的解&#xff1a;quadl((x) exp(a(1)a(2)*xa(3)*x.^2a(4)*x.^3a(5)*x.^4),-100,100)-1;quadl((x) x.*exp(a(1)a(2)*xa(3)*x.^2a(4)*x.^3a(5)*x.^4),-100,100)-m1;quadl((x) x.^2.*exp(a(1)a(2)*xa(3)*x.^2a…

vue 页面切换动画_Flutter Hero动画让你的APP页面切换充满动效 不一样的体验 不一样的细节处理...

优美的应用体验 来自于细节的处理&#xff0c;更源自于码农的自我要求与努力&#xff0c;当然也需要码农年轻灵活的思维。本文章实现的Demo效果&#xff0c;如下图所示&#xff1a;class HeroHomePage extends StatefulWidget { override _TestPageState createState() > …

自定义左右侧滑菜单

实现效果&#xff1a; 左右侧滑菜单&#xff0c;侧滑栏占主屏比为60%监听触控&#xff0c;自定义滑动动画&#xff0c;当侧边栏滑动超过50%松开触控将自动滑动到60%&#xff0c;未超过50%松开触控回归侧边栏隐藏为主屏设置蒙版效果&#xff0c;根据侧滑菜单的占屏比设置主屏蒙版…

秦九韶算法matlab程序,数值分析matlab程序实例.doc

数值分析matlab程序实例1&#xff0c;秦九韶算法&#xff0c;求出P(x3)24x5x^22x^3的值clear?all;x3;n3;a(1)2;a(2)4;a(3)5;a(4)2v(1)a(n1);for k2:(n1);v(k)x*v(k-1)a(n-k2);end?pv(n1)p ,1132&#xff0c;一次线型插值程序&#xff1a;利用100.121.求115的开方。clear all;…

在github上创建新分支

在github上创建仓库&#xff1a; Create a new repository on the command line touch README.md git init git add README.md git commit -m "first commit" git remote add origin https://github.com/BrentHuang/MyRepo.git git push -u origin master 在本地新建…

以python程序调用的系统_python 系统调用的实例详解

python 系统调用的实例详解本文将通过两种方法对python 系统调用进行讲解&#xff0c;包括python使用CreateProcess函数运行其他程序和ctypes模块的实例&#xff0c;一 python使用CreateProcess函数运行其他程序>>> import win32process>>> handle win32pro…

ubuntu php7 memcache,linux上安装php7 memcache扩展

php7安装memcache扩展需要memcache php7的分支 否则安装会失败php7的memcache扩展安装&#xff0c;真的很让人心碎&#xff01;下面则是php7的扩展memcache安装了。用之前的php版本安装是没有问题&#xff0c;但是用了php7安装 http://pecl.php.net/package/memcache 下的任一…

好文推荐系列--------(3)GruntJS 在线重载 提升生产率至新境界

好文原文地址&#xff1a;http://segmentfault.com/a/1190000000354555 本文将首先介绍grunt-markdown插件如何配合HTML模板使用&#xff0c;接着我将介绍如何使用grunt-watch插件将工作效率提升至新层次。如果你不熟悉GruntJS&#xff0c;请先阅读我关于GruntJS的文章。 Githu…

python3有多少个关键字排序_python3 数据结构和算法-- 通过某个关键字排序一个字典列表...

通过某个关键字排序一个字典列表问题你有一个字典列表&#xff0c;你想根据某个或某几个字典字段来排序这个列表。解决方案通过使用 operator 模块的 itemgetter 函数&#xff0c;可以非常容易的排序这样的数据结构。 假设你从数据库中检索出来网站会员信息列表&#xff0c;并且…

php页面怎么去登录,php中登录后跳转回原来要访问的页面实例

在很多网站用户先访问一个要登录的页面&#xff0c;但当时没有登录后来登录了&#xff0c;等待用户登录成功之后肯定希望返回到上次访问的页面&#xff0c;下面我就来给大家介绍登录后跳转回原来要访问的页面实例最简单的办法就是直接使用php $_SERVER[HTTP_REFERER]如果我在A.…

三目运算

total>100?total*0.8:total;//true执行冒号前面的&#xff1b;false执行冒号后面的 等价于 if(total>100){ totaltotal*0.8; }else{ totaltotal; }转载于:https://www.cnblogs.com/barbie7/p/5129566.html

二叉树的创建_大多数人都不会手写创建并遍历二叉树,一航这里帮你终结了

创建二叉树、遍历二叉树、二叉树的最近公共祖先任何疑问、意见、建议请公众号留言或联系qq474356284先序、后序创建二叉树先中后层序遍历二叉树二叉树的最近公共祖先 输入格式&#xff1a;创建二叉树时的输入&#xff1a;如序列&#xff1a;{1 2 -1 -1 3 -1 -1}表示1结点有2,…

tp5 php正则邮箱,TP5验证器使用实例

TP5验证器建立模块\validate\验证器文件名例如我们定义了一个验证USER的验证器类<?php namespace app\admin\validate;use think\Validate;class Admin extends Validate{protected $rule [username > require|min:3|max:16|unique:admin,password > require|min:6|…

zookeeper 密码_阿里资深JAVA架构带你深度剖析dubbo和zookeeper关系

为什么要用dubbo&#xff1f;当网站规模达到了一定的量级的时候&#xff0c;普通的MVC框架已经不能满足我们的需求&#xff0c;于是分布式的服务框架和流动式的架构就凸显出来了。单一应用架构当网站流量很小时&#xff0c;只需一个应用&#xff0c;将所有功能都部署在一起&…

python pandas csv 追加 空行,python – Pandas:read_csv在空行后忽略行

有一个奇怪的.csv文件,如&#xff1a;header1,header2,header3val11,val12,val13val21,val22,val23val31,val32,val33很好,但在这些线之后,总会有一个空行,后面跟着很多无用的线.整个事情是一致的&#xff1a;header1,header2,header3val11,val12,val13val21,val22,val23val31,…

nw.js FrameLess Window下的窗口拖拽与窗口大小控制

nw.js FrameLess Window下的窗口拖拽与窗口大小控制 很多时候&#xff0c;我们觉得系统的Frame框很难看&#xff0c;于是想自定义。 自定义Frame的第一步是在package.config文件中将frame选项设置为false。 { "name": "1", "main": "index.…

python控制语句实验报告,python流程控制语句案例练习

最近玩python&#xff0c;为了更好的学习其中的流程控制语句&#xff0c;本身写了一个查询员工信息和更新信息的脚本&#xff0c;此脚本仅供练习使用。大拿可绕行&#xff01;python#!/usr/bin/env pythonimport sysimport osos.system(clear)mess \033[;35m ID :%s\033[0m\03…

linux 文件重命名_如何在 Linux 上重命名一组文件 | Linux 中国

要用单个命令重命名一组文件&#xff0c;请使用 rename 命令。它需要使用正则表达式&#xff0c;并且可以在开始前告诉你会有什么更改。-- Sandra Henry-stocker几十年来&#xff0c;Linux 用户一直使用 mv 命令重命名文件。它很简单&#xff0c;并且能做到你要做的。但有时你需…

Spring 构造注入 传參数

1. 提供相应的构造方法 //构造器注入 public class Bean6 {private String name;private Integer age;// 服务于构造器注入使用public Bean6(String name, Integer age) {super();this.name name;this.age age;}public void show() {System.out.println("bean6:&…