前言

上一篇我们讲了在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. 进程组与会话 Linux Process Groups and Sessions

    在类Unix系统中,用户通常会跟各种相关的进程打交道.虽然在登录的时候只有一个终端进程(用户对应的登录shell ,通过这个shell启动各种程序和服务),但通常不久以后就会产生许多相关的进程,例如进 ...

  2. 4、libgdx应用框架

    (原文:http://www.libgdx.cn/topic/29/4-libgdx%E5%BA%94%E7%94%A8%E6%A1%86%E6%9E%B6) 模块 作为核心.libgdx提供了六个接 ...

  3. 指尖上的电商---(4).net开发solr

    这一节我们看下如何把查询数据放到server端存储,这里我们须要使用client工具来操作与服务端数据打交道,网上有好多基于.NET开发的SOLRclient,我们这里选择easynet.solr,非 ...

  4. mongodb 3.4 集群搭建:分片+副本集

    mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...

  5. MQTT Client library for C (MQTT客户端C语言库-paho)

    原文:http://www.eclipse.org/paho/files/mqttdoc/MQTTClient/html/index.html 来自我的CSDN博客   最近在使用Paho的MQTT客 ...

  6. Material使用07 MatGridListModule的使用

    1 MatGridListModule简介 对相似数据的展现,尤其是像是图片的展示 使用起来很像表格 官方文档:点击前往 2 MatGridListModule提供的指令 2.1 mat-grid-l ...

  7. 《About Face 3:交互设计精髓》【PDF】下载

    <About Face 3:交互设计精髓>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230384328 内容简介 全书分成3篇:第1 ...

  8. 【二十六】php之文件编程

    1.获取文件的相关信息 fopen.fstat.fclose(打开文件.获取文件相关信息.关闭文件) filesize.filectime.filemtime.fileatime(文件大小.上次cha ...

  9. 通过 JS 判断页面是否有滚动条的简单方法

    前言 最近在写插件的过程中,需要使用 JS 判断是否有滚动条,搜了一下,大致方法都差不多,但都有些啰嗦,代码不够简洁.最终通过参考不同方法,写了一个比较简单的方法.在判断滚动条的同时也需要计算滚动条的 ...

  10. qt调用simsimi api实现小黄鸡

    项目地址:https://github.com/racaljk/xiaojianji 好吧我把它命名为小贱鸡.,下面说一说他的实现. 由于官方的simsimi api需要收费,免费试用版有各种限制,所 ...