最近呢,知乎发表了一个报告说,安全防护系统全面升级了(是小管家说的)。

现在内容中的二维码会被自动替换为相应的链接,并缀以“(二维码自动识别)”字样。

今天就来看,如何用Python自动识别二维码。

01. 编码

首先要熟悉一套理论:什么是二维码?

条形码我们都见过,这就是一种“一维码”。竖直方向上,条码是均匀的,长短也不影响,信息只在水平方向上存储。

二维码的信息则在整个平面上存储,当下常见的二维码叫QR码(Quick Response Code)。实际上广义的二维码有很多形式,比如以前机器编程用的打孔带,还有考试的答题卡也是一个原理。

二维码的一大优势在于容错率高,即使遮挡一部分,也不影响解码。这就是为什么很多QR code会在中间放一个图标,本质上来说,这个图标就相当于给二维码又打了个码。

如果把太极图看作二进制,那么这也是个二维码,白的是0,黑的是1。

QR code存储信息的基本套路就跟“阴阳”类似,白0黑1。特别显眼的那几个方块和虚线,则是辅助定位用的。

>>>这里本来有个二维码图样,展示各个区域的作用,但是被自动识别了。<<<

Mr. Watson, come here - I want to see you. (二维码自动识别)

边边角角上的特定区域都按照标准存储固定的信息,就像一张卷子上不可能全是题,总有写班级姓名的地方。

需要编码的目标字符首先转换为二进制数,这个数的位数与QR code的尺寸有关。二级制数字就可以映射为非黑即白的色块,再依照标准套路填充到数据区域。

虽然被编码的内容各不相同,但是我们生活中所见到的QR code似乎长得都差不多,看起来都比较“均匀”,这是“掩码”的作用。

掩码就像Photoshop里的“蒙版”,与原始数据做“异或”计算后,出来的码看起来就匀和了。

02. 解码

解码是编码的逆过程,就是还原出原本的信息。在Python中,用到一个库,叫zbar。

说起来这个库别扭的很(因为本来并不是用Python写的,外部依赖较多),首先官网上的包最高只支持Python 2.6,不姿慈2.7;其次,2.6就2.6吧,但是安装却一直失败,不论Linux,Win10还是Mac;最后发现只支持32位系统,我又装了一个XP虚拟机。

当那熟悉的开机音乐随着蓝天绿地出现的时候,我仿佛回到了家里刚买电脑的那个下午。

一个姿慈Python 2.7的zbar安装包:

除zbar库之外,还需要PIL库以进行图片操作。

03. 微小的示例

#-*- coding: utf-8 -*-

import zbar

from PIL import Image

#创建图片扫描对象

scanner = zbar.ImageScanner()

#设置对象属性

scanner.parse_config('enable')

#打开含有二维码的图片

img = Image.open('<你的图片路径>').convert('L')

#获取图片的尺寸

width, height = img.size

#建立zbar图片对象并扫描转换为字节信息

qrCode = zbar.Image(width, height, 'Y800', img.tobytes())

scanner.scan(qrCode)

data = ''

for s in qrCode:

data += s.data

# 删除图片对象

del img

# 输出解码结果

print data

运行结果:

解码成功之后会得到一个URL地址。当我们在用手机扫描QR code的时候,其过程就是在解析得到二维码之后,通过微信向该URL发送请求,然后访问。

以上案例中,所用的是本文的题图,QR code不是整张图片的主体,而是融入在背景当中,这仍然不影响识别。(而本文题图没有被知乎强制识别,我推测是因为题图的位置问题)

题图中石榴姐手中的二维码是我的 [分答] 主页链接,之前已经回答了几个问题,欢迎感兴趣的朋友们关注、提问。

除微信扫描二维码以外,也可以直接搜索“Kaiser”,头像是一样的,谢谢大家。

python解析二维码_Python如何识别二维码相关推荐

  1. 基于python及图像识别的围棋棋盘棋子识别4——源码及使用说明

    最近在做一个围棋棋盘棋子识别项目,这是该项目第四篇,系列文章如下: 1.基于python及图像识别的围棋棋盘棋子识别1--定位棋盘位置 2.基于python及图像识别的围棋棋盘棋子识别2--定位棋子位 ...

  2. 用python生成个性二维码_Python 生成个性二维码

    1.1 实验内容 本课程通过调用MyQR接口来实现生成个人所需二维码,并可以设置二维码的大小.是否在现有图片的基础上生成.是否生成动态二维码. 本课程主要面向Python3初学者. 1.2 知识点 P ...

  3. 77、基于STM32单片机的超市餐饮二维码/条形码摄像头识别结账扫码系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序源码 七.资料包括 摘要 二维码识别系统是集数据采集,识别,以及显示 ...

  4. 微信小程序文字链接生成二维码,扫描识别二维码

    给大家推荐一个非常实用且有趣的微信小程序:超实用工具箱. 超实用工具箱小程序里面包含了很多小工具,涵盖了工作.日常生活和娱乐版块.具体的功能大家可以打开微信扫描下方二维码,即刻体验: 接下来给大家介绍 ...

  5. JS识别二维码,JS解二维码,前端识别二维码

    1.之前有找过识别二维码的插件,但是遇到了些问题,具体表现为文字识别不了,带get参数识别不了.正常的普通链接没问题. 2.找了一天也没找到一个正常的.吐槽一下网上的教程正是什么样的都有,真是醉了. ...

  6. python创建一个n*m的二维数组_Python中创建二维数组

    Python中创建二维数组 二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩 ...

  7. python一维数组和二维数组_Python numpy实现二维数组和一维数组拼接的方法

    Python numpy实现二维数组和一维数组拼接的方法 撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape ...

  8. python解析器的作用_Python 解析器

    2008-01-07 17:55 星期一 嵌入Python解析器执行一些简单的Python 脚本脚本很容易,但是当python解析器用到扩展模块时和多个线程都需要Python解析器执行脚本时,遇到了一 ...

  9. python中字典是几维数据_Python 中的多维字典

    Python中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': 1 ...

最新文章

  1. 文件管理服务器数据库,会博通系统的海量数据库管理策略
  2. mysql delete in 结果集_MySQL从删库到跑路(2)SQL语句示例
  3. Java并发编程—线程间协作方式wait()、notify()、notifyAll()和Condition
  4. linux ftp 工作过程,linux中ftp的安装过程记录[运维篇]
  5. 安装后jdk1.8 配置环境变量以后 版本显示还是1.7
  6. realtek网卡mac硬改工具_七彩虹联合Realtek发布粉色固态硬盘 首发评测
  7. 构建面向对象的应用软件系统框架
  8. Shell脚本学习-阶段二十七-命令解释一
  9. 让Linux下的打印机hp1020、hp p1008自动加载固件
  10. php网页可视化编辑器,推荐几款HTML可视化在线编辑器
  11. 虚拟机打开了服务器维护,Vmware WorkStation 打开远程服务器上的虚拟机
  12. 使用 WinRAR 将bat转exe
  13. 未知错误 ID:-2147467259 操作必须使用一个可更新的查询
  14. python 公众号引流_公众号粉丝从0到1000的引流思路
  15. 接入百度智能云文字识别OCR记录
  16. 编程之美 - 让CPU占用率曲线听你指挥
  17. 男人30岁之前必须要明白的16条
  18. Python多线程-手慢无的真相
  19. html5弹页面腮红,腮红可以用手涂吗?腮红用刷子还是粉扑?
  20. Intellij IDEA里的md5验证

热门文章

  1. 毫无头绪的自学Python,你可能连门槛都摸不到!
  2. 贵州省大数据发展驶入“信息高速公路”
  3. 消息摘要算法-HMAC算法
  4. python-docx官方文档翻译--用户指南04--使用文本
  5. Promethus的Grafana图形显示MySQL监控数据
  6. API:String、integer
  7. Matlab中用于数据预测spline()函数的使用
  8. 【VUE】微商城(一)----安装mint-ui,mui,sass
  9. matplotlib部分中文字体的英文名
  10. 视觉里程计 matlab实现,深度 | 视觉里程计---推导公式来了