安装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
然后重启树莓
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开发库
sudo apt-get install libgtk2.0-dev
一些OpenCv的运算可以通过一些扩展包增强
sudo apt-get install libatlas-base-dev gfortran
安装GTK2.0
sudo apt-get install libgtk2.0-dev
安装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 https://github.com/opencv/opencv_contrib.git
- cd 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
使用source ~/.profile
命令写入刚才编辑的文件
提示:
也可以不将环境变量写入profile文件,但每次使用沙盒环境前,需要手动运行
source /usr/local/bin/virtualenvwrapper.sh
否则workon命令会提示找不到
创建沙盒环境
提示:p3cv是创建的一个沙盒环境名,可以随意取名,但建议规范起名;若果创建沙盒成功,在当前行会出现(p3cv),使用deactivate命令退出虚拟环境,相应的沙盒命令见文章的最后面。
以下操作都是在p3cv虚拟环境下进行
安装NumPy包
pip3 install numpy
在沙盒环境下编译opencv
创建build文件夹
compile command for 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-3.1.0/modules \
-D BUILD_EXAMPLES=ON ..
注意:INSTALL_C_EXAMPLES是创建C实例,如果开启,cmake会报错,
初次编译可能会花费一点时间,请耐心等待;
三、编译OpenCv和安装OpenCV
编译OpenCv
make -j4
-j4参数是树莓派3有4核,这样可以加快编译速度。但在编译的时候树莓派会卡死机,编译比较漫长,大概需要一个半小时左右,需要耐心的等待!
如果使用make -j4编译出错了,使用make命令从新开始,但时间比较漫长。
在build目录下进行OpenCV的安装
安装最后
通过以下命令查看OpenCv是否被安装到这个目录:
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库,没报错,不用加上,报错了则要加上。
不过我们可以通过重命名轻易的修改过来
- cd /usr/local/lib/python3.4/site-packages/
- sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
最后一步是为p3cv虚拟环境建立一个OpenCv的链接
cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
安装成功,验证是否安装正确
若成功显示版本号,则opencv安装成功
常用的沙盒命令:
新建虚拟环境:mkmkvirtualenv *
PS:如果是第一次执行 mkmkvirtualenv * 会新建 ~/.virtualenvs/ 并导入一些文件,忽略即可,所以新建的虚拟环境目录就在此处。
查询虚拟环境:lsvirtualenv
删除虚拟环境:rmvirtualenv *
切换虚拟环境:workon***
退出虚拟环境:deactivate
注:本人是树莓派的爱好者,并非专业的人士,上面的内容如有错误或不当的地方,希望广大读者指出,本人会做出相应的修正!