OpenCV 3.4.0环境配置(又一次)

版权声明:本文为博主原创文章,如未特别声明,均默认使用CC BY-SA 3.0许可。 https://blog.csdn.net/Geek_of_CSDN/article/details/81165909

因为一些特殊原因,最近要重新配置caffe(之前的配置莫名其妙地gg了,而且需要在新用户下面创建环境,所以就干脆重新搞,只装caffe。

略过重新配置环境变量来让cuda等软件生效的步骤,基本上就是改~/.bashrc并且让环境变量生效就是了(cuda、显卡驱动安装什么的在上篇博文里面讲过了)。

virtualenv安装

virtualenv是很重要的,最好先安装了,如果已经安装或者不打算将opencv配置在虚拟环境里面的同学可以直接跳过这一步。

安装virtualenv的好处:可以使用不同版本的python版本,而且各个环境中的依赖包可以不同,这样就可以避免包的冲突(例如有些时候caffe会和tensorflow产生冲突。。。玄学问题)。

正式开始安装

安装指令:
先确定安装了pippython等环境(其实应该都已经装好了,但还是确认一下比较好)。

$ python -V    # 注意是大写的V!
$ pip -V
$ python3 -V
$ pip3 -V
# 下面这两条其实可以不用管,只是确保`sudo`之后的`python`版本和`pip`版本是你想要的版本而已
$ sudo pip -V
$ sudo python -V

如果没装python的话就:

$ sudo apt-get install python2.7-dev python3.5-dev

如果没安装pip的话就:

$ cd ~
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py

然后就是开始安装virtualenv了:

$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/get-pip.py ~/.cache/pip

万一上面的没安装好也可以用:

$ sudo apt install python-virtualenv

或者用pip3来试试(具体怎么知道装好没有看下面)。

运行了上面的指令之后就配置环境变量~/.bashrc,添加:

# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

然后source ~/.bashrc来让环境变量生效(注意,每次更新之后都会退出虚拟环境,所以要重新workon cv来进入虚拟环境!),之后再试试mkvirtualenv指令,如果发现提示没有安装xxx的话那么就是没装好。

创建虚拟环境

$ mkvirtualenv cv -p python3

这里用了python3作为默认的版本,如果是用python2的话就把3改成2。创建好了的虚拟环境的名字是cv

进入环境之后要安装NumPypip install numpy,因为opencv要用到这个库。

最后用workon cv来启动这个新创建的虚拟环境。后面的操作都是在虚拟环境下完成。

opencv安装

安装编译需要的包

sudo apt-get install build-essential cmake pkg-config

安装图像相关的包(到时候opencv要用的):

sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev

安装opencv的gui相关的包:

sudo apt-get install libgtk-3-dev

安装优化速度的包:

sudo apt-get install libatlas-base-dev gfortran

下载源代码

首先下载opencv的:

$ cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.4.0.zip
$ unzip opencv.zip

然后下载opencv_contrib(装了这个里面的包才是完整的opencv,具体的贫僧也不是很清楚。。。):

$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.4.0.zip
$ unzip opencv_contrib.zip

这里下载的是3.4.0的版本,如果要改版本的话把上面指令里面的数字改改(别改成不存在的版本号。。。)

解压用unzip 要解压的包.zip就可以了。

编译

首先进入下载好了的源代码目录里面cd ~/opencv-3.4.0,然后创建并进入目录build:mkdir build && cd build,最后开始cmake

我用了这篇博客里面的命令,但是出了个错误,后来查了查相关资料才发现少了个flag,下面这行命令运行不了的话就试试更下面的那行命令。

出错的指令:

(cv) tank@ubuntu-server:~/opencv-3.4.0/build$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

# 下面是输出

# 省略一大堆乱七八糟的输出

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_CUDA_LIBRARY (ADVANCED)
    linked by target "opencv_cudacodec" in directory /usr/tank/opencv-3.4.0/modules/cudacodec

-- Configuring incomplete, errors occurred!
See also "/usr/tank/opencv-3.4.0/build/CMakeFiles/CMakeOutput.log".
See also "/usr/tank/opencv-3.4.0/build/CMakeFiles/CMakeError.log".
(cv) tank@ubuntu-server:~/opencv-3.4.0/build$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85

解决方法:
加上下面这个东西就可以了。

-DCMAKE_LIBRARY_PATH=/usr/local/cuda/lib64/stubs

上面那个指令还少了点东西,最后贫僧补充成了这样:

cmake -D CMAKE_BUILD_TYPE=Release \
    -D CMAKE_LIBRARY_PATH=/usr/local/cuda/lib64/stubs \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.0/modules \
    -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
    -D BUILD_EXAMPLES=ON ..

最后输出了:

-- Configuring done
-- Generating done

这样第一步的cmake就完成了。

cmake完成之后就可以开始编译了,不过要先确定已经进入了虚拟环境中(进入虚拟环境之后用户名前面会多一个(虚拟环境名),例如会从ubuntu变成(cv)ubuntu)。

make -j 4开始编译,4是因为机器上的cpu是4核。输入了指令后要等一段时间才能跑完(就是说不要看他貌似不动了,没输出东西了就不耐烦地直接停止掉进程,慢慢等编译完成或者因为错误而中断,不要动它)。

如果遇到错误了的话就用make clean来删除编译出来的东西,然后试试用make来编译(单线程)。还不行的话就另外找资料吧。。。

成功了之后就可以用sudo make install来安装了:

$ sudo make install
$ sudo ldconfig

完成安装

这里只有Python 3.5的例子:

在跑完上面的代码之后OpenCVPython3的链接会生成在/usr/local/lib/python3.5/site-packages/,用ls指令可以看得到。

$ ls -l /usr/local/lib/python3.5/site-packages/

这样是没有办法直接用的,要把这个文件改一下名字:

$ cd /usr/local/lib/python3.5/site-packages/
$ sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so

不改的话其实贫僧觉得问题不大,只是要import的时候麻烦一点。。。所以还是改了吧。。。

在改名之后就可以把这个链接复制到虚拟环境里面了(不然用不了):

$ cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
$ ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so

这样就基本完成了额。

测试安装

python进入环境,然后:

>>> import cv2
>>> cv2.__version__

上面的指令应该会输出版本号(之类的话就是'3.4.0')。

不过贫僧在import过程中遇到了个小小的问题:

>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: libhdf5.so.101: cannot open shared object file: No such file or directory

解决方法:

locate libhdf5.so.101确定这个文件的位置,例如贫僧输入指令之后就得到了:

$ locate libhdf5_hl.so

/home/ubuntu/anaconda3/lib/libhdf5_hl.so
/home/ubuntu/anaconda3/lib/libhdf5_hl.so.100
/home/ubuntu/anaconda3/lib/libhdf5_hl.so.100.1.0

$ locate libhdf5.so.101

/home/ubuntu/anaconda3/lib/libhdf5.so.101
/home/ubuntu/anaconda3/lib/libhdf5.so.101.1.0

然后复制到/usr/lib/usr/lib/x86_64-linux-gnu/下面:

$ sudo cp -s /home/ubuntu/anaconda3/lib/libhdf5_hl.so.100.1.0 /usr/lib/libhdf5_hl.so.100
$ sudo cp -s /home/ubuntu/anaconda3/lib/libhdf5_hl.so.100.1.0 /usr/lib/x86_64-linux-gnu/libhdf5_hl.so.100
$ 

再试一次,如果还不行的话就试试重启,可能就可以了。

不过贫僧在成功之前遇到了新的错误“undefined symbol”:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /usr/tank/opencv-3.4.0/build/lib/cv2.so: undefined symbol: PyCObject_Type

解决方法是编辑~/.bashrc,添加(或者修改):

export PYTHONPATH=/usr/local/lib/python3.5/dist-packages:$PYTHONPATH

source一下让变量更新,然后就可以了。

如果上面不管怎么样都搞不定都有错误的话就echo "GG"来向电脑投降(然而并没有什么用)。。。

参考资料

Ubuntu 16.04: How to install OpenCV:这篇博客确实很不错,博主写的东西里面有很多干货。。。而且大部分都挺有意思,不过这篇博文的问题是有点点老,但是里面的内容是可以参考的(而且参考价值还是很高的)。。。
Ubuntu 16.04+CUDA 9.1+cuDNN v7+OpenCV 3.4.0+Caffe+PyCharm 完全安装指南,国内最全!(适用CUDA 9.0):是不是最全不是很清楚。。。但是基本上要讲的都讲到了。

猜你喜欢

转载自blog.csdn.net/Geek_of_CSDN/article/details/81165909