二维码解析优化方案

二维码解析大致流程

每次相机对焦成功,都会进入:


void onPreviewFrame(byte[] data, Camera camera){

       //开启工作线程,解析二维码数据

    decodeTask.executeOnExecutor( SINGLE_THREAD_EXECUTOR , data);

};

复制代码

在这个回调中,data就是图像的二进制数据,然后对其解析。通过实验发现,正常扫码会多次解析失败,然后成功解析。那么,提高扫码速度无非就是3个方面:

  • 提高对焦速度

  • 优化图像准确度(图像是清晰的,简洁的二维码,杂物少),争取一次解析成功

  • 提高解析速度

#### 提高对焦速度

通过测试发现,每次对焦成功才会进入onPreviewFrame从而开始解码,比如自动对焦时间设为5秒,那么至少要5秒钟之后,开可以开始二维码解析。

对焦速度和硬件设备有关,高端手机的对焦速度和准确率肯定更好。我们可以尝试缩短自动对焦时间间隔,比如1s自动对焦一次:


@Override

    public void onAutoFocus(boolean success, android.hardware.Camera camera) {

        mAutoFocusHandler.postDelayed( new Runnable() {

            @Override

            public void run() {

                //1000ms后再次尝试对焦

                mCameraMgr.autoFocus( DecoderView.this );

            }

        } , 1000 );

    }

复制代码

这个对焦时间也不能设置太短,不排除某些低端设备不支持过快的自动对焦。

第二,针对你们app的使用场景,可以尝试拉近放大取景,争取快速对焦。

#### 优化图像准确度

解析二维码一次成功和2次才成功,时间直接缩短一半,所以这一部分才是提高二维码解析速度的关键!可以从下面2方面入手优化:

  • 二维码扫描一般都有一个扫描框,框越大用户使用越方便,但是取景的信息量也更大,加大了解析难度。

框越小,取景信息更精准,但是用户使用不太方便。我查看了 微信,支付宝,摩拜单车三家二维码解析界面,框的大小是屏幕宽度一半。算比较小的相当于指引用户去对准目标二维码,从而提高解码速度,所以可以借鉴这个做法把取景框设置为屏幕宽度一半的正方形。

  • 简化二维码信息量

这是提高解析速度最关键的,可以在草料二维码官网做测试,二维码越简单扫码速度提高的很明显。

常见的方案就是把复杂的数据简化为参数,然后通过请求服务器获取完成数据。比如某二维码是商品信息,很长的的一串json数据,可以简化为这个商品的ID做成二维码,用户扫码后请求服务器获取商品完整信息,大大提高了扫码效率。

其实就是把二维码的不稳定性(张贴位置,破损情况,光线等),和用户设备的差异性(低端设备解析效率差)最小化,把解析时间转移到网络请求,实现解析效率最大化。要注意的是,为了以后的扩展,这个二维码的格式要具有通用性,不能一个业务一个二维码格式。

#### 提高解析速度

目前解析二维码都是用的开源库要么ZXING  要么ZBAR,都是成熟的开源库我不认为还有很大的提升空间。本人也未对里面的解析原理有过深究,不再详述。

总结

优先简化二维码格式,字段信息越少越好,格式定义一定要有通用性。其次,尝试缩短对焦时间和调整取景框大小。再配合优秀的解析开源库比如Zbar,解析速度和微信只是毫厘之差。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值