想玩玩ncnn,但由于之前opencv没装好,因此遇到了一些坑,特此记录

注意:建议git两份ncnn,一份编译linux下的,一份编译android,分开编译,免得后面一堆坑。

1、重新编译安装opencv

   

     坑:在编译的时候,注意那两个引号,是左上角的引号(和~同一个位置)

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的编译及显示

     别忘了把synset_words.txt拷贝到build/examples下,否则报错:段错误    


4、android ndk安装



5、build armv7 library时说我的cmake版本不够,


CMake 3.6.0 or higher is required.  You are running version 3.5.1



升级到3.9


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、安卓开发环境的安装

    直接cancel,会下载组件,速度好慢啊。。

     就是改一下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"


周末折腾了很久,终于折腾好了,中间遇到的问题 太多,都记不住了,都是在模拟器下出现的问题,换成真机调试后问题就解决了。

 接着折腾。。。


首先是将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 字体太小,调整下