在这个地方,我浪费的时间最多,也学到了不少的东西,现在我将其总结出来.
首先,我明确一个东西,就是在Ubuntu使用在Yolo-FastestV2训练出来的模型,我采用了ncnn框架.
接下来就是安装ncnn需要的依赖.
第一,最终要的一点,在vm安装的Ubuntu版本自己一定要明确,这边建议使用Ubuntu还在更新维护的版本,这样下载依赖包的时候更加的方便和快捷,因为在Ubuntu不维护的版本,对应的源网站的位置是修改过的,而且修改后的的源网站位置比较难找.
如果你不知道自己的版本是否还在更新,输入以下命令.
lsb_release -a
你会发现他出现以下的内容:
所以,我们Ubuntu的版本为21.10,Codename为impish.我这个版本支持到2022年的7月.
如果你出现下面几个问题,就代表你可以使用升级版本来解决问题.
1.安装任何包都报依赖错误.
这个错误可以使用将apt-gco换成aptitude安装来解决,但是当你发现你在安装aptitude的时候也报依赖错的时候,你就会无语了,这时候,你在网上搜答案的时候,不少网站推荐你换源.
输入以下内容:
sudo gedit /etc/apt/sources.list
你会发现以下内容:
这里我已经进行过换源操作了,这里需要一个重点 ,链接中的ubuntu/groovy中的groovy是我们版本的Codename,这个一定要对应一致,否则会报一些莫名奇妙的错误.
仔细看,我这边使用正确的Codename和源,使用命令sudo atp-get update时还是会报错,它一直保持在1%[waiting for headers]的字眼,这代表你ubuntu的版本已经官方已经不支持了,得使用别的方法.
方法一是换源,换成官网中专门支持旧版的源,这个源包括了所有旧版本的内容,使用起来非常不方便,所以我使用了方法二.
方法二是换版本.这就是我使用21.10的原因.
接下来,我默认使用Ubuntu21.10版本.
安装ncnn前需要安装其依赖.
第一,编译安装openssl,这个东西一般Ubuntu自带,你可以使用 openssl version -a命令来看一下有没有安装openssl,
这个是我默认安装好的openssl.
第二,安装cmake,使用命令安装sudo apt install cmake,不出意外的话,应该一个命令就搞定了.完成后,输入cmake --version可以发现你安装cmake的版本.
第三,安装protobuf,输入命令sudo apt-get install libprotobuf-dev protobuf-compiler,当然,你也可以使用安装包来下载.地址如下:地址,认准 protobuf-cpp-3.13.0.tar.gz 字样,将安装包放好位置后,输入下面命令也可以,这样安装的版本高一点.
tar -zxvf protobuf-cpp-3.13.0.tar.gz
cd protobuf-3.13.0/
./configure
make && sudo make install
第四,安装opencv for c++,opencv安装也要安装其依赖,根据官方文档,依赖如下:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
安装好opencv依赖后,输入下面命令:
git clone https://github.com/opencv/opencv.git
# git 命令也可以换成自己从网上下载安装包,然后解压,后面的命令不变.
cd opencv/
mkdir build && cd build
cmake ../
make -j2 && sudo make install
这个编译要好久,电脑配置好的可以稍微改一下make -j2 后面的2,这个2表示线程数(大概).
运行sudo make install 后,你可以看到一些路径,这些路径是使用opencv时调用的路径,在我们调用的时候,需要一个opencv.pc文件来编写系统变量,但是我们使用安装包安装是没有的,所以我们自己要写一个放进去.
cd /usr/local/lib/pkgconfig
sudo gedit opencv.pc
输入下面内容:
prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: opencv
Description: The opencv library
Version:4.0.1
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
~
一般这样就好了,在不行就使用sudo apt install libopencv-dev 命令试一试.
最后输入pkg-config --modversion opencvm命令看一下版本.
安装好opencv后,ncnn的依赖算是安装好了,下面就是安装ncnn了,这个我们下篇再说.