转载:安装OpenCV3.3.0+python2.7 in 树莓派3Raspbian Stretch
介绍
hola,第一次写博,因为这段时间刚接触树莓派和docker,这几天又在被折磨于安装opencv,所以想记录和分享一下经验。
安装raspbian OS是根据官网的步骤:https://www.raspberrypi.org/downloads/raspbian/
安装opencv根据 Adrian Rosebrock在网络上发表的指导步骤进行:https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/
感谢Mr Adrian的资料,相关网址提供给大家参考。
前言
在这份介绍里,我们所需要的准备就是拥有一个树莓派3,并且已经安装了它的系统raspbian stretch。如果你还没有下载这一系统,我建议你更新你的系统,因为以下的一些操作将仅适用于Rp stretch系统。你可以在这里下载我们所需要的系统:https://www.raspberrypi.org/downloads/raspbian/
以及查看升级系统的方式:https://www.raspberrypi.org/documentation/installation/installing-images/README.md
注意: 如果你想从Raspbian Jessie升级到Stretch,可能会存在一些无法预测的问题,所以不建议直接升级,最好的方法就是重新下载Stretch然后重新烧进新的SD卡中。
到这里你的操作系统已经准备完毕,你可以直接将树莓派接显示屏和键盘进行操作,或者使用ssh或VNC进行远程操作,我使用的是VNC。
安装
第一步:扩展文件系统
如果你在使用一个完全新的Raspbian Stretch,你要做的第一件事就是在你的SD卡中扩展文件系统:
$ sudo raspi-config
接着选择“Advanced Options”:
然后,选择“Expand File system”;最后选择退出该界面,这时Pi可能会自动重启,如果没有,使用以下指令:
$ sudo reboot
重启之后,你的文件系统已经被扩展,你可以通过指令$ df -h
来查看:
从以上显示可以看出我在32G卡中,已经使用了一半。如果你用的是8GB的卡那么你需要近50%的可用空间,但是我还是就建议用16GB及以上的卡,因为我曾尝试使用8GB的卡,但是可用空间是一个很大的问题,在最后下载OpenCV的时候,大约下载到40%就被迫停止,因为空间不够,无法继续下载。
但是如果你仍希望使用8GB的SD卡,你可以删除LibreOffice和Wolfram引擎来释放Pi的空间:
$ sudo apt-get purge wolfram-engine
$ sudo apt-get purge libreoffice*
$ sudo apt-get clean
$ sudo apt-get autoremove
第二步:安装dependencies
原参考指导中,作者使用了大约4个小时完成以下所有过程;我用了大约8个小时完成最后的编译,所以根据网速情况,每个人安装的时候不等。
第一步,更新升级任何存在的包:
$ sudo apt-get update && sudo apt-get upgrade
接着我们需要安装一些开发工具,比如CMake,它可以帮助我们配置Opencv创建过程:
$ sudo apt-get install build-essential cmake pkg-config
下面我们需要安装图形I/O包,这些包可以让我们从磁盘上下载各种格式的图片文件:
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
除了图片I/O包,我们也需要视频的相关包,这些包可以让我们直接磁盘上查看视频并且直接对视频流进行操作:
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
OpenCV目录有许多分模块,它们可以用来在我们的屏幕上显示图片并且创建基本的GUI:
$ sudo apt-get install libgtk2.0-dev libgtk-3-dev
另外,OpenCV还有许多其他的对我们未来使用有帮助的包,这些包在Pi的使用上非常重要:
$ sudo apt-get install libatlas-base-dev gfortran
最后,安装Python2.7和Python3:
$ sudo apt-get install python2.7-dev python3-dev
如果你使用的是最新下载的操作系统,那么系统中可能已经存在了最新版本的Python,你可以在指令框中查看。但是如果你跳过这一步,你会发现后面跑cmake语句时,会发生关于Python包的一些错误。
第三步:安装OpenCV源代码
到现在为止我们已经安装了所有需要的dependency,下面我们需要从OpenCV官方库中获取3.3.0版本的相关文档:
$ cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
$ unzip opencv.zip
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
$ unzip opencv_contrib.zip
你必须确保下载的opencv和opencv_contrib的版本一直,否则后面编译时会存在错误。
第四步:Python2.7或者Python3
在我们开始编译OpenCV之前我们需要先安装pip:
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
$ sudo python3 get-pip.py
下面我们需要安装virtualenv
和 virtualenvwrapper
。
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip
安装完之后我们需要更新~/.profile
文件,这里有多种方法来更新文件内容,这里是其中一种:
$ echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile
$ echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile
$ echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.profile
$ echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile
更新完文件中的内容之后,我们需要让它能够生效,所以你可以退出登录然后在登入系统,或者重新打开一个指令框,或者最简便的方法,使用source
指令:
$ source ~/.profile
创建你的Python虚拟环境
我们可以使用以下指令来创建你所需要的对应的虚拟环境:
$ mkvirtualenv cv -p python2
这条指令用来创建Python2.7 的虚拟cv环境;
以下是Python3的创建指令:
$ mkvirtualenv cv -p python3
这时你会发现你的界面会如图下所示:
如果你想退出虚拟环境,重复使用 $ source ~/.profile
指令;重新进入虚拟环境则使用 workon cv
指令:
$ source ~/.profile
$ workon cv
退出虚拟环境后你将看不到cv
显示。
安装NumPy
现在我们进入 cv虚拟环境,在此环境下我们开始安装NumPy:
$ pip install numpy
**注意:**从现在开始,所有安装都是在cv环境下进行!!!
第五步:编译并安装OpenCV
现在我们已经完成了所有的准备工作,可以开始编译安装OpenCV了,请在此确保你是在虚拟环境下,如果不是,通过workon cv
进入环境:
$ workon cv
一旦你进入虚拟环境,就可以使用CMake来设置搭建:
$ cd ~/opencv-3.3.0/
$ mkdir build
$ cd build
$ 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.3.0/modules \ -D BUILD_EXAMPLES=ON ..
在我们进行最后一步时,一定要检查CMake的输出内容
找到关于python2和python3的输出内容,如果你想编译Python2.7的OpenCV,那么请确保Python2的所有相关路径无误:
或者,如果你想编译Python3的OpenCV,请确保Python3的相关路径与以下图片中的类似:
如果你没有得到相对应的输出,请重新进行以上步骤,注意:一定要在虚拟环境下进行,并且需要确保相关路径正确,否则后面的编译将会存在一些错误
编译之前更新你的交换空间大小
打开/etc/dphys-swapfile
文件,然后找到CONF_SWAPSIZE
变量:
# set size to absolute value, leaving empty (default) then uses computed value
# you most likely don't want this, unless you have an special disk situation
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=1024
将100MB改成1024MB,如果你跳过这一步,后面编译可能存在失败
接着激活这一更改:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
最后,我们可以开始编译,编译时间4-9个小时不等:
$ make -j4
编译结束后你的界面会如下:
完成编译后,我们可以开始安装OpenCV:
$ sudo make install
$ sudo ldconfig
第六步:完成安装
Python2.7
如果在第五步你没有任何错误,那么OpenCV已经在/usr/local/lib/python2.7/site-pacakges
安装成功,你可以验证一下:
$ ls -l /usr/local/lib/python2.7/site-packages/ total 1852 -rw-r--r-- 1 root staff 1895772 Mar 20 20:00 cv2.so
如果你在site-pacakges中没有找到从cv2.so文件,它也有可能被安装在dist-packages中;
最后,我们将cv虚拟环境和OpenCV连接:
$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so
Python3
在安装之后,你的OpenCV已经安装在/usr/local/lib/python3.5/site-packages
中,你可以验证:
$ ls -l /usr/local/lib/python3.5/site-packages/ total 1852 -rw-r--r-- 1 root staff 1895932 Mar 20 21:51 cv2.cpython-34m.so
这里并不知道为什么它的名称不是cv2.so,但是这不影响我们使用,当然你也可以将文件名改为cv2.so,以方便我们后面的使用:
$ cd /usr/local/lib/python3.5/site-packages/
$ sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
在更改名称之后,我们可以将它与cv环境连接:
$ cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
$ ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
第七步:测试
恭喜大家,现在OpenCV已经完全安装成功!
但是在我们投入使用之前,我们需要验证一下它是否能够正常工作,打开一个新的指令框,然后进入cv虚拟环境查看当前python版本和OpenCV版本:
$ source ~/.profile
$ workon cv
$ python
>>> import cv2
>>> cv2.__version__
'3.3.0'
>>>
正如所见,OpenCV安装成功。
你可以删除之前我们下载的opencv-3.3.0和opencv_contrib-3.3.0的安装包来释放一下空间:
$ rm -rf opencv-3.3.0 opencv_contrib-3.3.0
同时,别忘记将我们之前更改的交换空间大小改回原来数据:
# set size to absolute value, leaving empty (default) then uses computed value
# you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=100
# CONF_SWAPSIZE=1024
更改完后记得激活:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
到这里我们的安装就全部结束了,我第一次接触安装的时候,存在许多问题,重复安装了好多次,最后终于成功;所以在安装过程中可能会莫名存在一些或大或小的问题,欢迎大家在评论区讨论