当前位置: > 热文

微信扫码为啥那么快?官方揭秘

时间:2022-04-16 15:44:28 热文 我要投稿

很多软件都支持二维码扫描,部分手机ROM还内置了单独的扫一扫功能,但是你是否发现了,微信的扫码速度似乎特别的快,而且很精准。这是为什么呢?

微信官方公众号“微信派”就特别介绍了微信二维码扫描功能的一些技术细节。

二维码和我们在几乎所有产品上能看到的条形码一样,都是通过条码的组合记录信息,不过比条形码(本名应为一维码)多一个维度,因而能够存储更高密度的信息,比如图片、汉字、数字。

扫码过程其实就是不断对焦、采集图像、识别的过程,而采集的帧数越少,代表扫码速度越快,可以理解为图形处理器每秒钟能够刷新几次。

据粗略估算,微信目前一年要处理至少二维码达千亿级,市面上超过60%的二维码都诞生于微信平台,相当于每个微信活跃用户平均每年都会扫描140次甚至更多的二维码。

【微信扫码的秘密:引擎+算法】

微信扫码使用了自家开发的QBar引擎,并计入了预判算法,在识别条码之前会过滤无码图像,只识别有意义的内容——二维码和条形码。

整个扫码预判模块位于核心识别引擎之前,不再需要对输入的视频中的每一帧图像进行检测识别,能实现快速过滤大量无码图像,减少后续不必要的定位和识别对扫码客户端造成的阻塞,使响应更加及时,增加扫码过程中的流畅度,而这就是微信扫码快速的关键原因。

微信团队分析数据显示,该引擎在识别正常图片时的解码速度,iOS可缩短至5毫秒,安卓也仅仅约12毫秒,当然这也和手机配置尤其是摄像头有很大关系。

扫码预判模块流程图

对于无码图像,主流手机的处理速度均有较大幅度地提高,部分机型平均运行时间降低到10毫秒以内。

对于有码图像,二维码的平均识别也快了近35%,而且维持了识别率。

不同机型无码样本测试速度对比

【“坏码”也能扫】

一些二维码就算出现穿孔、污损或者弯折,还是一样可以识读,这是因为二维码中存储的信息通常都经过了纠错编码,是有冗余的。

一个二维码所能表示的比特数是固定的,包含的信息越多那么冗余度就越小,反之亦然。微信二维码中包含的信息量并不需要很大,这意味着编码的冗余度可以做得较高,所以即使损毁面积达到30%也依旧可以恢复。

QBar扫码引擎对二维码容错性解码算法、多语言字符检测算法等均使用进行了数十项优化,在识别率和识别速度上得到了提升。

简单来说,QBar识别及解码的流程包括:

- 读取视频或图像,通过灰度化处理得到单张灰度图;

- 对灰度图进行处理得到二值图像(二值化是引擎在识别前把图像转换成01图像的过程);

- 将二值图输入不同的解码器识别是否存在二维码;

- 如果检测到存在某种编码,即通过相应的解码器进行解码,并返回解码结果。

QBar引擎识别解码流程

在提高成功解码的概率上,微信的另一个做法就是给每个步骤做上“标签”,目的是找出错误信息,对失败信息再设置相应的二次检测流程,在失败的步骤处进行更”努力”地尝试,且越到后面的步骤,表明图中存在二维码的概率越大。