在ubuntu18.04下将opencv(含contrib)安装到anaconda搭建的虚拟python环境中(ubuntu18.04+anaconda+python3.5+opencv3.1.0)

        在文章开始前首先感谢这篇博文ubuntu+anaconda环境下opencv+contrib源码编译:刚脱坑,写一篇实实在在的编译教程及其作者Synioe,写得非常详细,而且真实可用。中间我出现了一些与Synioe大佬不太一样的小错误,不过最终也都找到了解决方案。

1.下载并安装anaconda,然后创建一个虚拟环境(我将我的新环境命名为caffe,并安装了python3.5;另外很重要的,要安装numpy,用anaconda的命令即可,如我的就是:conda install -n caffe numpy,因为网速的原因,可能会安装失败,没关系,多执行这个命令几次就好,总会成功的)。网上教程很多,这里就不多说了。

2.下载opencv3.1.0和opencv_contrib-3.1.0的source包。网址如下:

    opencv-3.1.0

    opencv_contrib-3.1.0(有zip和tar两种压缩模式,只选其中一种就好)

     然后解压缩:首先解压opencv-3.1.0(我解压到了我的  "~/File"  文件夹下),然后将opencv_contrib-3.1.0解压到刚才的opencv-3.1.0下,即目录关系为:~/File/opencv-3.1.0/opencv_contrib-3.1.0。

3.然后对opencv进行编译:

    这里也就是我糊涂的地方,我一直想知道,我应该在anaconda新搭建的caffe环境下编译,还是在计算机环境的base中编译呢?在不同的环境中对opencv进行编译,会有区别吗?是不是如果我在base环境下编译,那么就无法链接到caffe环境下的python中呢?

    上网查anaconda的讲解,也没有人提到过这个问题。后来经过摸索+猜测,大概明白了:在哪个环境下编译不重要,重要的是编译前的cmake选项要选对,比如python的版本、python存放的路径等等,一定要选对。比如我想对caffe环境下的python3.5安装opencv,那么我在编译opencv的时候,python的路径就一定要选/home/pi(pi是我在ubuntu下的用户名)/anaconda3/envs/caffe/lib/python3.5,而不能选base环境下的python路径。另外还有其他的一些注意事项,等一下再说。

    明白了这一点,就可以放心大胆得进行编译了。(但是,以防万一,我以下操作全都是在anaconda新搭建的caffe环境下进行操作的

    首先安装依赖项:这里提一下,依赖项也是在哪个环境下安都可以,因为它最终都会给你安到计算机原本的base环境下。

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev libxvidcore-dev libx264-dev 

    这里可能会出现libjasper-dev安装不上的问题,请大家自行上网搜索解决方案,很简单的。

    依赖项都安装好后,进入"opencv-3.1.0"文件夹,建立并进入build文件夹:

mkdir build && cd build

    然后在build目录下进行编译,首先设置编译前选项:(这一点很重要,再次感谢博主Synioe)

   

cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_V4L=ON -D WITH_OPENGL=ON -D WITH_VTK=ON -D CMAKE_BUILD_TYPE=RELEASE -D OPENCV_EXTRA_MODULES_PATH=/home/pi//File/opencv-3.1.0/opencv_contrib-3.1.0/modules -D WITH_IPP=OFF -D PYTHON_DEFAULT_EXECUTABLE=/home/pi/anaconda3/envs/caffe/lib/python3.5 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=/home/pi/anaconda3/envs/caffe/lib/python3.5 -D PYTHON3_INCLUDE_DIR=/home/pi/anaconda3/envs/caffe/include/python3.5m -D PYTHON3_LIBRARY=/home/pi/anaconda3/envs/caffe/lib/libpython3.5m.so.1.0 -D PYTHON_NUMPY_PATH=/home/pi/anaconda3/envs/caffe/lib/python3.5/site-packages -D BUILD_EXAMPLES=ON -D BUILD_LIBPROTOBUF_FROM_SOURCES=ON -D BUILD_opencv_hdf=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF -D BUILD_TESTS=OFF ..
(pi是我在ubuntu下的用户名)
(注意,这一步不是直接复制粘贴就行的,这里面有很多路径,大家要把我的路径修改掉,改称你们电脑中的路径,比如PYTHON3_EXCUTABLE=/home/pi/anaconda3/envs/caffe/lib/python3.5,大家要改称PYTHON3_EXCUTABLE={你的anaconda3所在的文档}/anaconda3/envs/caffe/lib/python3.5)

   

这一步运行时,会出现一大段文字,一定要确保其中有如下方框中的文字:(路径可以不一样,但一定要有有路径,不能让它显示"NO")

中间如果出现错误,请大家自行百度或google。遇到难解决的问题,多看几篇帖子,总会解决的。

完成以后:

make 
sudo make install
sudo ldconfig

4.将opencv关联到anaconda下caffe环境中的python3.5:

    搜索cv2.cpython-35m-x86_64-linux-gnu.so文件:

sudo find / -name "cv2.cpython-35m-x86_64-linux-gnu.so"

    我这边弹出了两个路径:

    /usr/local/lib/python3.5/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so
    /home/pi/File/opencv-3.1.0/build/lib/python3/cv2.cpython-35m-x86_64-linux-gnu.so

    盲猜第一个,最后发现猜中了(不要问我原因,因为我也不知道)。如果你的路径跟我不一样,反正就选某个python路径下的cv2.cpython-35m-x86_64-linux-gnu.so就对了,不要选其他路径下的(比如我第二个路径是opencv下的,一看就不靠谱:我是要把python关联到opencv,又不是把opencv关联到opencv)。

    进入第一个"cv2.cpython-35m-x86_64-linux-gnu.so"的文件夹:

sudo su
cd /usr/local/lib/python3.5/site-packages

    将其中的"cv2.cpython-35m-x86_64-linux-gnu.so"复制一份,并改名为"cv2.so":

cp cv2.cpython-35m-x86_64-linux-gnu.so cv2.so

    进入你anaconda下caffe环境中python3.5的"site-packages"文件夹,并对上面刚创建的cv2.so建立软链接:

   

cd home/你的用户名/anaconda3/envs/caffe/lib/python3.5/site-packages
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so

5.之后,在caffe环境下进入python,尝试import cv2,可能还会出错。比如我的是:

    ImportError: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory

    这时候,要去找" libpython3.5m.so.1.0"所在的路径(每个人情况不同,你们的可能不是" libpython3.5m.so.1.0"):

sudo find / -name " libpython3.5m.so.1.0"

    这时候会出来一到两条路径:假设为 "XXXXXX1","XXXXXX2"。

   然后,进入如下文件夹,并新建一个文本opencv.conf:

sudo su
cd /etc/ld.so.conf.d
nano opencv.conf

   在打开的文本中写入如下:

/usr/local/lib
XXXXXX1
XXXXXX2

按control + o保存,再按control + x退出,保存后退出,再次输入:

sudo ldconfig -v

然后应该就没问题了。

输入python,然后import cv2尝试一下吧。

 

=====================================make过程中出现的错误=============================================

以前出现的错误都比较好解决,但是这次出现了一个以前没见过的错误:

modules/core/CMakeFiles/opencv_test_core.dir/build.make:854: recipe for target 'bin/opencv_test_core' failed
make[2]: *** [bin/opencv_test_core] Error 1
CMakeFiles/Makefile2:1960: recipe for target 'modules/core/CMakeFiles/opencv_test_core.dir/all' failed
make[1]: *** [modules/core/CMakeFiles/opencv_test_core.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

经谷歌,是因为anaconda中自带的依赖包libtiff把我安装到电脑的usr/lib中的依赖包libtiff给隐藏了,解决方法是卸载anaconda中的这个依赖包,命令如下:

首先用conda deactive跳出自建的环境,然后运行如下命令 :
conda uninstall libtiff
(中间可能会出现网络错误,需多次尝试)]
命令完成后,用make clean清除之前make生成的文件,然后删除build文件,再重建build文件,重新设置编译前选项,并make.

 

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值