二维码扫描优化及爱奇艺App的实践

写在前面

二维码是一个近几年来移动设备上超流行的一种编码方式(又称二维条码,QR Code,QR全称QuickResponse),它比传统的条形码(Bar Code)能存更多的信息,也能表示更多的数据类型。随着二维码的流行,几乎大部分手持设备和移动APP都支持二维码的扫描识别。在爱奇艺移动端,二维码主要功能是连接PC客户端,网页端,TV端的工具,可以快速引导用户账号登录,会员等付费业务的支付,运营活动的打通,小程序的入口等。为了给用户提供更快捷便利的体验,爱奇艺技术产品团队针对二维码扫码性能进行了专项优化,识别率从最初的30%提升到了75%左右,平均耗时从2.1s下降到722ms。下文将详细分享爱奇艺在扫码优化实践方面的经验。

背景

二维码因其成本低,兼容性好,存储信息更多等优势成为了线上线下主要的连接工具,并且在移动设备交互上提供了更快捷入口。对于大部分标准清晰的二维码场景,使用开源的ZXing或ZBar库就可以很好的完成二维码的识别。但是由于二维码是一种点阵式信息编码方式,任何视觉上的缺失,弯曲变形,光照,屏幕噪点等都会极大的干扰影响识别成功率和速度,影响了用户体验和转化率。碰到一些特殊的场景,ZXing/ZBar因识别率不高,难以满足业务的需求。

这些特殊场景主要包括以下几方面:

1、二维码是深色背景的,周边带有黑框,没有明显的分界线

2、二维码是灰色的,对比度很低

3、二维码拉伸变形,倾斜扭曲

4、由于光照干扰,二维码图像光照不均,局部区域过暗

原本爱奇艺APP直接集成的开源的ZXing库实现扫码功能,并没有做过多的定制和优化,这些场景下识别体验较差。因此开始了二维码扫码性能优化之路,针对各种场景进行逐一分析优化,经过2~3个版本的迭代,爱奇艺APP扫码性能指标有了质的提升,内部样本集性能测试结果显示,识别率从最初的30%提升到了75%左右,平均耗时从2.1s下降到722ms。主要从三个方面进行了针对性优化: (1) 扫描速度优化 (2) 交互体验优化 (3) 识别率优化。

由于二维码样本集的差异,测试性能数据仅供参考:

版本

成功率

平均耗时(ms)

V10.11.0

75%

722.18

V10.10.0

48%

1471.9

V10.9.0

30%

2096.7

 

扫码速度优化

1. 去除不必要的格式转换和旋转操作

在分析代码时,发现原有的逻辑在相机帧`onPreviewFrame()`回调里处理帧像素时,先把YUV数据格式转换成了RGB格式,同时由于横竖屏的关系,对像素数组进行了90°旋转操作,然后把处理好的像素数组传递给`RGBLuminanceSource`,交给ZXing解码。经过断点分析,发现YUV转RGB和旋转这两步耗费了大量时间,预览数组越大耗时越长。

ZXing本身提供了`YUVLuminanceSource`可以直接解码YUV数据,在YUV格式中Y分量就是灰度分量,对比度相比RGB更高,直接把YUV格式的data数据交给ZXing解码࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值