二维码解析优化方案

作者: 08_carmelo | 来源:发表于2018-01-19 23:34 被阅读0次

二维码解析大致流程

image.png

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


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,解析速度和微信只是毫厘之差。

相关文章

  • 二维码解析优化方案

    二维码解析大致流程 每次相机对焦成功,都会进入: 在这个回调中,data就是图像的二进制数据,然后对其解析。通过实...

  • 大型项目优化

    大型项目优化概述--PHP解析流程 优化方案 考虑PHP解析的的每一个过程1、客户端请求到web服务器的过程中可能...

  • java代码解析二维码

    java代码解析二维码一般步骤 本文采用的是google的zxing技术进行解析二维码技术,解析二维码的一般步骤如...

  • 安卓 关于 Activity 背景图 内存优化 方案

    未优化前 优化方案 优化后

  • flutter 优化之 dio jsondecode

    关于Flutter优化,在最近项目中,讨论到网络请求jsoncode放到其它线程解析。同事提供了相关的解决方案,在...

  • iOS开发经验(13)-网络

    目录 网络基本概念 TCP/IP协议簇基本概念 HTTP 网络开发技术解决方案 数据解析 网络优化 1. 网络基本...

  • iOS 优化方案

    一、性能优化基本方案 1、卡顿原因以及避免方案2、耗电优化3、启动优化4、安装包瘦身 二、卡顿优化原因以及避免方案...

  • spring-boot & zxing 搭建二维码服务

    使用zxing提供二维码生成解析服务 搭建一个二维码的生成 & 解析服务, 使用java web对外提供http调...

  • MySQL 基础

    MySQL 逻辑架构 第一层:连接层。负责连接处理、授权认证、安全方案。第二层:服务层。SQL接口、解析、优化、缓...

  • Qrcode 二维码解析 API 接入方法,解析二维码内容

    Qrcode 二维码解析 API 接口,可以将任何二维码解析转换成原内容(字符、汉字或者网址等),只需要输入下方的...

网友评论

    本文标题:二维码解析优化方案

    本文链接:https://www.haomeiwen.com/subject/rbqzoxtx.html