前段时间公司项目有个需求,要实现摄像头实时摄像头追踪物体,本想着和人脸识别一样 找个sdk给点钱就算了 没想到居然没有 物体识别之类的sdk都没有,后面在github里漂了一个项目,刚好符合需求,有个很牛批的人说过“别人有了就是你有了,你的就是我的” 直接掐头去尾就是自己的了,这里分享下这个物体追踪的demo
https://github.com/kongqw/OpenCVForAndroid/tree/opencv3.2.0#start-of-content
感兴趣的可以去玩一下 挺牛批 基于CamShift算法实现的(不懂) 这个demo还有人脸检测 和眼球检测的示例 挺好玩的。但是呢,使用这个opencv demo需要安装第三方管理软件 否则用不了 这产品经理哪忍得了 改 必须改!(到这里白嫖的兄弟们可以直接跳过下面这段了)
当时呢android opencv开发基础为零的我呢 直接就懵逼 这咋整啊 网上的免安装教程都要用到‘超简单的’jni、ndk开发 去搞 想想就秃头,起初想了个偷懒的办法(没办法偷懒是本性嘿嘿)叫同样负责这个项目的系统开发的同事(产品是个Android系统的设备 我负责业务功能软件) 帮忙把那个第三方软件给内置了 然后再把图标隐藏 完美!当时我都佩服自己,然后那个同事就萎了,内置后那个软件就崩了,没办法只能脚踏实地 ,但是也不能硬肝那个jni的方法啊,要ndk cmake啥的 顶不住啊 时间有限,太难了。方法总比困难多是吧,看了n篇文章 终于在一篇很老很老很古老的文章中发现思路 那个大佬说(忘了在哪看的了,贴不出原文链接[尴尬])之所以要安装OpenCvManager.apk呢是因为却了一个so库 ==libopencv_info.so== 把他放到对应架构包里就可以了 然后跳过第三方软件检测就行 但是这个包只有低版本的opencv才有 低版本的只能找到32位的==libopencv_info.so== 后来在csdn里花了50积分download了一位大佬编译的低版本opencv 64位的架构包 问题解决 。
废话这么多,是因为很简单怕篇幅太短,白嫖的兄弟们直接看这里 这个是32 64位的libopencv_info.so
链接:https://pan.baidu.com/s/1dbRATBc32oaVi8oLa0eRFA
提取码:4250
下面是步骤 首先下载导入上面那个项目 先跑起来 不出意外 会说你没安装openCvmanager 下一步 在main目录下添加一个jniLibs放架构吧 上面这个项目用的是opencv3.2.0版本的 所以要下载个opencv3.2.0 这个是网盘链接 链接:https://pan.baidu.com/s/132eE9zISu4bdWey4bNCw4Q 提取码:4250
下载完解压后把路径 Opencv3.2.0.zip\Opencv3.2.0\Opencv3.2.0\Android软件包\OpenCV-android-sdk\sdk\native\libs 下的架构包复制到jniLibs 这里用arm64-v8a,armeabi-v7a应该就够用了 然后再解压下载的 ==libopencv_info==把里面对应的 ==libopencv_info.so== 库放对应的架构包里 就ok了 然后在app下的build.gradle 添加引用 同步一下
android {
defaultConfig {
...
ndk {//在这里
abiFilters "armeabi-v7a"
abiFilters "arm64-v8a"
}
}
...
}
这里环境就搞好啦 ,去找到对应activity 如果是物体追踪 就在==ObjectTrackingActivity==添加 如果是目标检测就在==ObjectDetectingActivity== 添加下面这个这个
@Override
protected void onResume() {
super.onResume();
if(!OpenCVLoader.initDebug()){
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0, this, objectDetectingView);
}else{
objectDetectingView.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
跳过检测安装openCVmanager软件 不管是追踪还是检测都把这个 showInstallDialog(); 方法注释掉 它就不会在弹出框来提示安装了 到这里目标就达到了
如果想把他抽出放自己项目怎么搞呢 其实很简单 看过代码你就懂了,导入demo里OpenCVLibrary320的这个模块 再build.gradle 添加引用 同步一下 再照着上面架构包的那个步骤走 环境配置好后 直接把demo里的你想要的直接复制过去就可以了 搞定。就这样吃 百家饭 的Android开发孤儿又通过了一个难关,十分感谢那些给教程给开源项目的大佬。