前言

上一篇我们讲了在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. 转自知乎-wifi破解

    上点python有意思的代码. 环境准备 python2.7 pywifi模块 字典 清除系统中的任何wifi连接记录 导入模块 这里用的模块就这三个 pywifi的_wifiutil_linux.p ...

  2. hdu5353 Average

    Problem Description There are n soda sitting around a round table. soda are numbered from 1 to n and ...

  3. .NET作品集:linux下的.net mvc cms

    cms程序架构 本程序是主要是用于企业网站开发的,也可以做博客程序,程序是从之前上一篇的.net 博客程序改进过来的,主要技术由webform转成.net mvc了,由于是很早之前的项目,12年还是m ...

  4. 史上最强学生管理系统之IO版

    既上一博发布的ArrayList版本之后,新一版的IO版又来了,其实只是在上一个版本里面添加了IO流的内容,将存入更改的信息更新到了文件中而已,这个版本网上仍然很多,本人只是在某些方面稍加修改,因为自 ...

  5. CS:APP3e 深入理解计算机系统_3e ShellLab(tsh)实验

    详细的题目要求和资源可以到 http://csapp.cs.cmu.edu/3e/labs.html 或者 http://www.cs.cmu.edu/~./213/schedule.html 获取. ...

  6. Spring:Bean生命周期

    关于Bean生命周期,我在网上找了两张图: 图1: 图2: 总结起来就是: Bean构建: Bean对象创建 > @Autowired | @Resource> @PostConstruc ...

  7. Python 项目实践一(外星人入侵小游戏)第五篇

    接着上节的继续学习,在本章中,我们将结束游戏<外星人入侵>的开发.我们将添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏.我们还将修改这个游戏,使其在玩家的等级提高时加快 ...

  8. 关于使用Xcode9.0使用[UIImage imageNamed:]返回null的问题

    最近升级Xcode9.0,没少折腾,再加上iOS11出现的问题,又要适配一些奇怪的问题.这都没啥,但是如果Xcode出问题,那问题可真是难找.因为习惯的操作潜意思的告诉自己这样做是不会错的. 在Xco ...

  9. xamarin Android activity生命周期详解

    学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...

  10. ArcGIS API for JavaScript 4.3学习笔记[新] AJS4.3和AJS3.20新特性

    今天"ArcGIS极客说"公众号推送了这两个大版本的更新,吓得我赶紧撸了一篇新博客. 这里就不写代码验证了,作为新特性小节简单介绍一下!~ AJS 4.3 1. 更强大的Featu ...