全网首发微信二维码引擎Android平台移植

2011年12月微信3.5版本正式上线“扫一扫”二维码,历经9年蜕变,“扫一扫”从二维码名片到扫码支付、从小程序码到健康码,二维码已经成为一种生活方式,连接着数字与现实。现在,在腾讯WeChatCV团队的贡献下,微信扫码引擎正式加入OpenCV开源了!号称只需要三行代码,你便轻松拥有微信的扫码能力。我只想说,真的没那么容易,我花了半天才完成微信二维码扫描引擎在Android平台上的基础实践。

前言

全网首发微信二维码引擎Android平台移植

介绍

微信扫码引擎是一款基于开源引擎ZXing,并高度优化和深度改造的高性能轻量二维码识别器。主要特点如下:

  • 1. 基于CNN的二维码检测
  • 2. 基于CNN的二维码增强
  • 3. 更鲁棒的定位点检测

环境

  • Windows10
  • Android Studio 4.1.1
  • NDK r19c
  • CMake-GUI 3.16.0
  • MinGW
  • JAVA 8
  • ANT 1.9.15

编译准备

1. 下载源码

由于微信二维码引擎是新增功能,直接下master分支源码编译即可

openCV源码:https://github.com/opencv/opencv

opencv_contrib源码:https://github.com/opencv/opencv_contrib

2. 安装CMake

3. 安装MinGW

建议直接用Installer傻瓜式安装,选择下列需要安装的组件,右键选择Mark for Installation,之后选择Menu -> Installation -> Apply Changes

MinGW

Apply Changes

安装完后把mingw加入系统环境变量。

MinGW添加环境变量

4. 下载JDK并安装配置JAVA

5. 下载Android SDK、NDK并配置环境变量

6. 下载ANT1.9.15

编译配置

新建一个存放编译结果的文件夹,可以名为build。如我的源码和编译结果文件夹目录分别为:

opencv源码目录:D:\05_Project\03_AI_Project\opencv

opencv_contrib源码目录:D:\05_Project\03_AI_Project\opencv_contrib

build编译结果目录:D:\05_Project\03_AI_Project\build

1. 配置源码目录和编译结果目录

cmake配置源码目录

2. 添加编译参数

点击Add Entry添加

  • ANDROID_NDK 类型为PATH,填入你的NDK路径
  • ANDROID_SDK PATH,填入你的SDK路径
  • ANDROID_ABI STRING,设置平台,不填默认为 armeabi-v7a
  • ANDROID_NATIVE_API_LEVEL STRING,默认API为21
  • ANT_EXECUTABLE PATH,填入ANT路径下的bin(用于java 封装,便于 AS 导入module)
  • ANDROID_STL STRING,根据需求写入c++_static或c++_shared(默认是gnustl_static)

3. 配置toolchain

点击Configure,选择Specify toolchain file for cross-compiling,点击Next,选择对应NDK目录下的toolchain路径,点击Finish

MinGW MakeFiles

Specify the toolchain file

4. 执行Configure

Configure过程完成,若无异常,界面应与下面结果类似。

Configure结果

5. 调整参数

添加opencv_contrib模块并调整参数,搜索对应参数进行调整

  • OPENCV_EXTRA_MODULES_PATH,选择opencv_contrib/modules路径
  • WITH_OPENCL=ON,添加移动端的并行架构支持
  • WITH_OPENCL_SVM =ON,开启共享虚拟内存

6. 执行Configure和Generate

执行编译

进入build目录,进入Git Bash界面,执行mingw32-make.exe命令,如果没有出现报错,则再执行 mingw32-make.exe install

编译结果

编译结果

红色箭头为我们所需要的内容,jni目录下有我们需要的libopencv_java4.so库,opencv_android目录下则是我们需要的opencv android依赖包和示例程序。

移植到Android平台

  1. 新建Android工程,导入libopencv_java4.so

  2. 以模块的形式导入opencv_android目录下的opencv文件夹

  3. 下载模型文件(https://github.com/WeChatCV/opencv_3rdparty)

  4. 指定abiFilters,因为目前我们只编译了armeabi-v7a架构

    ndk {
        abiFilters 'armeabi-v7a'
    }
    
  5. 编码,运行,测试

微信二维码引擎接口

构造方法

public WeChatQRCode(String detector_prototxt_path, String detector_caffe_model_path, String super_resolution_prototxt_path, String super_resolution_caffe_model_path)

四个参数分别对应:detect.prototxt,detect.caffemodel,sr.prototxt,sr.caffemodel四个文件的路径

检测并解码

public List<String> detectAndDecode(Mat img, List<Mat> points)
  • 参数一:img,待检测和识别的图像
  • 参数二:points,用于存放检测到的二维码的矩形坐标
  • 返回值:二维码解码结果。

效果

在这里插入图片描述

onlyloveyd CSDN认证博客专家 Android Kotlin OpenCV
个人公众号【OpenCV or Android】,热爱Android、Kotlin、Flutter和OpenCV。毕业于华中科技大学计算机专业,曾就职于华为武汉研究所。目前在三线小城市生活,专注Android、OpenCV、Kotlin、Flutter等有趣的技术。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页