设为首页 收藏本站
查看: 433|回复: 0

[经验分享] Opencv3.3(Linux)编译安装至python的坑

[复制链接]

尚未签到

发表于 2017-11-18 06:32:05 | 显示全部楼层 |阅读模式
  编译安装OpenCV绝对是一件让人发狂的事情,CMake繁多的选项,国内蛋疼的网速,实在让人无力吐槽,然而为了使用contrib包,我不得不重新编译他。

OpenCV的编译
  其实OpenCV编译并不是很难,但是国内蛋疼的网速实在令人无法忍受,首先简述一下编译过OpenCV的过程
  我的编译环境是deepin15

准备工作
  首先我们用apt安装必备的库(虽然大部分我在之前已经安装过了 orz)
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  建议大家在官方文档多看下相关的参数和你需要的语言环境,根据自己具体需要来安装自己需要的包
  创建自己的工作目录,cd进去clone这两个库
cd ~/<my_working_directory>  
git clone https://github.com/opencv/opencv.git
  
git clone https://github.com/opencv/opencv_contrib.git
  这里需要注意,opencv和contrib必须对应否则编译会失败,因此我此处clone了最新的
  opencv这两个库都相当大,而github的速度相当慢,有一种方法是使用coding.net 或者Oschina导入然后clone,
  我在此处通过改CDN来解决访问不稳定的问题

使用CMAKE从源码构建项目
  1.创建临时目录用来存储我们编译后的opencv库,你可以随意命名,我这用
cd ~/opencv  
mkdir build
  
cd build
  2.构建项目
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..  这里列举了最基础的两个参数,编译类型和安装目录。
  我这里推荐使用cmake-gui来构建,他能清晰列出可选参数,根据自己需求选择就行。

  安装cmake-gui
sudo apt-get install cmake-qt-gui  
cmake-gui

  这里不多赘述cmake-gui的使用,只是列出我使用的参数
cmake -D CMAKE_BUILD_TYPE=Release \  
-D CMAKE_INSTALL_PREFIX=/usr/local \
  
-D OPENCV_EXTRA_MODULES=../../opencv_contrib/modules \
  
-D WITH_LIBV4L=ON \
  
-D WITH_CUDA=OFF \
  
..
  稍微解释一下,我之前使用pytorch等深度学习库时,安装过CUDA,但是cmake的自动配置有问题,因此我关闭了CUDA,使用默认的OPENCL
  LIBV4L是因为构建时找不到videoio.h这个库,因此可以使用下面的命令来解决
sudo apt-get install libv4l-dev  若是还不能解决可以加入WITH_V4L=OFF这个参数
  3.python相关的参数
  若是想指定你的python库安装路径请在此处指定参数
PYTHON2(3)_EXECUTABLE = <path to python>#python执行路径  
PYTHON_INCLUDE_DIR = /usr/include/python<version>#python库所在路径
  
PYTHON_INCLUDE_DIR2 = /usr/include/x86_64-linux-gnu/python<version>
  
PYTHON_LIBRARY = /usr/lib/x86_64-linux-gnu/libpython<version>.so #python本身的动态链接文件
  
PYTHON2(3)_NUMPY_INCLUDE_DIRS = /usr/lib/python<version>/dist-packages/numpy/core/include/ #NUMPY所在位置
  因为每个人之前的环境不一样,你可能要补全一些环境
sudo apt-get install python-numpy  
sudo apt-get install python3-numpy
  
sudo apt-get install libpython-dev libpython3-dev
  4.然后就可以等待愉快的配置了。。。。。个头!!!!!!
  国内环境实在太他蛋疼了!!!!!!!!!!!!!!!正值大会,我的梯子在开会前一天突然全部变红,更是令人蛋疼
  IPPICV就是一个那么令我蛋疼的库,只能直接下载下来放进去了,唉,我的CMAKE配置会将下载的库 放在编译目录的.cache文件夹中,下下来对文件名进行hash放进去就好了,这个库下载的网址是https://raw.githubusercontent.com/opencv/opencv_3rdparty/a62e20676a60ee0ad6581e217fe7e4bada3b95db/ippicv/ippicv_2017u2_lnx_intel64_20170418.tgz
  ,实践关系我们需要对标自己实际情况进行更改。这个库存的目录在这https://github.com/opencv/opencv_3rdparty,默认的主分支只提供了readme,你需要更改分支到和你opencv对应的分支下载。
  参考了这篇文章
ipp_file=ippicv_2017u2_lnx_intel64_20170418.tgz &&  
ipp_hash=$(md5sum ../$ipp_file | cut -d" " -f1) &&
  
ipp_dir=.cache/ippicv                           &&
  

  
mkdir -p $ipp_dir &&
  
cp ../$ipp_file $ipp_dir/$ipp_hash-$ipp_file
  在opencv目录下进行如上命令即可
  可能有些人处出现ffmpeg无法下载的情况,一般使用apt大法
sudo apt-get install ffmpeg-dev  基本可以解决

编译与安装
  编译
  我在此处没有任何问题,直接
make -j4  安装
sudo make install
anaconda安装cv2
  在anaconda安装cv2时出现了个神奇的错误,在命令行调用完美,在使用jupyter时却出现问题

安装
  其实默认得make install已经将cv2安装至python目录下了,但是我要安装的是anaconda的python,恰巧anaconda的环境变量我是放在系统的python环境变量下的,平时使用source activate root来使用,自然make install并没有进行安装。

  我们在此处可以拷贝make这一步生成的opencv的动态链接文件
  如图 我们将其拷贝至anaconda默认python的库目录下
cp cv2.cpython-35m-x86_64-linux-gnu.so ~/anaconda3/lib/python3.6/site-packages/cv.so

  之后我使用默认的python调用cv完全没有问题,但是奇怪的是在jupyter notebook出现了很奇妙的问题

jupyter notebook import Error
  我在jupyter调用cv2时出现import error这一报错
  

Import error GLIBCXX_3.4.21 not found when importing cv2  

  大概就是上面这样子的,没有保存当时报错的截图
  GLIBCXX的问题是libgcc链接可能在gcc版本更新后链接没更新导致的,一般anaconda使用万能句法
conda install libgcc  但是这次并没有解决,
  使用下面句子检查conda默认的libgcc的链接
ldd anaconda3/lib/libstdgcc.so.6  或者
strings anaconda3/lib/libstdgcc.so.6 | grep GLIBCXX  如果缺少对应GLIBCXX,使用软链接进行链接
cd anaconda3/lib/  
mv libstdc++.so.6 libstdc++.so.6.old
  
ln -s /usr/lib64/libstdc++.so.6  libstdc++.so.6
  就当我信心满满的打开jupyter使用import cv2时
  现实给了我一个狠狠的耳光,import error,这就很尴尬了,到底怎么解决?

更改核
  在python的命令行可以运行,jupyter 却没法运行,是不是可能jupyter核设置有些问题?
  不同环境下kenels存在的目录可能不同,一下是官方提供的可能的位置.

  我的kernel目录在anaconda3/share/jupyter/kernels/,打开anaconda3/share/jupyter/kernels/python3目录下的kenel.json进行编辑
  修改前

  修改后

  打开jupyter notebook 运行 import cv2
  一切正常.opencv的编译安装终于结束了

后记
  虽然不知道为什么把环境变量的python改成绝对路径就ok了(也许是anaconda的python在环境变量的顺序在系统后面的原因),但是管他呢,我特码再也不想配置opencv了.
  GFW真(和谐和谐)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-408096-1-1.html 上篇帖子: linux使用yum的方式安装mysql实践 下篇帖子: centos 7 mini版中安装Python3.x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表