[翻译]Python 2.7 和 Python 3+ 的OpenCV 3.0 安装教程

这是在PyImageSearchAdrian Rosebrock写的一篇在 Raspberry Pi 上安装 OpenCV 的教程, 感觉写的还蛮详细的, 当然文章里面的操作不只适用 Raspberry Pi, Debian 系应该能直接用下面的 shell 命令来安装.
如果想尽快安装,直接看shell代码,文字不用看


老实说, 我很喜欢用 Raspberry Pi 来做 Computer Vision 的教学工作. 对于全世界做 CV 的老师, 学生, 程序员来说, Raspberry Pi 可能是最好的工具, 有之一的.

这是一块很便宜的开发板, 虽然便宜但不能代表它不能做很多有趣的事. 对于爱好者和车库里的黑客来说,这玩意还是超级赞的. 如果你做项目, 能够在一块很便宜又不失可靠的硬件板子把 CV 的算法跑起来, 是不是很屌? 这玩意儿在研究学术界也是被广泛推崇和应用的. 鉴于它这么低廉的价格, 我们完全可以用一批 Raspberry Pi, 部署一个集群来做 CV 的研究.

由于它这些牛逼的特性, 又能在各个领域一显身手, 肯定一得很大一批人的芳心. 难怪我 在 PyImageSearch 上的这篇简明教程: installing OpenCV and Python on your Raspberry Pi 2 and B+, 能一直保持浏览数第一.

估计那篇文章好景不长, 我现在这篇文章可能会勇夺桂冠, 跃居榜首.所谓后来者居上嘛.

下面我就来一步步地教大家怎么在树莓派给 Python 2.7Python 3.+ 安装 Open CV 3.0(发行).

跟着我一步步来操作, 最后你肯定 在树莓派上 安装好了 Open CV 3.0 库, 只是 Python 3+Python 2.7+ 的区别而已. 这绝逼是一个很刺激的教程, 为啥呢? Open CV 库目前是依赖 Python 2.7 的, 不过对于 Open CV 3.0 我要发大招让它也能在 我的 Python 3+ 上妥妥的跑起来.

你肯定在PyImageSearch上的某个阴暗的角落里, 看到过 在树莓派上Open CV 来做的一些牛逼项目, 比如: automated home surveillance and security system ,用的是 Python + OpenCV + Dropbox + Raspberry Pi 2:

Figure 1: 智能家居安防系统
Figure 1: 智能家居安防系统

看到这些是不是内心激动难耐, 那么跟着我接着干吧.


在 Raspberry Pi 2 上 Python 2.7+ 和 Python 3+ 安装OpenCV 3.0

前方高能!!! 安装,大家可以直接看shell命令
下面会详细地介绍如何 给Pi 2 安装 Open CV 3.0 for Python 2.7+Python 3+ . Pi B+ 也是适用的哦! 不过, 我还是推荐大家用 Pi 2, 毕竟新出来的, 性能提升了不少, 用来做 CV 不会觉得很蛋疼.

为了让教程简介明了, 我把具体内容大致分为了四个步骤, 大家一步步来:

  • 步骤一: 安装依赖. 不管你是用 Python 2.7+ 还是 Python 3+, 你都需要用 apt-get 来安装 安装Open CV 所需要的包,库等依赖.

  • 步骤二: 编译 Python 2.7+ 版的 Open CV. 如果你准备用 Python 2.7 那么这一步你肯定要做的, 做完之后呢, 你就可以跳过步骤三, 直奔步骤四.

  • 步骤三: 编译 Python 3+ 版的 Open CV. 同样地, 你准备用 Python 3+ 的话, 步骤二是不用做的, 直接从步骤一来到这里.

  • 步骤四: 确认安装成功. 在你安装完成之后, 这一步骤就来确认 Open CV是否安装成功, 能不能正常地工作.


Python 2.7+ 还是 Python 3+?

在开始正式安装之前, 你需要搞清楚你到底是要安装哪一个版本的.

反正两个版本各有利弊吧. 你自己选择一个你看着顺眼的, 这个真没有什么特别的不同. 如果你觉得用着Python 3+舒服, 你就选择 Python 3+, Python 2.7+ 用习惯了, 你就装 Python 2.7+ 版本的. 但是如果你平时用 Python 来做一些CS相关的开发, 譬如: Machine Learning, Data Mining, NLP, 或者 Deep Learning, 你可能会更倾向于选择 Python 2.7, 至少目前是这样的情况. 这些方面的大部分库和包都是 Python 2.7+的, 譬如: NumPy, Scipyscikit-learn, 虽然社区里面都在努力地向 Python 3+ 迁移, 但是有那么一部分还是只能在 Python 2.7+下稳定工作的 .


步骤一: 安装包依赖

下面我们就开始 Open CV 安装的第一步吧.

耗时:9m 5s

sudo apt-get update
sudo apt-get upgrade
sudo rpi-update

下面我们安装从源码构建 Open CV 的相关工具:

耗时: 43s

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

加载不同格式图片的工具包:

**耗时: ** 27s

sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev

视频流 I/O 包

**耗时: ** 26s

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

GTK, 给图形界面操作用的

**耗时: ** 2m 20s

sudo apt-get install libgtk2.0-dev

安装下面的包可以在 Open CV 里面优化各种函数

**耗时: **46s

sudo apt-get install libatlas-base-dev gfortran

现在, 我们的准备工作完成了. 接下来我们从 Github 上把 Open CV的源码 pull 下来, 然后切换到新的版本 3.0.0.

**耗时: ** 8m 34s
译者注: 前面时间还基本大差不差, 这里国内拉下来, 得要不少时间, 至少我这里的网络是这样的.

cd ~ /*译者注: 这一步文件夹自己选, 不一定非得放在 home, 我是强迫症患者, 喜欢到 ~/Downloads 下*/
git clone https://github.com/Itseez/opencv.git
cd opencv
git checkout 3.0.0

要完整地安装 OpenCV 3.0 的话, 最好把 opencv_contrib 也拉下来

耗时:1m 7s

cd ~ /*这一步文件夹自己选, 不一定非得放在 home, 我是强迫症患者, 喜欢到 ~/Downloads 下*/
git clone https://github.com/Itseez/opencv_contrib.git
cd opencv_contrib
git checkout 3.0.0

现在我们到了人生的十字路口, 啊, 不对, 是选择你自己的真命天子, 又错了, 是某种 Open CV 来安装.

继续步骤二, 你会得到 Python 2.7+ 版的, 直接跳到步骤三就是 Python 3+ 版.随便你自己怎么选, 不过你得考虑清楚, 请谨慎选择, 没有机会给你反悔的哦.

当然, 是有方法让二者共存的, 不过不是这篇文章的范畴啦, 以后我会再写一篇, 教你们怎么左拥右抱.


步骤二: 在 Python 2.7+ 下编译 Open CV

安装编译所需要的头文件, 也就是 Python 的开发包啦

耗时: 1m 20s

sudo apt-get install python2.7-dev

安装 Python2.7+ 兼容的包管理工具: pip

耗时: 33s

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

和我们之前在安装 OpenCV 2.4.X 的教程里面一样, 我们利用 virtualenvvirtualenvwrapper 来给我们不同的 Python 项目创建分离的 Python 环境.不过现在安装 Open CV, virtualenvvirtualenvwrapper 不是必须要安装的.
然而,它是标准的 Python 开发环境, 我推荐你们去安装使用, 后面我会假设你们都已经安装使用它了.

pip 可以很简单地完成安装

耗时: 17s

sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip

接下来, 我们需要设置环境变量, 随便用一个你们自己喜欢的编辑器, 来打开 ~/.profile,如果不存在就新建一个, 然后把下面的几行添加到文件末尾

# virtualenv and virtualenvwrapper
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

现在 .profile文件已经更新好了, 下一步就是要来加载它. 你需要重新打开一个终端, 或者简单地使用 source 这个命令

source ~/.profile

现在我们要开创建一个做 CV 工作的虚拟环境 cv3(随便命名) 了

耗时: 19s

mkvirtualenv cv3

如果你在之后需要访问你的虚拟环境, 特别是你登出或者重启你的机器之后, 你可能需要 source 一下你的 ~/.profile. (译者注: 当然, 你可以把刚才添加到 ~./profile 文件中的内容, 添加到 /etc/profile 中去, 做一个全局设置, 并不推荐这么做.) 然后用 workon 命令.

workon cv3

之后你的 shell 就只能使用和设置在 cv3 这个虚拟环境中的包了.

继续, 我们其实只依赖一个 Python 库: Numpy, 请确保在你的虚拟环境 cv3 中已经安装 numpy.

耗时: 13m 17s
译者注: 这个包感觉我直接安装的时候要不了这么久, 可能是虚拟环境会慢点?

pip install numpy

在我们用了 sudo pip 之后, .cache 文件价会报权限错误, 这是我们只需要把 .cache/pip 删掉, 然后重新安装 numpy.

sudo rm -rf ~/.cache/pip/
pip install numpy

哈哈, 完成啦, 你现在应该在你的虚拟环境 cv3 中完成了 numpy 的安装.试试和我下面是不是一样的.

Figure 2: 完成 numpy 的安装
Figure 2: 完成 numpy 的安装

注意: 这些操作可能会非常的耗时间, 可能在完成一项安装之后, 关机或这登出了, 在你下次继续的时候一定记得要切换至你的虚拟环境, 不然你的继续安装和你之前的操作不是在同一个环境下,或导致你后面的操作出现错误.

我在说一句, 在你继续下一个命令前, 千万千万要确保你是在你的虚拟环境下, 我的本例子中是: cv3.

workon cv3

现在你可以用 cmake 来设置编译了

cd ~/opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
 -D CMAKE_INSTALL_PREFIX=/usr/local \
 -D INSTALL_C_EXAMPLES=ON \
 -D INSTALL_PYTHON_EXAMPLES=ON \
 -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
 -D BUILD_EXAMPLES=ON ..

CMake 大概会花 30s, 在它完成之后, 当然你得保证它没有报错, 你要检查下1输出的内容, 特别是 Python 2 这个部分.

译者注:
这里我们国内用户很可能会报错, 原因是 ippicv linux 这个包下载速度很慢, 导致下载未完成连接超时.解决的办法是手动去下载这个文件: ippicv linux .

Figure 3: CMake 正常输出
Figure 3: CMake 正常输出

这里的关键点就是要确保, CMake 已经正确地关联 Python 2.7numpy.
其次, 要注意下 package path 的配置, 这个文件夹是存放 Open CV 3.0 链接及其编译.从那我们可以看到我们的 Open CV 3.0 链接 存放在 /usr/local/lib/python2.7/site-packages.

下面我们就可以正式地编译 Open CV 3.0

耗时: 65m 33s

make -j4 /*译者注: 这里的 4 是对于 Pi2 上的四核, 如果你电脑6核, 就可以是 -j6*/

编译没有错误, 现在就可以安装了

sudo make install
sudo ldconfig

现在 Open CV 3.0 已经成功地安装在了你的机器上, 下面只需要搞清楚它在哪.

还记得上面我提到的 package path 吗?

看下这个文件夹, 我的是 /usr/local/lib/python2.7/site-packages/.

Figure 4: Open CV 3.0 已经成功地安装
Figure 4: Open CV 3.0 已经成功地安装

你应该看到 cv2.so, 这是我们真正的 Python 需要的库. 下面两步是把 cv2.so 链接到我们的虚拟环境 cv3 中去

cd ~/.virtualenvs/cv3/lib/python2.7/site-packages/
ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so

完啦, 你现在已经把 Open CV 3.0 安装好了, 到步骤四去, 检查一下是不是安装正确.


步骤三: 在 Python 3+ 下编译 Open CV

待续...


步骤四: 确认 Open CV 3.0 安装成功

在我们结束教程之前, 你最好还是检查一下是不是安装正确了. 打开一个终端, 进入你的虚拟环境, 进去 Python shell, 导入 OpenCV

新建文件 test.py, 输入一下内容

import cv2
if __name__ == '__main__':
    print(cv2.__version__)
workon cv
python test.py

如果输出 '3.0.0', 就 OK 啦!

Figure 5: 输出成功
Figure 5: 输出成功

总结

这篇文章中, 我已经详细地介绍如何在 Python 2.7+Python 3+ 下安装 Open CV 3.0了. 我安装时每一个步骤话的时间也给出以便大家参考.只要记住一点, 就是在你重启或者重登陆到机器中时, 你得先用 workon 切换至你的虚拟工作环境.

译者:

一开始, 发现这篇文章挺使用的,也还蛮简单, 就想着话点时间翻译下, 以便查阅. 文章看着很长其实废话很多, 有用的也就那些代码段, 如果大家只是为了快速安装,直接复制代码就好了. 不过, 老外的教程都是这样, 讲的很细, 有些重点还不止一遍两遍的提醒.这足以见得他们做事蛮认真负责的. 这文章简直太详细了, 到目前已经花了将近5个小时了, 所以我把第三步骤暂时跳过了, 等后面有时间再补上.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容