使用as3.4搭建opencv安卓c开发环境

前言

最近做人脸检测识别时有个新需求需要做活体检测,在网上查来查去,说用opencv可以实现,暂时还没找到完整参照。但是opencv有个人脸特征点landmark检测,这个可能需要用到。先搭好安卓环境,看看情况

正文

开发环境搭建

这里有个参考文章:
https://blog.csdn.net/fxjzzyo/article/details/86650133

注意里面,sdk的位置啊,.so的的名称啊,要跟你下载的一致,我用的opencv4.0版本

具体步骤:
1) 拷贝opencv java代码到项目中,或者以module方式,或者以jar方式导入
2)拷贝so文件到src/main/jniLibs中
3)配置 app/build.gradle, 向android模块添加以下内容,告知so的位置,以便运行时正确调用

sourceSets {
        main {
            jniLibs.srcDirs = ['src/main/jniLibs']
        }
    }

4)编写cpp的jni代码
5) 编写正确的cmakelists.txt内容
//引入opencv库

#支持-std=gnu++11
set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
#配置加载native依赖
include_directories(include)   #将opencv的include拷贝到cpp下
#动态方式加载opencv
add_library(lib_opencv STATIC IMPORTED ) #表示创建一个导入库,静态方式
#引入libopencv_java4.so文件
set_target_properties(lib_opencv
        PROPERTIES
        IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libopencv_java4.so
        )

//编译so

add_library( # Sets the name of the library.
        opencv-test

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        jni/jni-opencvtest.cpp
        )

//编译时链接库

find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)

target_link_libraries( # Specifies the target library.
         opencv-test

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib}
        android -ljnigraphics
        lib_opencv)

6)运行时需要加载opencv的so,和自己的so

static {
        try {
            System.loadLibrary("opencv_java4");
            System.loadLibrary("opencv-xxx");
        }catch (Exception e){
            Log.e(TAG,"load opencv-xxx failed");
        }
    }

  1. 编译生成的so位于 app/build/intermediates/cmake/debug/obj

问题收集:
1.这时候可能会碰到一个问题:
opencv2标红,Mat标红。
其实cmakelist中引入了so后应该就可以了,这时候直接build->make project

2.接着碰到第二个问题:
提示Mat错误,是不是应该用cv::Mat
看到这个提示我就放心了,提示我用cv了,说明路子对了,将代码改为
在这里插入图片描述
继续build->make project,最后你会和我一样发现上面的标红都变正常了。run一下跑程序

3.第三个问题:java报错
No implementation found for int[] com.xxx.xxx.MainActivity.gray(int[], int, int)
出现这个问题有两个可能:
一是你的native方法名没有按规则来;这个没问题
二是没有打包到apk中,用之前说的分析包工具看看
在这里插入图片描述
一切正常

三是没有引用到,什么意思呢,其实as已经提示了,我的方法是暗色的,没有被引用到
在这里插入图片描述
最后发现是开头少了 extern “C”,加上后恢复正常
在这里插入图片描述

然后运行
在这里插入图片描述

小结

还好以前安卓还有点点印象,感谢大佬带路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值