likes
comments
collection
share

Ubuntu 20.04 Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

作者站长头像
站长
· 阅读数 3

起先其实没规划要把 OpenCV 编译安装到 Anaconda 中的,因为问题真的不少,事实证明问题真的不少

不过把使用熟练后,觉得anaconda 真的好香,真的是个好工具,感觉比我之前玩 Docker 更好的感觉。

起先应该是先写怎么安装一系列环境的,但是没去完善,就把优先级降低啦,那篇先写出来,就先发那篇啦~ 后期再排个目录出来。

反正目前应该是没人看这个专栏,没啥影响~~

就是不知道周五发能有点流量不~ 不过这几篇文章针对性太强啦,没接触的根本不需要~~

写文要及时快乐,发布发布,没就没啦,快乐最大

如果要看虚拟环境编译使用opencv,直接跳去第三章节,以免浪费时间~

一、Anaconda 安装

  1. 在Anaconda官网下载Linux安装包:Anaconda | Individual Edition

  2. mirrors.tuna.tsinghua.edu.cn/anaconda/ar… 清华镜像源

  3. 我的版本是这个

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

  1. 运行下面的命令安装:
chmod +x Anaconda3-2022.05-Linux-x86_64.sh
./Anaconda3-2022.05-Linux-x86_64.sh

(个人观点:不建议装最新版,这不是像在学Java,啥都顶新的上,玩这些装最新的,真的是资料少和坑多)

之后的操作简单来说就是一路回车,输入yes ,然后就完啦~

其中有一步骤是选择自己的安装路径,这里的安装的路径默认是 /home/${USER}/anaconda ,我就没再进行调整啦。

选择yes,会输出下面内容,

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

然后自动在~/.bashrc 中添加下面内容:

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

但如果选择啦 no ,那就得跟我一样,再来踩点坑啦

参考博客:Linux安装anaconda3是否初始化的区别

如果我安装过程选择了no,但是安装完还想初始化,该怎么操作?可以通过以下命令来实现:

source /安装目录/anaconda3/bin/activate

conda init

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

以实际安装目录为准。

二、Anaconda 简单使用

当安装后,再次打开终端,在终端名称前面会多了一个(base),表示已经在使用 Anaconda中的base环境啦

1、禁用默认的 base 环境

个别时候虚拟环境是会本机环境冲突的,而且我们大多数时候新开终端,都希望是操作本机电脑的环境,而不是虚拟环境。

这个时候我们可以禁用在打开新终端,自动进入base环境。

可以利用conda config --set来修改禁用配置:

conda config --set auto_activate_base false #禁用默认base环境
conda config --set auto_activate_base true  #启用默认base环境

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

禁用后新开终端,就不会再进入默认的base环境中啦。

2、创建一个新的虚拟环境

conda create -n test python=3.8 创建一个虚拟环境,名称为 test ,python 版本为 3.8

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

这里输入yes,会下载一些默认的依赖。

conda activate test 激活 test 虚拟环境并切换到 test 环境中

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

切换到 test 环境后,这里使用的也是虚拟环境中的 pip,这里下载不会影响到本机环境,很爽这点。

3、切换环境和禁用环境

1)conda env list 查看所有的虚拟环境

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

2)conda deactivate envname

envname 环境名称,替换成要禁用的环境名称

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

禁用base 不用输入名称

4、删除某个环境

conda remove -n xxxxx(名字) --all 解释:remove表示删除,-n是(name名字的缩写),xxxxx是要删除的虚拟环境的名字,最后的 –all 如果不加上的话代表删除的是当前环境下的一个包,比如numpy等等,加上的话才是删除虚拟环境

conda remove -n test --all

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

5、删除环境中的某个不需要的依赖

这点还是会遇上的,我下载的一个模型的依赖,它也下载了 gstreamer 的依赖,但是版本太低了,也没有相关插件(装太麻烦了),直接就把虚拟环境中的 gstreamer 的依赖给删掉啦。

conda remove packagename

当时也是看到了下面这篇博客,才解决问题的:

gstreamer 无组件问题修复

6、卸载 anaconda

这点我就不再演示啦,具体就只有两点:

1、删除安装 anaconda 的目录文件夹,整个删除

比如我which conda 找到的路径是下面这样的,那我只要删除 /home/nzc/anaconda3即可

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

2、删除 ~/.bashrc 初始化 anaconda 的那一段代码即可

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

三、在虚拟环境中编译安装 OpenCV,报错和解决

这后半段其实和我上一篇写的那篇文章没啥区别,主要是解决踩坑,以及外部环境调用安装到虚拟环境的OpenCV

前置依赖和环境可以看这:

1、编译 OpenCV 代码

这里唯一的区别就是,在编译安装之前需要激活你要安装opencv的虚拟环境,要安装到那个虚拟环境就激活那个

conda activate envname

sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D PYTHON_EXECUTABLE=$(which python2) \
-D BUILD_opencv_python2=OFF \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
-D OPENCV_EXTRA_MODULES_PATH=/home/nzc/Desktop/project/opencv4/opencv_contrib-4.1.1/modules/ \
-D WITH_GSTREAMER=ON \
..

cmake 命令还是一样没有变化,但是因为在虚拟环境中,所以最后的安装位置也是不一样的

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

2、make & make install

sudo make -j8
sudo make install

中间会出现报错,推荐看上篇解决方法,上篇有详细说明。

3、动态链接

重新載入動態連結,

sudo ldconfig -v

这里的 -v 参数就是将相关信息输出到屏幕上,不想看可以直接去掉 -v 参数。

4、使用

如果在当前虚拟环境中,直接使用是没有问题的。

比如下面这样的方式

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

如果是在pycharm中,则需要选择当前虚拟环境的解释器

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

或者是在下面这里配置

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

5、虚拟环境外和其他虚拟环境使用

相信大伙都会觉得如果安装到了虚拟环境中,如果外部环境要使用该怎么办?

按照我最开始的测试来说,是需要配置环境变量的,将编译安装的opencv的path添加到环境变量中,并且配置到到 conda 初始化代码之前

我最开始没配环境变量,一直死活不成功。

等到我来写文章的时候,去掉也可以啦是吧。麻啦麻啦。

还是写上吧,如果报错的话,可以试一试添加环境变量,添加到conda init 之前。

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

这是我的安装路径,你们的自己去找哈

export PYTHONPATH=$PYTHONPATH:/home/nzc/anaconda3/envs/python_38-pytorch_1.7.0/lib/python3.8/site-packages/cv2/python-3.8

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

两个不同的虚拟环境中可以使用编译安装的opencv吗?

我反复确认了一下,在没有配置环境变量前,是无法调用的。

另外如果不是一个版本的python ,也会失败。

6、python 3.8.16 可能遇到的错误

安装后,再使用

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码 import cv2 print (cv2.version)

进行测试时,遇上依赖库版本问题

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

理论上现在使用的应当是编译完成的opencv库,但实际上却报错啦。

按照这个错误,在csdn找到一位博主,他在使用ros系统,引入一个包时,也报了相同的错误,根据他的结论和推断。错误是同一种类型,采用他的方式,成功的解决了问题。

但具体原因,如何排查,我仍然未知。

链接如下:

Conda虚拟环境下libp11-kit.so.0: undefined symbol: ffi_type_pointer...问题解决

引用内容:

  • 报错原因 可以看到,我的报错来源是我在python中import moveit_commander,但是可能其他命令也会报出该错误,但是报错原因均来自libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0,结合github上相关问题的讨论,理解过来意思大概就是libffi的版本不一致,导致了libp11-kit.so.0在使用时出现了未定义符号问题。其实可以推到以后出现同类型问题,解决方法也应该基本类似。

    解决方法 打开至conda虚拟环境下lib文件夹中,路径为/home/anaconda3/envs/xxx/lib,在文件夹内启动终端,输入命令ls -l,获得结果如图所是。

    可以看到,你的libffi.so.7链接至libffi.so.8.1.0,所以,这也就是为什么会在程序中,libffi报版本错误了。找到原因,解决方法也很简单,我这边选择的方式是将该路径下的libffi.so.7文件备份后(重命名为libffi_bak.so.7),再在该路径下创建一个新的libffi.so.7链接至/lib/x86_64-linux-gnu/libffi.so.7.1.0,即输入命令:

    sudo ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7 sudo ldconfig

因为我电脑中还安装 cuda ,在执行软链接的链接时,出现符号未存在的问题,但不是我这次的主要问题, 另外该命令已经执行成功,我便暂时没有再关注。

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

作者的补充说明 原来是Python 3.8.16版本在安装过程中,就会默认安装 libffi-3.4.2,在该库中,就会出现旧版本兼容老版本问题,即出现libffi.so.7链接至libffi.so.8.1.0,进而产生报错。而在python3.8.10中,默认安装libffi-3.3版本,在该版本内,libffi.so.7链接至libffi.so.7.1.0,就不会产生上述问题。因此,另一种解决方式即为安装python 3.8.10,同样能解决该问题。

然后我验证我的python版本,确实是 3.8.16 ,完美踩中所有的问题

怎么查看Anaconda内置的Python版本的方法

conda activate
 python -V 查看python 版本

Ubuntu 20.04  Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码

真的respect每一位前行者,都是躺坑人~ 是换我自己遇到这个错误,不知道要耽误多久,才能解决问题。感谢遇上的每一位愿意分享和帮助自己和他人的博主

后语

最近在写这个方向的基础文章,主要是目前在接触这一块,天天踩坑,踩麻啦踩麻啦~

下一篇应该是 ubuntu基础总结的文章 又或者是 音视频操作 的文章吧,还在思考中~

总之慢慢写吧,后续应该还会写到 yolov5 识别框架的使用


又到了周五啦,希望周末是天气晴朗的吧~,不要再让我封印在家里啦吧~

距离上周发文不知不觉就过去一周啦啊,时间过得真快啊。

如果觉得不错的话,记得来个赞哦,或者给我来条评论吧~

我更喜欢交朋友,一起交流学习~