前言
上一篇我们讲了 在 linux 环境下给树莓派安装系统及入门各种资料 ,今天我们更进一步,尝试在 PI3 上安装 openCV 开发环境.
博主在做的过程中主要参考一个国外小哥的文章(见最后链接 1), 不过其教程中有一个地方稍微有点问题,导致我入坑好久!这里也会着重说明下.
1,Expand filesystem
新安装系统之后,首要的工作就是扩大文件系统.因为,用 SD 卡安装完系统后一大部分空间实际是未被分配的:
选择 7 高级,然后选择 "1. Expand File System",之后点击 finish,然后 reboot .
sudo
raspi-config
sudo
reboot
之后,你可以用 df -h 命令确认文件系统是否被扩大:(如下,我的 SD 卡为闪迪的 32G 内存卡)➜ ~ df -h
接下来是安装 openCV 的依赖,下面步骤有点多,大家千万别漏了其中一两个(我操作的时候就把 ibjpeg-dev libtiff5-dev libjasper-dev libpng12-dev 给忘了,结果又得花几个小时重新编译一遍!!!)
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G 6.2G 22G 23% /
devtmpfs 466M 0 466M 0% /dev
tmpfs 470M 0 470M 0% /dev/shm
tmpfs 470M 6.4M 464M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 470M 0 470M 0% /sys/fs/cgroup
/dev/mmcblk0p1 41M 21M 21M 51% /boot
tmpfs 94M 0 94M 0% /run/user/1000
2,Install dependencies
2.1 更新
2.2 安装 CMake 等编译 openCV 源码的工具
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt - get install build - essential cmake pkg - config
2.3 安装几种常见格式的图像操作的包,方便我们能从硬盘上读取不同格式的图像
$ sudo apt - get install libjpeg - dev libtiff5 - dev libjasper - dev libpng12 - dev
2.4 同样的,我们也需要视频操作的包
2.5 openCV 用于图像 / GUI 展示的功能依赖 highgui 模块,为了编译 highgui,我们需要安装 GTK development library
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
$ sudo apt - get install libgtk2.0 - dev
2.6 安装额外的一些依赖
$ sudo apt - get install libatlas - base - dev gfortran
^-^ 记得看一下上面几个安装过程有没有少哦
2.7 接下来还需要安装 python dev
下载并解压 3.1.0 版本的源码:
sudo apt - get install python2.7 - dev python3 - dev 3,
Download the OpenCV source code
$ cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
$ unzip opencv.zip
为了安装完整的 openCV3,体验新的 features,还需要下载并解压 opencv_contrib(注意和 opencv 版本保持一致):
4,准备 python 环境
$ wget - O opencv_contrib.zip https: //github.com/Itseez/opencv_contrib/archive/3.1.0.zip
$ unzip opencv_contrib.zip
4.1 安装 python 包管理器:
4.2 安装 python 虚拟环境 virtualenv virtualenvwrapper
$ wget https: //bootstrap.pypa.io/get-pip.py
$ sudo python get - pip.py
首先说明下为什么要装这两个包:
First, it's important to understand that a virtual environment is a special tool used to keep the dependencies required by different projects in separate places by creating isolated, independent Python environments for each of them.
In short, it solves the "Project X depends on version 1.x, but Project Y needs 4.x" dilemma. It also keeps your global
site-packages neat, tidy, and free from clutter.
If you would like a full explanation on why Python virtual environments are good practice, absolutely give this excellent blog post on RealPython a read .
用虚拟开发环境可以为每个工程提供独立的 python 开发环境,独立的包,独立的版本,每个独立的环境会在~/.virtualenvs / 下形成资源包~
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip
之后在~/.profile 文件最后添加下面几行:
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
之后如果想用 python 虚拟环境,在每次打开一个新的 terminal 就要执行一次 source ~/.profile
$ source ~/.profile
接下来我们生成一个 python 虚拟环境来用于 opencv 的开发提供环境:(这里不讲 python2,强烈建议用 python3)
$ mkvirtualenv cv - p python3
注:再次说明 python 虚拟环境是完全独立的,也就是说在 cv 的环境下安装的 python 包,步适用于全局;在全局安装的包,不适合 cv.
如何验证你如何将 cv 环境生成好了呢?——新开一个 terminal,执行下列命令:
$ source ~/.profile
$ workon cv
如果 terminal 前面的文字变成了 (cv) 表明成功创建了名为 cv 的 python 虚拟环境:
4.3 在 cv 虚拟环境下安装 numpy
在接下来的操作中都要保持在 cv 环境中!
(cv) - >~$ pip install numpy
5,编译和安装 openCV
5.1 编译前的准备
首先确定是在 cv 虚拟环境中,如果不在,可以执行:
$ source ~/.profile
$ workon cv
接下来用 cmake 进行编译 opencv:
注:这一步参考链接 1 的介绍中缺少一个编译选项,导致总是 make 出错:(当其出错时,按照下面的方法进行尝试:)
make -j4 总是报错:
解决方法:删除build下的所有东西(cmake产生的和make -j4产生的),重新cmake,多加一个下面的选项
反思:之前一直复制网上的,结果网上坑爹把-D和后面单词连到一块结果还是不成功,导致走了好多弯路.之后做事情前要分析原因(为什么,然后再去尝试,不要根据结果来反馈尝试的对错!!!这样可能会走弯路!!!)
link:
http://answers.opencv.org/question/116926/ubuntu-1610-opencv-build-fails-stdlibh-missing/
- 直接采用ubuntu中opencv的安装方法会报QT缺少的错误:http://www.samontab.com/web/2014/06/installing-opencv-2-4-9-in-ubuntu-14-04-lts/
$ cd ~/opencv-3.1.0/
$ mkdir build
$ cd build
$ cmake -D ENABLE_PRECOMPILED_HEADERS=OFF \
-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 ..
cmake 结束之后,会出现下图所示:(当时忘了截图了,盗用别人的一张 ^-^ )
请仔细校对下 python3 栏的 Interpreter 的 python 虚拟环境的路径,numpy 指向 python 虚拟环境下的 numpy 安装路径等...
5.2 开始编译 opencv
上面准备好了一切,只等 make 了!请再次确保您在 cv 虚拟环境中:
$ make
-j4
编译过程大概会用 2~3 个小时!-j4 是采用 4 线程编译,如果采用 4 线程编译出现问题请采用单线程编译:
$
make clean $ make
编译结束后会出现下图所示(也没有留截图,直接盗别人的图):
5.3 安装 opencv
接下来就只需要几个简单的命令就能安装了:
$ sudo make install
$ sudo ldconfig
6,pi3 安装 opencv3 收尾工作
接下来做一点收尾工作,然后就能用你的 PI 开发图像识别的项目了!
opencv 编译好之后就可以 make install 安装了,编译是通用的,install 是将相应的模块,DEMO 放到相应的文件夹内;
下面几步主要是在 python 虚拟环境中链接到 opencv 模块:(知其所以然)
上面当运行完 make install 之后 OpenCV+Python 的打包文件将安装在:
/usr/local/lib/python3.4/site-packages
$ ls -l /usr/local/lib/python3.4/site-packages/
total 1852
-rw-r--r-- 1 root staff 1895932 Mar 20 21:51 cv2.cpython-34m.so
我们需要将 cv2.cpython-34m.so 重命名为 cv2.so:
$ cd /usr/local/lib/python3.4/site-packages/
$ sudo mv cv2.cpython-34m.so cv2.so
然后需要将 python 虚拟环境中的 cv2.so 链接到上面刚被改名为 cv2.so 的文件上:
$ cd ~/.virtualenvs/cv/lib/python3.4/site-packages/
$ ln -s /usr/local/lib/python3.4/site-packages/cv2.so cv2.so
7,测试 OpenCV3 是否安装成功
进入 cv 环境,然后调用简单的 python 指令:
$ source ~/.profile
$ workon cv
$ python
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>
此时在 home 目录下还有两个编译,安装 opencv 时使用的文件夹,理论上可以直接删除掉,但是我建议还是先理解下整个操作流程之后再删掉!
因为,对 opencv 源码的编译是需要很长时间的,一旦之后发现有什么问题,可以查看或修改 opencv 源码来尝试解决问题!
➜ ~ ls
Desktop Documents Downloads get-pip.py Music opencv-3.1.0 opencv_contrib-3.1.0 Pictures Public python_games Templates Videos
8,跑几个简单的图像识别的 DEMO
编译,安装好之后,其 DEMO 放在 / usr/local/share/OpenVC/sample/python 目录下:
注意:1,运行 opencv 的 DEMO 不要在 ssh 中运行,某些程序是需要 GUI 的;
2,opencv 的比较多的 DEMO 都需要摄像头,买不起树莓派自带的贵的,可以淘宝上随便买个 20 多块钱的免去动 USB 摄像头;
由于在 usr 目录下的 DEMO 都是只读文件,且其中少了 data 文件夹(data 文件夹是 DEMO 所需要的一些图片及视频资源),
如果直接运行的话,会报资源缺少等问题:
(cv) ➜ python python houghlines.py
This example illustrates how to use Hough Transform to find lines
Usage:
houghlines.py [<image_name>]
image argument defaults to ../data/pic1.png
Traceback (most recent call last):
File "houghlines.py", line 33, in <module>
a,b,c = lines.shape
AttributeError: 'NoneType' object has no attribute 'shape'
因此,我们将 / usr/local/share/OpenVC/sample / 文件拷贝到 Downloads/sample/,同时从 openCV 的源码文件中找到 data 文件夹,并复制到 sample 目录下:
cp -r /usr/local/share/OpenCV/samples ~/Downloads/samples
cp -r ~/opencv-3.1.0/samples/data ~/Downloads/samples/data/
(cv) ➜ samples tree -L 1 ~/Downloads/samples
/home/pi/Downloads/samples
├── data
└── python
如下是运行霍夫找直线的 DEMO 效果:
kmeans 聚类算法:(cv) ➜ python python kmeans.py
边缘检测算法:(cv) ➜ python python edge.py
模式识别算法:(cv) ➜ python python find_obj.py
运动方向检测,光流算法:(cv) ➜ python python lk_track.py
参考链接
1. Install guide: Raspberry Pi 3 + Raspbian Jessie + OpenCV 3
2. http://answers.opencv.org/question/116926/ubuntu-1610-opencv-build-fails-stdlibh-missing/
3. 直接采用 ubuntu 的方法会报 QT 缺少的错误
4. OpenCV Linux 安装 Make 出错
5. matplotlib 绘图
:: 如果您觉得不错,请推荐给更多人,帮助他们更快地解决实际问题中的坑~
@beautifulzzzz
智能硬件,物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975
来源: https://www.cnblogs.com/zjutlitao/p/8261688.html