[树莓派(raspberry pi)] 02、PI3安装openCV开发环境做图像识别(详细版)
前言
上一篇我们讲了在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
参考链接
- 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
[树莓派(raspberry pi)] 02、PI3安装openCV开发环境做图像识别(详细版)的更多相关文章
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十一║Vue实战:开发环境搭建【详细版】
缘起 哈喽大家好,兜兜转转终于来到了Vue实战环节,前边的 6 篇关于Vue基础文章我刚刚简单看了看,感觉写的还是不行呀,不是很系统,所以大家可能看上去比较累,还是得抽时间去润润色,修改修改语句和样式 ...
- 在树莓派(Raspberry Pi)上编译安装更新版本的Python
Raspiban Wheezy上预装的Python3版本是3.2.3,本文将介绍升级到3.4.3的方法. 此文也适用于安装其它版本(比如最新版本)的Python. 我用的是B+型的树莓派,装的系统是2 ...
- 树莓派(raspberry pi)系统开发
[树莓派(raspberry pi)] 01.在linux环境下给树莓派安装系统及入门各种资料 [树莓派(raspberry pi)] 02.PI3安装openCV开发环境做图像识别(详细版) 出处: ...
- 树莓派(raspberry pi)学习11: 将树莓派变成一个Web服务器(转)
将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...
- 树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法
树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法 人穷,闲鱼淘了个二手的树莓派3 英国版,无奈咱也不会用,很无奈~ 安装教程百度到的差不多都可以,找个格式正常的一步一步 ...
- VLOG丨树莓派Raspberry Pi 3安装PLEX并挂载USB硬盘打造最牛的微型家庭影音服务器2018
视频介绍 树莓派3安装目前最流行的PLEX服务器,实现既能最大限度降低功耗,也能随时随地观看分享影片. 一.在树莓派下安装PLEX媒体服务器 1.在终端,将你的树莓派更新至最新 sudo apt up ...
- 如何在Raspberry Pi 3B中安装Windows 10 IoT Core
Windows 10 IoT Core简介 Windows 10 IoT是微软专门为物联网生态打造的操作系统,Windows 10 IoT Core则是Windows 10 IoT 操作系统的核心版本 ...
- 树莓派(Raspberry Pi 3) - 系统烧录及xshell连接
树莓派(Raspberry pi)是一块集成度极高的ARM开发板,不仅包含了HDMI,RCA,CSI,HDMI,GPIO等端口,还支持蓝牙以及无线通信.由于 Raspberry Pi 几乎是为 Lin ...
- 在 树莓派(Raspberry PI) 中使用 Docker 运行 MySQL
在 树莓派(Raspberry PI) 中使用 Docker 运行 MySQL 本文主要利用 biarms 提供的 Dockerfile 进行安装. 笔者最新发现! MySQL 5.7 Docker ...
随机推荐
- 进程组与会话 Linux Process Groups and Sessions
在类Unix系统中,用户通常会跟各种相关的进程打交道.虽然在登录的时候只有一个终端进程(用户对应的登录shell ,通过这个shell启动各种程序和服务),但通常不久以后就会产生许多相关的进程,例如进 ...
- 4、libgdx应用框架
(原文:http://www.libgdx.cn/topic/29/4-libgdx%E5%BA%94%E7%94%A8%E6%A1%86%E6%9E%B6) 模块 作为核心.libgdx提供了六个接 ...
- 指尖上的电商---(4).net开发solr
这一节我们看下如何把查询数据放到server端存储,这里我们须要使用client工具来操作与服务端数据打交道,网上有好多基于.NET开发的SOLRclient,我们这里选择easynet.solr,非 ...
- mongodb 3.4 集群搭建:分片+副本集
mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...
- MQTT Client library for C (MQTT客户端C语言库-paho)
原文:http://www.eclipse.org/paho/files/mqttdoc/MQTTClient/html/index.html 来自我的CSDN博客 最近在使用Paho的MQTT客 ...
- Material使用07 MatGridListModule的使用
1 MatGridListModule简介 对相似数据的展现,尤其是像是图片的展示 使用起来很像表格 官方文档:点击前往 2 MatGridListModule提供的指令 2.1 mat-grid-l ...
- 《About Face 3:交互设计精髓》【PDF】下载
<About Face 3:交互设计精髓>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230384328 内容简介 全书分成3篇:第1 ...
- 【二十六】php之文件编程
1.获取文件的相关信息 fopen.fstat.fclose(打开文件.获取文件相关信息.关闭文件) filesize.filectime.filemtime.fileatime(文件大小.上次cha ...
- 通过 JS 判断页面是否有滚动条的简单方法
前言 最近在写插件的过程中,需要使用 JS 判断是否有滚动条,搜了一下,大致方法都差不多,但都有些啰嗦,代码不够简洁.最终通过参考不同方法,写了一个比较简单的方法.在判断滚动条的同时也需要计算滚动条的 ...
- qt调用simsimi api实现小黄鸡
项目地址:https://github.com/racaljk/xiaojianji 好吧我把它命名为小贱鸡.,下面说一说他的实现. 由于官方的simsimi api需要收费,免费试用版有各种限制,所 ...