简介: 源自支付宝的扫码组件,全新降级,收费凋谢!让天下没有难认的“码”
二维码又称二维条码,常见的二维码为 QR Code,QR 全称 Quick Response,是一个近几年来挪动设施上超风行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能示意更多的数据类型。
设施扫描二维条码,通过辨认条码的长度和宽度中所记录的二进制数据,可获取其中所蕴含的信息。
一、背景
随着支付宝的线下场景不断扩大,收钱码、口碑、共享单车、充电宝、停车缴费等产品让咱们的生存越来越便当。二维码因为成本低、兼容性好成为了线上线上最次要的连贯工具,也因而面临更多新的挑战。因为二维码是一种点阵式信息编码方式,任何视觉上的缺损、蜿蜒以及光线作用都会极大的影响辨认成功率,如果辨认艰难也就意味着用户可能抉择放弃,影响领取体验也影响用户心智。
用户扫码体验的最要害的次要有以下几个因素:
1. 识别率:这是扫码服务的根底指标,识别率能间接体现辨认能力,识别率如果无奈进步意味着大量的用户将无奈应用更便捷的服务;
2. 辨认耗时:包含 app 启动耗时以及图像识别耗时,这是掂量一个用户从点击 app 到正确辨认到内容耗时,每减少 1s,将有相当大量的用户放弃期待并来到;
3. 精准反馈:辨认后果不仅须要及时反馈给用户,还须要十分精准,特地是在目前线下有多个二维码的场景下,须要防止用户二次操作;
本文将从以上三个方面,分享支付宝扫码技术团队是如何为用户打造一个又准又快又稳的极致扫码体验。
二、进步识别率
咱们对用户反馈进行了大量统计分析,发现绝大部分辨认失败都是因为二维码并不规范,并且很遗憾的是在应用咱们晚期的扫码版本进行识别率测试时发现识别率只有 60%;
策略 1:优化桩点查找算法长宽比耐受
以往的扫码算法,查看长宽比例时容许差别 40%,然而因为应用前向误差,判断后果跟长宽的先后顺序相干,这会导致有些长宽比失调的码,横着扫不进去,然而旋转 90 度竖着却能扫出来了(^OMG^)。
优化策略
- 通过批改长宽比的断定规定,长宽比将不再受先后顺序影响;
- 对于已知长度,批改规定将可承受的宽度范畴扩充,加强长宽比的耐受;
在咱们比照测试集中,识别率进步了 1% 左右。
策略 2:新增 1:5:1 桩点识别模式模式
在一张图片中,要找到二维码,要害在找二维码特色定位点:
三个角的回字型图案,这就是二维码特色定位点。两头区域的黑白色块比例是 1:1:3:1:1
以往的扫码算法,桩点辨认是通过状态机 查找 11311 模式后 取两头地位确定 x 地位 (此时扫描线在第一行 11311 比例处) 在 x 地位纵向搜寻 11311 模式,确定 y 地位再以 (x,y) 地位横向搜寻 11311 比例,修改 x 地位。这种模式在桩点污损的状况下,辨认能力较差只有在任何一次 11311 模式搜寻中遇到烦扰点,哪怕是一个像素的椒盐噪声也能使桩点查找失败。(领取宝蓝的桩点,会在蓝色区域产生大量噪点,导致识别率低下)
为此,咱们新增了一种桩点辨认形式。在状态机达到 151 模式的时候,开始尝试确认桩点。(此时扫描线在第一行 151 比例处)。
优化成果
- 新的查找办法将不再受桩点核心或边缘局部被污损的影响,领取宝蓝色桩点码识别率显著晋升;
- 批改后识别率整体晋升了靠近 1%,但辨认失败的耗时有所晋升;
策略 3:增加一种对角线过滤规定
在枚举所有可能桩点组合 O(N^3) 之前,对所有可疑桩点进行一次对角线查看过滤。因为桩点对角线也应该满足 11311 模式,用这个规定做一次过滤可疑无效缩小运算量,也就无效升高了辨认胜利和失败的耗时。
策略 4:基于 Logistic Regression 的二维码分类器
在以往的扫码算法中在拿到三个桩点后,基于夹角,长度偏差,单位长度查三个数值,用简略公式计算失去阈值,判断是否为可能的二维码,误判概率较大。
为此,咱们引入机器学习中的逻辑回归算法模型。基于支付宝丰盛的二维码数据集,训练出逻辑回归模型,作为二维码分类器,明显降低了误判概率,也将明显降低无二维码时辨认失败的耗时。
策略 5:批改跳行扫描的距离数
因为输出的相机帧分辨率高,像素点多,运算量大,以往的扫码算法在程度跟垂直方向跳行采样进行计算。但在理论运算中,因为跳过了太多列,错过了 11311 模式中某些 1 地位的点,导致桩点查找失败。
咱们通过将跳行计算行数批改为可配置项,通过线上 AB 灰度测试失去最合适的跳行策略,整体配置此跳行策略后,识别率失去显著晋升。
上述优化在测试集的体现
综上优化,扫码外围辨认能力,在 7744 张图片测试集上进步了 6.95 个百分点。
非凡策略优化
除此上述通用扫码优化之外,咱们还对非凡场景扫码能力进行进步。
1. 畸变?不怕不怕!
线下场景复杂多变。饮料瓶身上变形的二维码、超市小票卷起边角蜿蜒的二维码、路边小贩凹凸不平甚至折叠的二维码 …… 这些畸变的二维码容易减少辨认难度,甚至导致辨认失败。
以往的扫码算法抗畸变策略中,先用透视变换关系建设映射关系。长处是:适应性好,满足大多数利用场景。有余也显著:对 Version 1 的码,因为映射关系进化为仿射变换,成果较差,手机必须和码立体平行能力不便辨认。当物料外表不是立体的时候,成果较差。
优化策略
- 假如采样坐标系到二维码坐标系恪守一个更简单的映射关系,并且假如物料外表的卷曲较小,通过应用二次函数能够较好的拟合这个映射关系;
- 理论发票上的二维码版本广泛大于等于 7,高版本二维码具备多个辅助定位点,更利于结构二次映射表;
- 基于以上推论,应用新的映射代替旧的透视变换,进行更精准的采样;
用新的策略,发票码这个场景的二维码辨认能力晋升显著。
▲留神:因为采纳了加强算法,请对准二维码稍作期待。
2. 容错辨认能力晋升
商户或者供应商生成二维码后,通常会在二维码的两头局部贴上 Logo,这部分有可能会使二维码 Decode 时出错。
优化策略:
对于采样后拿到的 BitMatrix,对于两头局部一块矩形区域内的点,采纳某些策略来扭转两头点的值,使它可能通过容错边界的查看。目前采纳两种策略,第一种是反转,第二种是每一个点随机取值。目前所取的矩形区域是长、宽的四分之一。
通过此项优化后,扫码的容错能力也失去显著晋升。
三、更小的辨认耗时
GPU 计算二值化,升高辨认单帧耗时
所谓图像 二值化 就是将图像上的像素点的灰度值设置为 0 或 255,也就是将整个图像呈现出显著的只有黑和白的视觉效果。下图右边为原图,左边是二值化解决过的图。
在扫码算法解码前,有二值化计算,图像的二值化计算能使图像中数据量大为缩小,并弱化图像含糊、色彩对比度不强、光线过强 / 太弱、图像污损等状况下其余信息的烦扰,更利于检测辨认。
传统算法是在 CPU 上进行二值化运算,十分耗费 CPU 资源,但其实 GPU 更善于大规模并行计算,所以咱们抉择应用 GPU 来做二值化计算。在安卓平台上应用 RenderScript,iOS 平台上应用 Metal,都是很底层的框架。
优化后果
1.iOS: 对立电池、角度、光线等环境变量,在 iPhone6 上测试扫码外围 5 种摄像头二值化算法。体现如下:
能够看出,在图像二值化方面 Metal 有相当高的劣势,相比原来的单纯 CPU 解决快了靠近 150%, 同时升高了近 50 个百分点的 CPU 资源。
2.Android 机型泛滥,咱们抽取了线上数据,能够看到 GPU 在二值化解决中显著升高了单帧耗时 30% 以上。
二值化类型
单帧耗时
传统二值化
65ms
RS 二值化
44ms
四、调度维稳
线下物料千奇百怪,扫码算法为了解决一些不现实的场景,如二维码有遮挡、污损、含糊或角度很不好的非凡状况,须要应用一些比拟耗时但比拟弱小的算法,但一般状况不须要这些算法。所以,咱们对识码算法定了优先级,通过时间推移、跳帧触发等形式调度:
优先级:暂定高中低三个优先级。
- 高优先级 每帧执行
- 中优先级 降帧率执行
- 低优先级 低帧率执行
- 不同优先级的性能执行机会可配置。不同性能属于哪个优先级可配置
非凡场景算法——为码外围的一种特定能力,如:
- 反色码辨认能力
- 容错边界码辨认能力
- 污损桩点辨认能力等
- 条码辨认能力
看完以上这些,你 get 了吗?
源自支付宝的扫码组件,现已全新降级,全网收费凋谢!扫码下方二维码或点击此处立刻收费接入。
END
▓▓ 扫码龙虎榜.pdf ░░
0.7MB 能用来干嘛?