由于工作需要caffe,但是caffe在windows安装太坑了,所以尝试在虚拟机上安装,而安装caffe好像需要opencv环境,这里记录一些使用ubuntu20.04通过源码和cmake编译opencv踩的坑。


环境

ubuntu20.04
anaconda5.6
python3.8
cmake3.20

附注,ubuntu删除python2.7的方法(和安装opencv无关,只是不喜欢ubuntu里面多个python2.7)

sudo apt-get remove python2.7
sudo apt-get remove --auto-remove python2.7
sudo apt-get purge python2.7 
sudo apt-get purge --auto-remove python2.7

python3.8安装opencv的方法

pip install opencv-python -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

如果使用virtualBox可以下载Oracle VM Virtual Extension Pack,安装之后重启,虚拟机可以调用物理机的摄像头,virtualbox6.1.22适配版本的下载地址:https://download.virtualbox.org/virtualbox/6.1.22/Oracle_VM_VirtualBox_Extension_Pack-6.1.22.vbox-extpack重启之后设置设备->摄像头
在这里插入图片描述

一、安装依赖环境

依次输入以下命令

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install build-essential
sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev    # 处理图像所需的包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev             # 处理视频所需的包
sudo apt-get install libatlas-base-dev gfortran              # 优化opencv功能
sudo apt-get install ffmpeg
#下面的一些指令都是cmake过程中提示 "No package '***" found" 后安装的,可以考虑在编译opencv源码前全部安装
sudo apt-get install libgtk-3-dev 
sudo apt-get install libvtk6-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install tesseract-ocr libtesseract-dev
sudo apt install ccache

如果执行

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev    # 处理图像所需的包

报错Unable to locate package libjasper-dev,那么将上述命令中libjasper-dev删掉,安装完成后执行如下命令

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper-dev

如果执行过程中有其他错误,参考爱跑步的mango的经验

二、通过Ubuntu仓库安装opencv

ubuntu安装opencv可以使用Ubuntu Repository,安装方式简单,在终端执行如下指令

sudo apt update
sudo apt install libopencv-dev python3-opencv

上述指令会安装运行opencv需要的所有的包。但是上述安装方式好像不适用于caffe。

三、通过源码安装opencv

下面将记录使用源码安装的过程和踩得坑。
opencv开源网站 https://opencv.org/,下载源码opencv源码链接https://github.com/opencv/opencv/archive/4.5.1.zip
将压缩包解压到要安装的位置。
在终端进入源码解压位置,如下图,~/opencv4.5.1即我解压opencv.zip的位置,然后执行如下命令
在这里插入图片描述
ippicv依赖包下的十分慢,所以需要的话可以先把需要的包下下来,ippicv包下载链接https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20191018/ippicv。编译前先修改/sources/3rdparty/ippicv/ippicv.cmake文件,修改如下:

https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}ippicv/
替换为
ippicv_xxx.tgz存放的绝对路径

不修改也可以,只是过程比较耗时间。

mkdir build      #创建编译文件保存路径
cd build
cmake -D CMAKE_BUILD_TYPE=Release \
	  -D CMAKE_INSTALL_PREFIX=/usr/local/opencv ..\
	  -D PYTHON_DEFAULT_AVAILABLE=/usr/bin/python3.8 \ #指定python解释器,默认为python2版本
	  -D CMAKE_BUILD_TYPE=RELEASE  \
	  -D WITH_CUDA=OFF  ..      \       #禁用cuda,虚拟机安装无法调用cuda,若不禁止,编译时会报错
	  -D ENABLE_CXX11=1        #打印编译日志

/build即存放cmake编译后的文件夹
如果安装过程中,执行到IPPICV: Download: ippicv_2020_lnx_intel64_20191018_general.tgz
卡住,那是因为官方提供的链接被墙了,可以到https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20191018/ippicv下载。相关链接见gadwgdsk的博客
完成之后,执行

make -j8   #编译,-j8指用8线程编译,具体参数可以参考硬件设定
make install 

如果报错

modules/cudalegacy/src/graphcuts.cpp:120:54: error: 
‘NppiGraphcutState’ has not been declared
typedef NppStatus (*init_func_t)(NppiSize oSize, 
NppiGraphcutState** ppState, Npp8u* pDeviceMem);

修改/opencv/modules//cudalegacy/src/graphcuts.app的内容
在这里插入图片描述
当然还会有其他想不到的问题,但一般问题都是因为依赖库没有安装,可以安装需要的依赖包解决。

四、opencv环境配置

首先将Opencv的库添加到系统路径

sudo gedit /etc/ld.so.conf.d/opencv.conf 

打开文本之后添加opencv的lib库,如果安装时没有制定安装目录,即 cmake后面没有添加-D CMAKE_INSTALL_PREFIX=/usr/local/opencv添加1,否则添加opencv的安装目录(注意,#以及#后面的文字不需要添加在文本,下同):

/usr/local/lib    #1
/usr/local/opencv/lib  #2 opencv的安装路径

之后使配置文件生效,配置并且bash

sudo ldconfig  
sudo gedit /etc/bash.bashrc  

在文件末尾添加pkgconfig的路径,默认为1

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig    #1
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv/lib/pkgconfig  #2
export PKG_CONFIG_PATH   
export LD_LIBRARY_PATH=/usr/local/opencv/lib
export OpenCV_DIR=/usr/local/opencv

使bash配置生效

source /etc/bash.bashrc 
pkg-config --modversion opencv4   #输出opencv的版本
python3 -c "import cv2; print(cv2.__version__)"   #python3输出opencv版本
pkg-config --libs opencv      #输出编译生成的链接库
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐