购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 选择和使用合适的安装工具

根据操作系统以及想要的配置,我们可以自由选择各种安装工具。

无论选择哪种操作系统,Python都提供了对安装开发环境非常有用的一些内置工具,包括名为pip的包管理器以及名为venv的虚拟环境管理器。本章的一些说明主要针对pip,如果想了解venv,请参考https://docs.python.org/3/library/venv.html处的官方Python文档。

如果你打算维护多个可能具有冲突依赖关系的Python项目,那么应该考虑使用venv——例如,依赖于OpenCV不同版本的项目。venv的每个虚拟环境都有自己的一套安装库,我们可以在这些环境之间切换,无须重新安装任何东西。在给定的虚拟环境中,可以使用pip安装库,在某些情况下也可以使用其他工具安装库。

我们来对可用于Windows、macOS、Ubuntu以及其他类UNIX系统的安装工具进行概述。

1.3.1 在Windows上安装

Windows没有预先安装Python。但是,Python提供了一个安装向导和一个名为pip的包管理器,可以让我们轻松安装现成的NumPy、SciPy和OpenCV。或者,我们可以从源代码构建OpenCV,以便启用非标准特性,比如通过OpenNI 2支持深度摄像头。OpenCV的构建系统使用CMake来配置系统并使用Visual Studio进行编译。

在做其他事情之前,首先来安装Python。访问https://www.python.org/getit/下载并运行Python 3.8安装程序。尽管OpenCV也可以使用32位的Python,但是你可能想要64位的Python安装程序。

一旦安装了Python,就可以使用pip安装NumPy和SciPy了。打开命令提示符,运行下面的命令:

现在,我们必须确定我们是需要一个现成的OpenCV(不支持深度摄像头)还是需要一个自定义OpenCV(支持深度摄像头)。接下来将介绍这些备选方案。

1.使用现成的OpenCV包

OpenCV包含opencv_contrib模块,可以作为一个pip包来安装。这和运行以下命令一样简单:

如果希望OpenCV安装包含非免费的内容(如专利算法),那么可以运行以下命令:

如果打算发布依赖于OpenCV非免费内容的软件,你应该自己调研适用于特定国家和特定用例的专利和许可问题。OpenCV的非免费内容包括专利SIFT和SURF算法的实现,这些内容将在第6章中进行介绍。

你可能会发现其中一个pip包提供了你目前想要的所有OpenCV特性。另外,如果你打算使用深度摄像头,或者想要了解OpenCV自定义构建的一般过程,那么不应该安装OpenCV的pip包,而应该从源代码构建OpenCV。

2.从源代码构建OpenCV

如果希望支持深度摄像头,那么还应该安装OpenNI 2,它是带有安装向导的一组预编译二进制文件。然后,我们必须使用CMake和Visual Studio从源代码构建OpenCV。

要获取OpenNI 2,请访问https://structure.io/openni,并根据Windows和系统架构(x64或者x86)下载最新版本的压缩文件。将其解压,得到一个安装程序文件,如OpenNI-Windows-x64-2.2.msi。运行安装程序。

现在,我们来安装Visual Studio。要构建OpenCV 4,我们需要Visual Studio 2015或者更高版本。如果还没有合适的版本,可访问https://visualstudio.microsoft.com/downloads/,下载并运行下面列出的安装程序之一:

·免费的Visual Studio 2019社区版。

·Visual Studio 2019付费版,试用期为30天。

在安装过程中,确保勾选所有可选的C++组件。安装完成后,重新启动。

对于OpenCV 4,构建配置过程需要CMake 3或以上版本。访问https://cmake.org/download/,下载并安装适用于自己的架构(x64或x86)的CMake最新版本的安装程序,然后运行它。在安装过程中,选择“Add CMake to the system PATH for all users”或者“Add CMake to the system PATH for current user”。

在这个阶段,我们已经为OpenCV自定义构建安装了依赖项并建立了环境。现在,我们需要获取OpenCV源代码,配置并构建它。

这可以通过以下步骤来完成:

(1)访问https://opencv.org/releases/,获取Windows的最新OpenCV下载程序。它是一个自解压的压缩文件。运行它,在出现命令提示符时,输入任意目标文件夹,我们将其命名为<opencv_unzip_destination>。在解压过程中,会在<opencv_unzip_destination>\opencv中创建一个子文件夹。

(2)访问https://github.com/opencv/opencv_contrib/releases,下载opencv_contrib模块的最新压缩文件。把这个文件解压到任意目标文件夹,我们将其命名为<opencv_contrib_unzip_destination>。

(3)打开命令提示符,运行以下命令,生成构建文件将放入的另一个文件夹:

把目录更改为build文件夹:

(4)现在,我们已经准备好使用CMake的命令行界面来配置构建了。要理解所有的选项,可以阅读<opencv_unzip_destination>\opencv\CMakeLists.txt中的代码。但是,就本书而言,我们只需要使用一些选项,这些选项将赋予我们带有Python绑定、opencv_contrib模块、非免费内容,并通过OpenNI 2支持深度摄像头的一个发布构建。根据Visual Studio版本和目标架构(x64或x86),一些选项稍有不同。要创建适用于Visual Studio 2019的64位(x64)解决方案,运行以下命令(但是请用实际路径替代<opencv_contrib_unzip_destination>和<opencv_unzip_destination>):

要创建适用于Visual Studio 2019的32位(x86)解决方案,运行以下命令(但是请用实际路径替代<opencv_contrib_unzip_destination>和<opencv_unzip_destination>):

在运行上述命令时,它将打印有关找到或者丢失的依赖项的信息。OpenCV有很多可选的依赖项,所以不要因丢失依赖项而惊慌。但是,如果没有成功完成构建,可以尝试安装丢失的依赖项。(很多依赖项都可以作为预构建的二进制文件使用。)然后,重复这个步骤。

(5)CMake将会在<opencv_build_folder>/OpenCV.sln中生成一个Visual Studio解决方案文件。在Visual Studio中打开它。请确保在Visual Studio窗口顶部附近工具栏的下拉列表中勾选了“Release”配置(而不是“Debug”配置)。(很可能不在Debug配置中构建OpenCV的Python绑定,因为大多数Python发行版本都不包含调试库。)访问“BUILD”菜单,选择“Build Solution”。查看窗口底部“Output”面板中的构建信息,等待构建完成。

(6)在这个阶段,已经构建好了OpenCV,但是还没有把OpenCV安装到Python可以找到的位置。在进行下一步之前,请确保Python环境没有包含冲突的OpenCV构建。找到并删除Python的DLL文件夹和site_packages文件夹中的所有OpenCV文件。例如,这些文件可能匹配以下模式:C:\Python37\DLLs\opencv_*.dll、C:\Python37\Lib\site-packages\opencv和C:\Python37\Lib\site-packages\cv2.pyd。

(7)最后,安装OpenCV的自定义构建。CMake已经生成了一个INSTALL项目作为OpenCV.sln Visual Studio解决方案的一部分。查看Visual Studio窗口右侧的“Solution Explorer”面板,找到“CMakeTargets | INSTALL”项目,右键单击,并从“context”菜单选择“Build”。同样,查看窗口底部“Output”面板中的构建消息,并等待构建完成。然后,退出Visual Studio。编辑系统的Path变量,并添加;<build_folder>\install\x64\vc15\bin(对于64位构建)或者;<build_folder>\install\x86\vc15\bin(对于32位构建)。这个文件夹是INSTALL项目放置OpenCV DLL文件(Python在运行时动态加载的库文件)的地方。OpenCV Python模块位于诸如C:\Python37\Lib\site-packages\cv2.pyd这样的路径下。Python将在此找到它,因此你不需要将其添加到Path中。注销并重新登录(或者重新启动)。

上述指令指的是编辑系统的Path变量。也可以在控制面板的“Environment Variables”窗口中按照如下步骤完成这项任务:

(1)单击“开始”菜单并启动控制面板。导航到“System and Security”→“System”→“Advanced system settings”。单击“Environment Variables...”按钮。

(2)现在,在“System Variables”下,选择“Path”,单击“Edit…”按钮。

(3)根据指示进行更改。

(4)要应用这些更改,请单击所有的“OK”按钮(直到回到控制面板的主窗口)。

(5)然后,注销并重新登录(或者重新启动)。

现在,我们已经在Windows上完成了OpenCV的构建过程,而且拥有了适合本书所有Python项目的一个自定义构建。

今后,如果想把OpenCV源代码更新到新版本,请从下载OpenCV开始,重复上述所有步骤。

1.3.2 在macOS上安装

macOS预装了Python的发行版(根据苹果系统内部需求定制的)。为了开发我们自己的项目,我们应该独立安装Python,并确保它与系统的Python需求不冲突。

对于macOS,可能有一些方法可获取标准版Python 3、NumPy、SciPy和OpenCV。所有方法最终都需要对OpenCV使用Xcode命令行工具从源代码进行编译。但是,根据不同的方法,这项任务可以通过第三方工具以各种方式自动完成。我们可以使用一个自制程序的包管理器查看这种方法。包管理器可以潜在地完成CMake能够完成的所有内容,此外,它还可以帮助我们解决依赖项,并将开发库与系统库进行分离。

MacPorts是macOS的另一种流行的包管理器。但是,在编写本书时,MacPorts并不提供OpenCV 4或者OpenNI 2的包,因此本书中将不会使用这个包管理器。

在继续下一步之前,要确保正确地安装了Xcode命令行工具。打开终端,运行以下命令:

同意许可协议以及其他提示内容。安装程序应该运行到完成。现在,我们就有了自制程序需要的编译器。

1.使用现成软件包的自制程序

从已经安装了Xcode及其命令行工具的系统开始,下面的步骤将通过自制程序完成OpenCV的安装:

(1)打开终端,运行以下命令安装自制程序:

(2)自制程序不会将可执行文件自动放入PATH中。为此,创建或编辑~/.profile文件,在代码顶部添加下面这一行内容:

保存文件,运行以下命令刷新PATH:

请注意,现在,由自制程序安装的可执行文件优先于由系统安装的可执行文件。

(3)对于自制程序的自诊断报告,运行下面这条命令:

遵循它给出的所有故障排除建议。

(4)现在,更新自制程序:

(5)运行下面这条命令,安装Python 3.8:

(6)现在,我们想要安装拥有opencv_contrib模块的OpenCV。同时,我们想要安装诸如NumPy之类的依赖项。为此,运行下面这条命令:

自制程序不提供安装带有OpenNI 2支持的OpenCV的选项。自制程序总是安装拥有opencv_contrib模块的OpenCV,包括专利SIFT和SURF算法(见第6章)这样的非免费内容。如果打算发布依赖于OpenCV非免费内容的软件,你应该自己调研适用于特定国家和特定用例的专利和许可问题。

(7)同样,运行下面这条命令,安装SciPy:

现在,我们就拥有了在macOS上基于Python开发OpenCV项目需要的所有内容。

2.使用自定义软件包的自制程序

如果你需要自定义一个软件包,那么自制程序让编辑现有软件包定义变得很容易:

实际上,软件包定义是用Ruby编程语言编写的脚本。可以在网址为https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md的自制程序维基页面上查找有关编辑包定义的技巧。脚本还可以指定Make或者CMake的配置标志,等等。

要查看哪些CMake配置标志与OpenCV相关,请参考https://github.com/opencv/opencv/blob/master/CMakeLists.txt在GitHub上的官方OpenCV库。

在对Ruby脚本进行编辑之后,请对其进行保存。

自定义包可看作常规包。例如,可以按照如下方式安装自定义包:

1.3.3 在Debian、Ubuntu、Linux Mint以及类似系统上安装

Debian、Ubuntu、Linux Mint以及与Linux相关的发布平台使用apt包管理器。在这些系统上,安装用于Python 3以及包括NumPy和SciPy在内的许多Python模块的包是一件很容易的事情。还可以通过apt获取OpenCV包,但是在编写本书时,这个包还没有更新到OpenCV 4。但是,我们可以从Python的标准包管理pip中获取OpenCV 4(不支持深度摄像头)。也可以从源代码构建OpenCV 4。从源代码构建时,OpenCV可以通过OpenNI 2支持深度摄像头,OpenNI 2可以作为带有安装脚本的一组预编译二进制文件。

不管通过什么方式获取OpenCV,都要首先更新apt,这样就可以获取最新的包。打开终端,运行下面这条命令:

更新apt之后,运行下面这条命令,为Python 3安装NumPy和SciPy:

同样,我们可以使用Ubuntu软件中心,它是apt包管理器的图形前端。

现在,我们必须决定是要OpenCV的一个现成构建(不支持深度摄像头),还是一个自定义构建(支持深度摄像头)。下面将介绍这些备选方案。

1.使用现成的OpenCV包

OpenCV包括opencv_contrib模块在内,可以作为一个pip包进行安装。这就像运行下面的命令一样简单:

如果希望OpenCV安装包含专利算法之类的非免费内容,那么可以运行下面这条命令:

如果打算发布基于OpenCV非免费内容的软件,你应该自己调研适用于特定国家和特定用例的专利和许可问题。OpenCV的非免费内容包括专利SIFT和SURF算法的实现,我们将在第6章中进行介绍。

你可能会发现其中一个pip包提供了你目前想要的所有OpenCV特性。另外,如果你打算使用深度摄像头,或者想要了解OpenCV自定义构建的一般过程,那么不应该安装OpenCV的pip包,而应该从源代码构建OpenCV。

2.从源代码构建OpenCV

要从源代码构建OpenCV,我们需要一个C++构建环境和CMake构建配置系统。具体来说,我们需要CMake 3。在Ubuntu 14.04、Linux Mint 17及其相关系统上,cmake包是指CMake 2,但是还有一个最新的cmake 3包可供使用。在这些系统上,运行下面这些命令,以确保安装了所需的CMake版本及其他构建工具:

另外,在最新的操作系统上,cmake包指CMake 3,我们可以简单地运行下面这条命令:

除了OpenCV的构建过程外,CMake还需要访问网络下载附加依赖项。如果系统使用了代理服务器,那么请确保正确配置了代理服务器的环境变量。具体来说,CMake依赖于http_proxy和https_proxy环境变量。要定义这些环境变量,可以编辑~/.bash_profile脚本,添加下面这些行的内容(请修改它们,以使它们与自己的代理服务器URL和端口号相匹配):

如果不能确定系统是否使用了代理服务器,这可能就没有用了,那么可以忽略这个步骤。

要构建OpenCV的Python绑定,我们需要安装Python 3开发头文件。要安装这些,运行下面这条命令:

要从典型的USB网络摄像头捕捉帧,OpenCV依赖于Linux视频(V4L)。在大多数系统上,V4L是预先安装的,但是万一没有安装的话,请运行下面这条命令:

如前所述,要支持深度摄像头,OpenCV依赖于OpenNI 2。访问https://structure.io/openni,下载适用于Linux和自己的系统架构(x64、x86或者ARM)的OpenNI 2最新压缩文件。将其解压到任意目标地址(命名为<openni2_unzip_destination>)。运行以下命令:

上述安装脚本将配置系统,以便支持USB设备之类的深度摄像头。而且,脚本创建引用<openni2_unzip_destination>内库文件的环境变量。因此,如果之后移除<openni2_unzip_destination>的话,你将需要再次运行install.sh。

现在,我们已经安装了构建环境变量和依赖项,可以获取并构建OpenCV的源代码了。为此,请执行以下步骤:

(1)访问https://opencv.org/releases/,下载最新源代码包。将其解压到任意目标文件夹(命名为<opencv_unzip_destination>)。

(2)访问https://github.com/opencv/opencv_contrib/releases,下载opencv_contrib模块的最新源代码包。将其解压到任意目标文件夹(命名为<opencv_contrib_unzip_destination>)。

(3)打开终端。运行以下命令,创建将要放置OpenCV构建文件的一个目录:

切换到新创建的目录:

(4)现在,我们可以使用CMake生成OpenCV的构建配置。这个配置过程的输出将是一组Makefile,它们是可以用于构建和安装OpenCV的脚本。<opencv_unzip_destination>/opencv/sources/CMakeLists.txt文件中定义了OpenCV的一组完整的CMake配置选项。对本书而言,我们只关心与OpenNI 2支持、Python绑定、opencv_contrib模块和非免费内容相关的选项。通过运行以下命令配置OpenCV:

(5)最后,运行以下命令,解析新生成的Makefile,从而构建并安装OpenCV:

至此,我们已经在Debian、Ubuntu,或者类似的系统上完成了OpenCV构建过程,而且我们还有适合本书所有Python项目的一个自定义构建。

1.3.4 在其他类UNIX系统上安装

在其他类UNIX系统上,包管理器和可用包可能不同。请查阅包管理器文档,并搜索名称中包含opencv的包。请记住,OpenCV及其Python绑定可能被拆分成多个包。

另外,查找由系统的提供者、库的维护者或者由社区发布的所有安装说明。由于OpenCV使用摄像头驱动程序和媒体编解码器,因此在多媒体支持较差的系统上让其所有功能正常工作可能会很棘手。在某些情况下,为了兼容,可能需要重新配置或者重新安装系统包。

如果OpenCV有可用的软件包,那么请检查它们的版本号。对于本书,推荐使用OpenCV 4。此外,检查这些包是否通过OpenNI 2提供对Python绑定和深度摄像头的支持。最后,检查开发人员社区中是否有人在使用这些包时报告了成功或者失败情况。

相反,如果想要从源代码完成OpenCV的自定义构建,参考1.3.3节关于Debian、Ubuntu和类似系统的安装步骤,并根据包管理器和其他系统上的包调整这些步骤,可能会有所帮助。 0UAFVGgJ7qISr9KVc+MxqfaJFOGUUcP0fNLyGsi4EGjGDR7CBD9I8cbeY4b/IqaP

点击中间区域
呼出菜单
上一章
目录
下一章
×