前言

上一篇我们讲了在linux环境下给树莓派安装系统及入门各种资料 ,今天我们更进一步,尝试在PI3上安装openCV开发环境。

博主在做的过程中主要参考一个国外小哥的文章(见最后链接1),不过其教程中有一个地方稍微有点问题,导致我入坑好久!这里也会着重说明下。

1、Expand filesystem

新安装系统之后,首要的工作就是扩大文件系统。因为,用SD卡安装完系统后一大部分空间实际是未被分配的:

sudo raspi-config

选择7高级,然后选择“1. Expand File System”,之后点击finish,然后reboot 。

 

sudo reboot

之后,你可以用df -h命令确认文件系统是否被扩大:(如下,我的SD卡为闪迪的32G内存卡)

➜  ~  df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G .2G 22G % /
devtmpfs 466M 466M % /dev
tmpfs 470M 470M % /dev/shm
tmpfs 470M 6.4M 464M % /run
tmpfs 5.0M .0K 5.0M % /run/lock
tmpfs 470M 470M % /sys/fs/cgroup
/dev/mmcblk0p1 41M 21M 21M % /boot
tmpfs 94M 94M % /run/user/

2、Install dependencies

接下来是安装openCV的依赖,下面步骤有点多,大家千万别漏了其中一两个(我操作的时候就把ibjpeg-dev libtiff5-dev libjasper-dev libpng12-dev给忘了,结果又得花几个小时重新编译一遍!!!)

2.1 更新

$ sudo apt-get update
$ sudo apt-get upgrade

2.2 安装CMake等编译openCV源码的工具

$ sudo apt-get install build-essential cmake pkg-config

2.3 安装几种常见格式的图像操作的包,方便我们能从硬盘上读取不同格式的图像(有个同学建议下面的libpng12-dev和后面的gtk2.0会冲突,改成libpng-dev就合适,如果改成libpng-dev,系统好像是会自动匹配版本。由于太忙没有验证,先贴这里,供大家参考选择)

$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

2.4  同样的,我们也需要视频操作的包

$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev

2.5 openCV用于图像/GUI展示的功能依赖highgui模块,为了编译highgui,我们需要安装GTK development library

$ sudo apt-get install libgtk2.-dev

2.6 安装额外的一些依赖

$ sudo apt-get install libatlas-base-dev gfortran

^-^ 记得看一下上面几个安装过程有没有少哦

2.7 接下来还需要安装python dev

sudo apt-get install python2.-dev python3-dev

3、Download the OpenCV source code

下载并解压3.1.0版本的源码:

$ cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
$ unzip opencv.zip

为了安装完整的openCV3,体验新的features,还需要下载并解压 opencv_contrib(注意和opencv版本保持一致):

$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
$ unzip opencv_contrib.zip

4、准备python环境

4.1 安装python包管理器:

$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py

4.2 安装python虚拟环境virtualenv virtualenvwrapper

首先说明下为什么要装这两个包:

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./
$ 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./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./site-packages/
total
-rw-r--r-- root staff Mar : cv2.cpython-34m.so

我们需要将cv2.cpython-34m.so重命名为cv2.so:

$ cd /usr/local/lib/python3./site-packages/
$ sudo mv cv2.cpython-34m.so cv2.so

然后需要将python虚拟环境中的cv2.so链接到上面刚被改名为cv2.so的文件上:

$ cd ~/.virtualenvs/cv/lib/python3./site-packages/
$ ln -s /usr/local/lib/python3./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 , 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./samples/data ~/Downloads/samples/data/
(cv) ➜ samples tree -L ~/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

参考链接

:: 如果您觉得不错,请推荐给更多人,帮助他们更快地解决实际问题中的坑~


@beautifulzzzz
智能硬件、物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975

[树莓派(raspberry pi)] 02、PI3安装openCV开发环境做图像识别(详细版)的更多相关文章

  1. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十一║Vue实战:开发环境搭建【详细版】

    缘起 哈喽大家好,兜兜转转终于来到了Vue实战环节,前边的 6 篇关于Vue基础文章我刚刚简单看了看,感觉写的还是不行呀,不是很系统,所以大家可能看上去比较累,还是得抽时间去润润色,修改修改语句和样式 ...

  2. 在树莓派(Raspberry Pi)上编译安装更新版本的Python

    Raspiban Wheezy上预装的Python3版本是3.2.3,本文将介绍升级到3.4.3的方法. 此文也适用于安装其它版本(比如最新版本)的Python. 我用的是B+型的树莓派,装的系统是2 ...

  3. 树莓派(raspberry pi)系统开发

    [树莓派(raspberry pi)] 01.在linux环境下给树莓派安装系统及入门各种资料 [树莓派(raspberry pi)] 02.PI3安装openCV开发环境做图像识别(详细版) 出处: ...

  4. 树莓派(raspberry pi)学习11: 将树莓派变成一个Web服务器(转)

    将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...

  5. 树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法

    树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法 人穷,闲鱼淘了个二手的树莓派3 英国版,无奈咱也不会用,很无奈~ 安装教程百度到的差不多都可以,找个格式正常的一步一步 ...

  6. VLOG丨树莓派Raspberry Pi 3安装PLEX并挂载USB硬盘打造最牛的微型家庭影音服务器2018

    视频介绍 树莓派3安装目前最流行的PLEX服务器,实现既能最大限度降低功耗,也能随时随地观看分享影片. 一.在树莓派下安装PLEX媒体服务器 1.在终端,将你的树莓派更新至最新 sudo apt up ...

  7. 如何在Raspberry Pi 3B中安装Windows 10 IoT Core

    Windows 10 IoT Core简介 Windows 10 IoT是微软专门为物联网生态打造的操作系统,Windows 10 IoT Core则是Windows 10 IoT 操作系统的核心版本 ...

  8. 树莓派(Raspberry Pi 3) - 系统烧录及xshell连接

    树莓派(Raspberry pi)是一块集成度极高的ARM开发板,不仅包含了HDMI,RCA,CSI,HDMI,GPIO等端口,还支持蓝牙以及无线通信.由于 Raspberry Pi 几乎是为 Lin ...

  9. 在 树莓派(Raspberry PI) 中使用 Docker 运行 MySQL

    在 树莓派(Raspberry PI) 中使用 Docker 运行 MySQL 本文主要利用 biarms 提供的 Dockerfile 进行安装. 笔者最新发现! MySQL 5.7 Docker ...

随机推荐

  1. Map Task内部实现分析

    上篇我刚刚学习完.Spilt的过程,还算比較简单的了,接下来学习的就是Map操作的过程了,Map和Reduce一样.是整个MapReduce的重要内容,所以.这一篇,我会好好的讲讲里面的内部实现过程. ...

  2. 单源最短路径 dijkstra算法实现

    本文记录一下dijkstra算法的实现,图用邻接矩阵表示,假设图为无向图.而且连通,有向图,不连通图的做法相似. 算法简述: 首先确定"单源"的源.假设是第0个顶点. 维护三个数组 ...

  3. Java中用Apache POI生成excel和word文档

    概述: 近期在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能.最后决定用Apache POI来完毕该项功能.本文就项目实现过程中的一些思路与代码与大家共享.同一时候.也作为自 ...

  4. myeclipse tomcat java.lang.OutOfMemoryError: PermGen space错误的解决方法

    错误代码: java.lang.OutOfMemoryError: PermGen space 原因分析: myeclipse或tomcat的内容分配的不够用,启动失败 解决方法: 1.找到tomca ...

  5. IDEA使用有道翻译插件

    使用IDEA编写代码或者查看源码的时候有时候需要使用的翻译功能,虽然已经有繁多的翻译服务提供了桌面版的软件,但是并不大适合使用在阅读或者编写代码这个场景.IDEA丰富的插件库为我们提供了一些翻译插件, ...

  6. 将IDEA maven项目中src源代码下的xml等资源文件编译进classes文件夹

    如果使用的是Eclipse,Eclipse的src目录下的xml等资源文件在编译的时候会自动打包进输出到classes文件夹.Hibernate和Spring有时会将配置文件放置在src目录下,编译后 ...

  7. mysql连接错误问题

    ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server 解决方法:1. 改表法.可能是你的帐号不允许 ...

  8. 解决win7中防火墙的0x6D9问题的方法

    问题: 打开windows防火墙管理单元时出错:代码0x6d9" 解决方法: 下一步-->下一步-->完成.

  9. n年前,我没钱但年轻,我怕n年后我老时,还是一无所成——2017我的收获和反思

    记得当年我刚从学校里出来时,应该和现在的95后差不多,当时还是很惶恐的,怕找不到工作,怕无法挣到足够的钱买房子支撑家庭,(当然还有其它的担心点),却唯独没意识到自己拥有着最宝贵的财富:年轻. 年轻意味 ...

  10. C#中&与&&的区别

    c#&是什么意思? 看过一些文章,关于这个的简单而容易被忽略的语法,说的总有点瑕疵. 贴代码15秒之内应该能知道c#中一个&和两个&&的区别,开始计数了........ ...