学习
实践
活动
专区
工具
TVP
写文章
专栏首页许典平的专栏菊花绽放:微信是如何识别小程序码的?
原创

菊花绽放:微信是如何识别小程序码的?

作者:lincolnlin,endyxu,changoran

【小程序码-设计篇】菊花绽放 一文中介绍了小程序码的设计过程,本文继续分享我们在小程序码识别上面的一些心得,权当抛砖引玉,欢迎有共同兴趣的同事一起讨论。

识别之前,我们需要对照片做什么处理

打开扫一扫,扫码引擎通常采集到的图片是这样子的。

引擎其实并不关心这朵菊花是什么颜色,因此,我们把图片简化,处理成灰度图。

二值化可以让引擎做的事情更简单,因此再将灰度图处理成位图。

如何在黑白图中快速找到菊花的位置

细心的朋友肯定注意到,每一朵菊花都有两个共同点:

  • 3 个圆形的“牛眼”(定位点)
  • 右下角的“小程序 LOGO”

以上是小程序码的定位信息,准确的定位是识别的第一步。

如何快速找出所有可能的定位点

在设计这个菊花码时,我们是按照 0.8 : 1.2 : 1 : 1.2 : 0.8 绘制定位点的。

为什么不采用 1:1:1:1:1 的比例?因为前者比例比较贴近黄金比例,更符合人类审美需求。(下图右为 1:1:1:1:1)

基于这个特性,使用水平,垂直,45 度角等三个方向的扫描线扫描全图。如果三个方向的黑白像素都接近这个比例,显然它极可能是一个定位点。

怎么定位“小程序 LOGO”

最简单的方法,根据 3 个定位点的位置,预估小程序 LOGO 的中心位置(平行四边形)

在很多扭曲的情况下,上述方法仍有较大偏差。因此我们提出了一种改进方法:基于 LOGO 为圆形的特性,将预估的中心点修正到圆心位置

具体校正方法如下:

拍摄出来的码这么“歪”,能否进行“摆正”

由于上文中,我们已经找到了码在图像中的位置,但由于这个码可能已经被旋转,扭曲,所以,我们需要再做一次矩阵变换(透视变换),将其变换到直角坐标系。变换后的码,已经比较易于被机器解读了。

怎么读码

二维码怎么读码

上述流程和传统二维码识别的核心思想并无二致,如果你坚持看到这里,说明你已经知道如何识别二维码了。

经过透视变换,二维码其实已经变成了单位矩阵(如上图,你可以理解一个小块为一个像素点,这里为了方便阅读,放大了),那么,我们顺着二维码的编码路径,就能完整地读出编码信息了。

小程序码怎么读码

其实,按照二维码的套路,我们可以把透视变换后的图,进行编码区域划分。值得注意的是,这里一个彩色小块并非一个像素点,而是一片区域。一个编码块是 0 还是 1,取决于该区域上的黑色像素(面积)的比例,我们称之为“投票法”。

是否有其他读码方案

但在实际应用中,我们发现该方法对于扭曲的场景,识别效率很低,鲁棒性不佳。经过各种尝试和思考,我们借鉴了一维码的识别思路 ——“采样法”。

举个例子,上图中,我们用红色扫描线采样一维码的信息,对于采样的一行像素,我们根据比例读出具体的编码。

类比该方案,我们利用小程序码为“放射线”编码的特性,采样每一条放射线上的一个像素序列,根据黑白比例读出每一条线的编码信息。

目前扫码引擎的性能如何,能应对什么场景

在测试阶段,我们内部自行拍摄采集了各种场景下的大量测试样本,做了如下评测

包括如下场景

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

登录 后参与评论
0 条评论

相关文章

  • 微信小程序是如何实现编译的

    过往中小企业或技术团队开发一个 App 的时间成本和人力成本居高难下,但是随着微信上线小程序,更像是为这部分群体打开了一扇天窗,此后小程序呈现出井喷式发展的状态...

    Onegun
  • 微信小程序里长按识别二维码

    可以看到,我们成功的在小程序里实现了长按识别二维码的功能。下面就教大家如何一步步实现吧。因为官方的规格还没有明确说支持这个功能,所以这个功能有可能随时被禁。这...

    编程小石头
  • 微信小程序里长按识别二维码

    可以看到,我们成功的在小程序里实现了长按识别二维码的功能。下面就教大家如何一步步实现吧。因为官方的规格还没有明确说支持这个功能,所以这个功能有可能随时被禁。这里...

    编程小石头
  • 2021好玩的微信小程序_如何制作微信小程序

    在官网注册页选择小程序注册即可,账号分为个人版和企业版: 个人版相对于企业版注册流程更为简单和宽松。

    全栈程序员站长
  • 微信小程序推出的小程序游戏,是如何做到的❓

    小游戏从微信小程序诞生,我们先不妨看看他的官方定义:小游戏是以小程序为载体的新型游戏产品形态,具备无需下载、即点即玩、体验轻便等特点。 「呼朋引伴,说玩就玩,玩...

    没有用户名丶
  • unwx:一个解压微信小程序的命令 、微信小程序是如何压缩的

    两个月前在写一系列的微信小程序的文章时,写了一个库,用来解压微信小程序的——当时想的是等着公测了,来试试看能不能解压开别人的代码。然后再做个兼容小程序的框架,再...

    Phodal
  • 【小程序码设计篇】菊花绽放

    2017 年四月,微信正式推出了小程序码。小程序码设计深度解析,为何长得像菊花,进行二次美化应该注意什么,本文为你揭晓!

    serena
  • 微信小程序反编译教程(微信小程序反编译得到的是html)

    下载安装完,安装 “微信app” 和 “re管理器” Re管理器 主要用于提取微信小程序加载时下载在安卓模拟器上的文件。 安装完这两app之后,打开微信搜索...

    全栈程序员站长
  • 微信扫码登录是如何实现的?

    网页版微信刚推出时,无数人被它的登录方式惊艳了一下,不需要输入用户名密码,打开手机微信扫一扫,便自动登录。从原理上讲,二维码只能是一段文本的编码,如何用它实现快...

    Java技术栈
  • 鹅厂美女工程师来告诉你,小程序码是如何「绽放」的 | 晓组织 #20

    腾讯 CDC 全称为「用户研究与体验设计中心」,是腾讯公司级设计团队,致力于提升腾讯产品的用户体验,探索互联网生态体验创新。

    知晓君
  • 【黄啊码】vue和微信小程序的区别

    vue的钩子函数在跳转新页面时,钩子函数都会触发,但是小程序的钩子函数,页面不同的跳转方式,触发的钩子并不一样。

    黄啊码
  • 微信小程序|API扫码及蓝牙的使用

    此方法加入了两种基本的扫码方法,即从相册选择照片和直接从相机扫码,提高了小程序扫码的便利度。

    算法与编程之美
  • 码云推荐 | Symphony 社区平台的微信小程序

    2017年1月9日小程序如约而至,Symphony 社区平台的微信小程序,提供一些实用工具服务,比如『书单』。 登录 ? 对 md5.js 进行封装,使其可以在...

    码云Gitee
  • 微信小程序的下拉刷新的页面是如何设置完成的?

    裴来凡
  • 小程序如何关联微信小程序二维码,并实现二码合一聚合

    开发者可不需更换线下二维码,通过在小程序后台设置关联规则,将原线下普通二维码的地址与小程序页面关联,用户用任意一个 App 扫描该地址的普通二维码即可打开小程序...

    pak
  • 如何为你的微信小程序瘦身?

    众所周知,微信小程序在发布的时候,对提交的代码有1M大小的限制!所以,如果你正在写一个功能稍微复杂一点的小程序,就必须得时刻小心注意你的代码是不是快触及这个底线...

    一斤代码
  • Taro 如何开始微信小程序的开发

    下载并打开微信开发者工具 https://developers.weixin.qq.com/miniprogram/dev/devtools/download....

    GoCoding

扫码关注腾讯云开发者

领取腾讯云代金券