本博客为翻译博客,且使用的是谷歌翻译,原文地址如下:https://www.pyimagesearch.com/2018/09/19/pip-install-opencv/
前言
最近想要用树莓派+树莓派摄像头+opencv做些事情,一开始用的opencv2(因为安装方便,其实是网上资料丰富且成熟)。但发现用opencv2做人脸识别的时候,延时很高。在网上看了看说opencv3的效率比opencv2要高一些,就决定试试。找了半天只找到几个源码安装的教程(而且基本上是翻译或参考Adrian Rosebrock写的博客),按照教程在编译的时候失败了...
[ 95%] Building CXX object modules/stitching/CMakeFiles/opencv_stitching_pch_dephelp.dir/opencv_stitching_pch_dephelp.cxx.o
In file included from /home/pi/opencv-3.3.0/modules/stitching/include/opencv2/stitching.hpp:49:0,
from /home/pi/opencv-3.3.0/modules/stitching/src/precomp.hpp:59,
from /home/pi/opencv-3.3.0/build/modules/stitching/opencv_stitching_pch_dephelp.cxx:1:
/home/pi/opencv-3.3.0/modules/stitching/include/opencv2/stitching/detail/matchers.hpp:52:42: fatal error: opencv2/xfeatures2d/cuda.hpp: 没有那个文件或目录
# include "opencv2/xfeatures2d/cuda.hpp"
^
compilation terminated.
百度了半天也没有解决,最终在Adrian Rosebrock的博客下找到了解决办法。然后就有了下面的这篇翻译博客。想想也是都9102年了,怎么会没有方便的安装方式呢。不过百度的绝大部分都是源码安装的,我也是很无奈。国内二进制安装会因为网速问题失败,目前我也没有找到好的办法。只能多试几次了。
如何在Raspberry Pi上安装OpenCV
在这篇文章的前面我提到安装OpenCV的一个缺点是你没有对编译本身的任何控制 - 二进制文件是为你预先构建的,虽然很好,但也意味着你不能包含任何额外的优化。
对于Raspberry Pi,我们很幸运。
Dave Jones(picamera Python模块的创建者 )和Raspberry Pi社区的Ben Nuttall运行piwheels.org,这是一个Python包存储库,为Raspberry Pi 提供ARM轮子(即预编译的二进制包)。
使用PiWheels,您将能够在几秒钟内完成安装OpenCV(对于可能需要很长时间编译的其他Python库也是如此,包括NumPy,SciPy,scikit-learn等)。
那么如何指示pip命令使用PiWheels?
简短的回答是“没什么!”
如果您正在使用Raspbian Stretch,您会很高兴地知道pip命令会在检查PyPI 之前检查PiWheels是否有预编译的二进制文件,从而使您的Pi能够节省大量CPU周期(并且您需要一堆安装时间) )。
此外,当Ben和Dave为PiWheels整合OpenCV二进制文件时,他们问我应该使用哪些指令 - 我建议我为Raspberry Pi安装优化的OpenCV - 这正是他们遵循的指令!
如果您最终使用pip在Raspberry Pi上安装OpenCV,请放心,您正在使用优化版本。
让我们开始学习如何在我们的Raspberry Pi上安装OpenCV。
在Raspberry Pi上安装必备组件
Raspberry Pi要求您在开始之前安装一些系统软件包:
pip install opencv
Shell
1 2 3 4 | $ sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-100 $ sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 $ sudo apt-get install libatlas-base-dev $ sudo apt-get install libjasper-dev |
在你的Raspberry Pi上安装pip
Python包管理器“pip”可以通过wget获得:
pip install opencv
Shell
1 2 | $ wget https://bootstrap.pypa.io/get-pip.py $ sudo python3 get-pip.py |
现在您有两个选择:
- 将OpenCV安装到您的全局Python 站点- Raspberry Pi上的软件包
- 将OpenCV安装到Raspberry Pi上的虚拟环境中
选项A:使用pip将OpenCV安装到Raspberry Pi系统
如果您希望能够在隔离环境中使用不同版本的OpenCV,我不建议使用此选项。
但是很多人只为一个目的/项目部署他们的Raspberry Pis,并且不需要虚拟环境。
话虽如此,如果您以后改变主意并希望使用虚拟环境,清理起来相当混乱,因此我建议您跳过此选项并按照选项B进行操作。
要在Raspberry Pi系统上安装OpenCV,请务必使用sudo:
pip install opencv
Shell
1 | $ sudo pip install opencv-contrib-python |
只需几秒钟,OpenCV就可以使用Raspberry Pi的站点包以及您可能安装的任何其他软件包。
选项B:在Raspberry Pi上使用pip将OpenCV安装到虚拟环境中
如果你的Raspberry Pi有多种用途(或者如果你像我一样,并且不断测试各种软件版本的博客文章之间的代码兼容性?),那么虚拟环境肯定是要走的路。
以下是如何安装virtualenv和virtualenvwrapper,我用它来完成它的工具:
pip install opencv
Shell
1 | $ pip install virtualenv virtualenvwrapper |
然后你需要在〜/ .profile中添加以下行 。使用nano , vim 或 emacs打开文件 ,并将这些行追加到末尾:
pip install opencv
Shell
1 2 3 4 | # virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh |
注意:请注意,对于Raspberry Pi,我们正在编辑〜/ .profile ... not ~ /.bash_profile (macOS)或 〜/ .bashrc (Ubuntu)。
保存文件。然后在您的终端中“获取它”:
pip install opencv
Shell
1 | $ source ~/.profile |
将打印终端输出,表明virtualenvwrapper已准备就绪。务必检查错误。
您现在可以访问新的终端命令:
- 使用mkvirtualenv创建环境 。
- 使用workon激活环境(或切换到另一个环境) 。
- 使用deactivate取消激活环境 。
- 使用rmvirtualenv删除环境 。
- 一定要阅读文档!
要 创建一个容纳OpenCV和您安装的其他软件包的Python 3虚拟环境,只需使用mkvirtualenv和以下命令:
pip install opencv
Shell
1 | $ mkvirtualenv cv -p python3 |
现在您有一个名为cv的虚拟环境 。您可以随时通过以下方式激活它:
pip install opencv
Shell
1 | $ workon cv |
现在只需翻转一下手腕,就可以将OpenCV安装到 cv中 :
pip install opencv
Shell
1 | $ pip install opencv-contrib-python |
这就是使用PiWheels的全部内容!
我敢打赌你正在使用PiCamera作为成像传感器。您可以使用以下命令安装Python模块(只需记下引号):
pip install opencv
Shell
1 | $ pip install "picamera[array]" |
测试我们的OpenCV pip安装
您是否知道OpenCV的3.3+具有可以运行深度学习模型的DNN模块?
您可能会感到惊讶,但您的OpenCV版本现在可以开箱即用,几乎没有其他软件。
我们将使用MobileNet单击检测器在视频中执行对象检测。
这是您首先需要安装的(假设一个 cv 虚拟环境):
pip install opencv
Python
1 2 3 | $ workon cv $ pip install imutils $ pip install "picamera[array]" # if you're using a Raspberry Pi |
现在通过打开Python shell仔细检查您是否已准备好所有软件:
pip install opencv
Shell
1 2 3 4 5 6 7 8 9 10 | $ workon cv $ python Python 3.6.3 (default, Oct 4 2017, 06:09:15) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.37)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '4.0.1' >>> import imutils >>> |
Raspberry Pi将展示不同版本的Python 3,这是预期的。
现在是下载代码的时候了。
请务必使用此博客文章的“下载”部分下载源代码+预先培训的MobileNet SSD神经网络。
从那里,执行以下命令:
pip install opencv
Shell
1 2 3 4 5 6 7 | $ python real_time_object_detection.py \ --prototxt MobileNetSSD_deploy.prototxt.txt \ --model MobileNetSSD_deploy.caffemodel [INFO] loading model... [INFO] starting video stream... [INFO] elapsed time: 55.07 [INFO] approx. FPS: 6.54 |
图X:使用深度学习和OpenCV进行实时对象检测的简短剪辑
我正在使用Macbook Pro。在笔记本电脑上使用CPU时,帧速率为6 FPS非常好。
Raspberry Pis资源紧张,因此我们可以利用一些技巧来创造更高FPS的幻觉。如果您使用的是 Raspberry Pi,请执行以下命令:
pip install opencv
Shell
1 2 3 4 5 6 7 8 | $ python pi_object_detection.py \ --prototxt MobileNetSSD_deploy.prototxt.txt \ --model MobileNetSSD_deploy.caffemodel [INFO] loading model... [INFO] starting process... [INFO] starting video stream... [INFO] elapsed time: 48.55 [INFO] approx. FPS: 27.83 |
在这里,我在Raspberry Pi上创建了快速27 FPS的幻觉,而后台的神经网络只能处理0.9 FPS。
这怎么可能?
线程和队列。
它有点先进,但如果您阅读原始博客文章 (对于Raspberry Pi),您将理解该过程。此外,您将能够给您的朋友和家人留下深刻印象。
使用pip安装OpenCV时需要注意什么
首先,并非所有Python发行版都具有可以进行pip安装的OpenCV版本。
较新版本的Python和较新的操作系统(更不用说已经达到其使用寿命的旧版本)可能没有准备好进入PyPI存储库的OpenCV版本,因为开源社区没有机会发布这样的版本呢。
在这些情况下,您可以:
其次,包括Anaconda用户在内的一些读者报告了使用cv2等GUI功能的问题 。imshow 和cv2 。waitKey 。
在这些场景中,OpenCV会错误地说它没有使用GTK或QT支持进行编译。
简单的说:
第三,我知道读者 在他们的终端,Jupyter笔记本或Python shell中执行import cv2 时报告了问题 - 这不是OpenCV的pip安装问题。
在大多数情况下,但不是所有情况下,错误与您实际安装的OpenCV无关。
相反,您更了解某些组合的问题:
- 已执行的命令以及如何正确使用它们。
- 认为命令正确执行但导致错误。
- 无法访问您的Python虚拟环境(如果您使用的话)。
在报告导入cv2 绑定的问题之前,您需要仔细检查命令,重复这些步骤并仔细检查输出 。
最后,将通过pip安装的OpenCV版本 不包括“非自由”算法,如SIFT,SURF和其他专利算法。如果您不需要使用专利算法,那么您就是金色的。否则,我建议您通过我的系统安装教程之一从源代码编译OpenCV 。
摘要
在今天的教程中,您学习了如何在操作系统上安装OpenCV。
具体来说,我们介绍了如何通过pip在Ubuntu,macOS和Raspberry Pi上安装OpenCV。
虽然通过pip安装OpenCV可能是让您入门的最简单方法,但请记住,您可能会遇到其他问题。
如果您发现自己在使用OpenCV的pip安装时遇到错误或问题,请务必参阅此博客文章中的“使用pip安装OpenCV时需要注意的事项”部分。
我希望你喜欢今天的教程!