ncnn安卓端使用:https://blog.csdn.net/qq_36982160/article/details/79931741
想玩玩ncnn,但由于之前opencv没装好,因此遇到了一些坑,特此记录
注意:建议git两份ncnn,一份编译linux下的,一份编译android,分开编译,免得后面一堆坑。
1、重新编译安装opencv
参考https://www.cnblogs.com/eczhou/p/7860586.html 顺利安装
坑:在编译的时候,注意那两个引号,是左上角的引号(和~同一个位置)
g++ lena.cpp `pkg-config --cflags --libs opencv` -o lena
2、cmake && make出现的坑:
cannot find -lopencv_dep_cudart
解决办法:https://github.com/caffe2/caffe2/issues/303
$ rm build -rf # As you see
$ mkdir build && cd build
$ cmake .. -DCUDA_USE_STATIC_CUDA_RUNTIME=OFF
$ make
这个顺便解决了我之前编译caffe时候出现的问题
3、ncnn的编译及显示
https://blog.csdn.net/fuwenyan/article/details/76576708
别忘了把synset_words.txt拷贝到build/examples下,否则报错:段错误
4、android ndk安装
https://blog.csdn.net/davebobo/article/details/52446986
5、build armv7 library时说我的cmake版本不够,
CMake 3.6.0 or higher is required. You are running version 3.5.1
升级到3.9
https://blog.csdn.net/u010472607/article/details/76166008
6、protobuf冲突
当前版本是3.5.1,找到的库却是3.4.0,用指令 可查看两个版本,在bashrc中将anaconda注释掉即可。
sudo protoc --version
protoc --version
不过后面没有这么做了,也没有再出现问题
7、编译armv7时候的坑
https://github.com/Tencent/ncnn/wiki/how-to-build里面编译时给了三个平台编译的方式,编译Linux x86后再次编译armv7 library时
一直报错:https://github.com/Tencent/ncnn/issues/139的错误,将opencv、cuda关掉也不行,后来才知道编译armv7是不依赖opencv的,PC上才依赖。
重新git clone,直接编译即可。
8、安卓开发环境的安装
jdk安装:https://www.cnblogs.com/hwtblog/p/8404473.html
android studio安装
http://www.android-studio.org/下载
解压移动到opt,安装:sudo /opt/android-studio/bin/studio.sh
遇到问题:unable to access android sdk add-on list
直接cancel,会下载组件,速度好慢啊。。
创建快捷图标:https://blog.csdn.net/OOC_ZC/article/details/70808084
9、Android Studio出现Failed to open zip file问题的解决方法
http://www.jcodecraeer.com/a/anzhuokaifa/Android_Studio/2017/0317/7691.html
就是改一下gradle-wrapper.properties中的distributionUrl,将是https改为http即可
10、device support x86 but apk only supports armeabi-v7
解决办法:项目根路径,app文件夹找到build.gradle文件,找到相关代码并改成如下形式:
abiFilters 'armeabi','armeabi-v7a','armeabi-v8a',"x86"
周末折腾了很久,终于折腾好了,中间遇到的问题 太多,都记不住了,都是在模拟器下出现的问题,换成真机调试后问题就解决了。
接着折腾。。。
11、参考https://blog.csdn.net/linmingan/article/details/77988382使用自己的模型
首先是将alxnet.prototxt转为新版本的prototxt,在caffe-root根目录下,./build/tools/upgrade_net_proto_text imagenet_train.prototxt new_version_train.prototxt
报错:Error parsing text-format caffe.NetParameter: 6:15: Message type "caffe.LayerParameter" has no field named "input_param"
解决办法:用上面的input_shape替换下面的layer,转换后再替换回去。
name: "GoogleNet"
input: "data"
input_shape {
dim: 10
dim: 3
dim: 224
dim: 224
}
caffe/models/bvlc_googlenet/deploy.prototxt
name: "GoogleNet"
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 10 dim: 3 dim: 224 dim: 224 } }
}
12 、android studio 字体太小,调整下
https://blog.csdn.net/baidu_35781767/article/details/54340350