RaspberryPi3 Install OpenCV3.3.1 for Python3.5.3

安装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版本

  1. cd ~
  2. git clone https://github.com/opencv/opencv.git
  3. cd opencv git
  4. checkout 3.3.1.

通过github下载opencv的contrib库
contrib库中包括了面部识别和文本探测,还包括文本识别、边缘检测器、深度图处理、光线流和追踪算法等

  1. cd ~
  2. git clone https://github.com/opencv/opencv_contrib.git
  3. cd opencv_contrib
  4. 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

  1. sudo vim ~/.profile
  2. export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 #为了防止环境变量$PATH中已有其它环境的python
  3. export WORKON_HOME=$HOME/.virtualenvs # 放所有虚拟环境的地方
  4. source /usr/local/bin/virtualenvwrapper.sh #写入的环境变量,Wrapper在每次打开shell的时候自动运行 通过source命令使~/.profile生效

使用source ~/.profile命令写入刚才编辑的文件

提示:

也可以不将环境变量写入profile文件,但每次使用沙盒环境前,需要手动运行
source /usr/local/bin/virtualenvwrapper.sh
否则workon命令会提示找不到

创建沙盒环境

  1. mkvirtualenv p3cv
  2. workon p3cv

提示:p3cv是创建的一个沙盒环境名,可以随意取名,但建议规范起名;若果创建沙盒成功,在当前行会出现(p3cv),使用deactivate命令退出虚拟环境,相应的沙盒命令见文章的最后面。

这里写图片描述

以下操作都是在p3cv虚拟环境下进行
安装NumPy包

pip3 install numpy

在沙盒环境下编译opencv
创建build文件夹

  1. cd ~/opencv
  2. mkdir build
  3. cd 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命令从新开始,但时间比较漫长。

  1. make clean
  2. make

在build目录下进行OpenCV的安装

  1. sudo make install
  2. sudo ldconfig

安装最后
通过以下命令查看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库,没报错,不用加上,报错了则要加上。

这里写图片描述

不过我们可以通过重命名轻易的修改过来

  1. cd /usr/local/lib/python3.4/site-packages/
  2. 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

安装成功,验证是否安装正确

  1. source ~/.profile
  2. workon p3cv
  3. python
  4. import cv2
  5. print(cv2.__version__)

若成功显示版本号,则opencv安装成功

这里写图片描述

常用的沙盒命令:

新建虚拟环境:mkmkvirtualenv *
PS:如果是第一次执行 mkmkvirtualenv * 会新建 ~/.virtualenvs/ 并导入一些文件,忽略即可,所以新建的虚拟环境目录就在此处。
查询虚拟环境:lsvirtualenv
删除虚拟环境:rmvirtualenv *
切换虚拟环境:workon***
退出虚拟环境:deactivate

注:本人是树莓派的爱好者,并非专业的人士,上面的内容如有错误或不当的地方,希望广大读者指出,本人会做出相应的修正!

猜你喜欢

转载自blog.csdn.net/breadheart/article/details/78877940