安装OpenCV的方法有很多,今天给大家分享的是树莓派3在虚拟环境沙盒(virtualenv Virtualenvwrapper)中安装OpenCV3.3.1。
简单介绍一下为什么要用virtualenv Virtualenvwrapper?
系统的多个python混用会导致 $PYTHONPATH
混乱,或者各个工程对于 package的版本要求不同等等情况。
有一个简单的解决方案就是用virtualenv来隔离多个python,其本质只是实现隔离不同python中$PYTHONPATH
的路径,当然也可以衍生到隔离多个$PATH。
当有很多个虚拟环境时,我们可能会记不清有哪些虚拟环境,要搞清楚每个环境中有哪些package就更难了,因此这里推荐用Virtualenvwrapper来对虚拟环境进行管理。
本人树莓派安装运行的平台:Raspberry Pi 3 + Raspbian stretch + OpenCV 3 + Python3.5.3
首先确保要有一张8G以上的内存卡,下载OpenCV的诸多文件需要占用很多的内存空间,因此需要扩展内存卡
一、扩展文件系统
sudo raspi-config
选择第一个选项7. Advanced Options
回车键Enter,进入下个页面选中第一个选项Expand Filesystem,等待执行完毕。(结束按钮Finish)。
(注意:按上下键可在A1~A7之间移动。按左右键可在和
然后重启树莓(注意:上述执行完毕后,程序会提示是否要重启,选择“是”则自动重启;选择“否”则手动输以下命令重启。)
sudo reboot
重启后,使用df -h
命令查看SD卡的使用分配情况,大致如下。
二、准备编译环境
更新升级装树莓派的安装库
sudo apt-get update
sudo apt-get upgrade
下载编译工具与git
需要通过git来获取opencv的源码包,以及需要cmake来进行编译
sudo apt-get install build-essential git cmake pkg-config
接着,我们需要安装一些图像I/O包,使得我们可以加载多种格式的图片文件
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
安装视频IO包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
OpenCv库的highgui模块需要依赖GTK开发库,安装GTK2.0:
sudo apt-get install libgtk2.0-dev
一些OpenCv的运算可以通过一些扩展包增强,安装opencv优化支持工具:
sudo apt-get install libatlas-base-dev gfortran
通过github下载opencv源码,并check 3.3.1版本
cd ~
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 3.3.1
通过github下载opencv的contrib库 。contrib库中包括了面部识别和文本探测,还包括文本识别、边缘检测器、深度图处理、光线流和追踪算法等
cd ~
git clone GitHub - opencv/opencv_contrib: Repository for OpenCV's extra modules
cd opencv_contrib(注意opencv与contrib之间有一条下划线)
git checkout 3.3.1
安装python3的头文件
sudo apt-get install python3-dev
下载Python包管理工具pip
wget https://bootstrap.pypa.io/get-pip.py
三、创建python3.5.3沙盒环境
sudo python3 get-pip.py
安装virtualenv沙盒工具
sudo pip3 install virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
将沙盒环境变量写入~/.profile:
sudo nano ~/.profile
#这句命令是用nano文本编辑器打开“~/.profile”文件。把下三句语句增添在此文件文末(#和#后面的中文除外),注意每句要换行。且只能通过上下左右键来控制光标的移动。
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 #为了防止环境变量$PATH中已有其它环境的python
export WORKON_HOME=$HOME/.virtualenvs # 放所有虚拟环境的地方
source /usr/local/bin/virtualenvwrapper.sh #写入的环境变量,Wrapper在每次打开shell的时候自动运行 通过source命令使~/.profile生效
在文末追加完此三条语句之后,按ctrl+x退出文本编辑器;再输入“Y”确认保存改动;再按回车确认保存到原文件。即回到先前的命令行。
在命令行中使用下述source
命令,让刚才编辑的文件生效。
source ~/.profile
提示: 也可以不将环境变量写入profile文件,但每次使用沙盒环境前,需要手动运行 |
创建沙盒环境
cd ~
mkvirtualenv p3cv
workon p3cv
提示:p3cv是创建的一个沙盒环境名,可以随意取名,但建议规范起名;若果创建沙盒成功,在当前行会出现(p3cv),使用deactivate命令退出虚拟环境,相应的沙盒命令见文章的最后面。
********以下操作都是在p3cv虚拟环境下进行 ********
安装NumPy包
pip3 install numpy
在沙盒环境下编译opencv
创建build文件夹
cd ~/opencv
mkdir build
cd build
python3.5.3的编译命令:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..
注意:输入“\”后再按回车,“\”前面必须有空格。之前输入的命令不会执行,而是可以继续输入下一行命令。
注意:最后ON之后有一个空格和两个点。
注意:INSTALL_C_EXAMPLES是创建C实例,如果开启,cmake会报错,初次编译可能会花费一点时间,请耐心等待;
四、编译OpenCv和安装OpenCV
(在之前已经进入的build目录下)输入以下命令,编译OpenCv
make -j4
-j4参数是树莓派3有4核,这样可以加快编译速度。但在编译的时候树莓派会卡死机,编译比较漫长,大概需要两个半小时左右,需要耐心的等待! 如果使用make -j4编译出错了,再次使用make -j4继续编译。
注:如果make -j4一直出错并卡在同一处,请使用以下命令 1. make clean 2. make 进行编译,但时间会更长,大概需要4个小时。 |
在build目录下进行OpenCV的安装
sudo make install
sudo ldconfig(第一个字母是小写的L)
安装最后,通过以下命令查看OpenCv是否被安装到这个目录:(而且,此时此目录下有且仅有一个文件:cv2.cpython-35m-arm-linux-gnueabihf.so)
ls -l /usr/local/lib/python3.5/site-packages/
为沙盒环境引用类库(环境为Python3.5.3)
cd ~/.virtualenvs/p3cv/lib/python3.5/site-packages/
注意: 本人在Python 3环境下编译出来的动态链接库的名字是cv2.cpython-35m-arm-linux-gnueabihf.so,而不是cv2.so;若果不改变这个名字,最后在import cv2库时候会报 Import Error: No module named cv2的错误 错,在~/.profile文件中加入export LD_LIBRARY_PATH=/usr/lib/:$LD_LIBRARY_PATH ,看在使用cmake编译环境时是否有相应的Libraries库,没报错,不用加上,报错了则要加上。
不过我们可以通过重命名轻易的修改过来:(下面的命令1和2需要执行。命令2把原文件的名字改为cv2.so的目的是:在之后的命令中会使用到cv2.so这个名字) |
1. cd /usr/local/lib/python3.5/site-packages/
2. sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
最后一步是为p3cv虚拟环境建立一个OpenCv的链接
cd ~/.virtualenvs/p3cv/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
安装成功,验证是否安装正确
source ~/.profile
workon p3cv
python
import cv2
print(cv2.__version__) (注意:cv2后有一个点)
若成功显示版本号,则opencv安装成功
附录:
常用的沙盒命令:
新建虚拟环境:mkmkvirtualenv *
PS:如果是第一次执行 mkmkvirtualenv * 会新建 ~/.virtualenvs/ 并导入一些文件,忽略即可,所以新建的虚拟环境目录就在此处。
查询虚拟环境:lsvirtualenv
删除虚拟环境:rmvirtualenv *
切换虚拟环境:workon***
退出虚拟环境:deactivate