从源代码编译OTB

本节介绍如何使用以下工具从源代码编译OTB CMake 。如果您只需要安装OTB,请按照 安装 一节。

众所周知,OTB从事以下方面的工作:

  • Windows 10上的Visual Studio 2019
  • GCC 5或更高版本,在GNU/LINUX上Clang 3.4或更高版本
  • MacOS 10.8或更高版本上的AppleClang(英特尔,没有像M1那样的ARM)

从版本6.2.0开始需要C++14标准。

OTB依赖于许多外部库。有些是强制的,这意味着没有它们就无法编译OTB,而其他(大多数)是可选的,可以在构建过程中激活或不激活:

Table 7 OTB中使用的外部库
Library Mandatory Minimum version Superbuild Version
Boost 是   1.72.0
Expat 是   2.4.8
FreeType 是   2.6.0
Geos 是   3.9.3/3.6.5(Windows)
ITK 是 4.6.0 4.13.3
GDAL 是 2.4.1 3.4.2/3.2.2(Windows)
HDF4 是   4.2.13
HDF5 是   1.10.1
libgeotiff 是   1.7.1
libjpeg-turbo 是   1.5.3
libpng 是   1.6.37
libtiff 是   4.4.0
NetCDF 是   4.7.4
Noto Fonts 是    
OpenJPEG 是   2.3.1
PROJ 是   8.2.0/6.2.1(Windows)
SQLITE 是   3.36.0/3.8.8(Windows)
tinyXML 是   2.6.2
ZLIB 是   1.2.12
6S 不是    
Curl 不是   7.54.1
FFTW 不是   3.3.10
libKML 不是 1.2 1.3.0
libSVM 不是 2.0 3.25
MPI 不是    
MuParser 不是   2.3.2
MuParserX 不是 4.0.7 4.0.8
OpenCV 不是 3.0.0 4.6.0
Shark 不是 4 4.0
SiftFast 不是    
SPTW 不是    
SWIG 不是   4.0.2

GNU/Linux和MacOS

设置构建环境

注:在某些发行版中,默认情况下不支持GCC 5+。例如,在CentOS 7中,默认版本是4.8(GCC 7可以使用DevTool集安装,请参阅 devtoolset6 和 devtoolset7) 。

首先要做的是创建一个使用OTB的目录。本指南将使用 ~/OTB 但你可以自由选择其他东西。在此目录中,将有三个位置:

  • ~/OTB/otb 对于源Git存储库
  • ~/OTB/build 对于中间构建对象,生成特定的文件、库和二进制文件。
  • ~/OTB/install ,构建后的OTB安装目录。系统位置 (/usr/local 例如)也可以使用,但本地安装更灵活,不需要超级用户访问权限。
$ mkdir ~/OTB
$ cd ~/OTB
$ git clone https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb.git
$ mkdir build
$ mkdir install

OTB项目使用Git分支模型,其中 develop 是当前的开发版本。它包含最新的补丁程序,并代表下一版本正在进行的工作。 master 是最新的稳定版本。

检查您现在想要建立的分支机构:

$ cd ~/OTB/otb
$ git checkout develop

现在,有两种从源代码编译OTB的方法,具体取决于您希望如何管理依赖项。这两种方法都依赖于CMake。

  • SuperBuild :所有OTB依赖项都会自动下载和编译。这种方法是最容易使用的,并且以最小的工作量提供了完整的OTB。
  • Normal build :OTB依赖项必须已编译并在您的系统上可用。这种方法需要更多的工作,但提供了更多的灵活性。

如果您不知道使用哪种方法,只想编译OTB及其所有模块,请使用SuperBuild。

重要信息:CMake配置变量:

  • CMAKE_INSTALL_PREFIX: Installation directory, target for make install
  • BUILD_EXAMPLES :激活OTB示例的编译
  • BUILD_TESTING :激活测试编译
  • OTB_BUILD_DEFAULT_MODULES :激活构建示例所需的所有常用模块
  • OTB_USE_XXX :激活模块 XXX
  • OTBGroup_XXX :启用组中的模块 XXX
  • OTB_DATA_ROOT :OTB-数据存储库
  • OTB_WRAP_PYTHON :启用Python包装器

仅限SuperBuild:

  • DOWNLOAD_LOCATION :下载依赖项的位置
  • USE_SYSTEM_XXX :使用系统的 XXX 类库

SuperBuild:构建OTB和所有依赖项

OTB的编译通过指定配置变量进行定制。最重要的配置变量如上表所示。提供配置变量的最简单方法是通过命令行 -D 选项:

$ cd ~/OTB/build
$ cmake -D CMAKE_INSTALL_PREFIX=~/OTB/install ../otb/SuperBuild

您还可以使用以下命令手动设置变量 cmake-gui 或 ccmake 。

请注意, CMAKE_INSTALL_PREFIX 变量非常重要,因为SuperBuild将在编译步骤中安装一些目标。因此,即使您不使用Make Install Target,也将使用此目录。事实上,没有 make install 超级建筑的目标。另请注意,如果未指定cmake,则将使用默认安装目录,该目录位于 ../superbuild_install 。

默认情况下,SuperBuild不会使用系统上安装的任何库。全 USE_SYSTEM_XXX 设置为 OFF 。这是我们推荐的使用SuperBuild的方式。但是,如果您愿意,您可以自由使用系统库!您必须非常清楚您从系统中使用的那些库的依赖关系。例如,如果在SuperBuild中没有使用libjpeg,那么就不应该在SuperBuild中使用zlib,因为zlib是libjpeg的依赖项。此处SuperBuild将不会设置 USE_SYSTEM_ZLIB=FALSE 。用户必须使用以下命令重新运行cmake -DUSE_SYSTEM_ZLIB=FALSE 。上面的libjpeg-zlib依赖示例非常简单。想象一下GDAL依赖于zlib、libjpeg、libtiff(具有很大的tiff支持)、Geotiff、Sqlite、curl、geos、libkml、Openjpeg的情况。这是我们建议只使用SuperBuild的原因之一。

所有依赖项的配置和构建方式都有助于我们获得高效的OTB构建。因此,我们在GDAL版本中启用了Geotiff(支持proj4)、Openjpeg、geos。

SuperBuild将依赖项下载到 DOWNLOAD_LOCATION 目录,该目录将是 ~/OTB/build/Downloads 在我们的示例中。可以在编译步骤之前将依赖项手动下载到此目录中。如果您希望绕过代理、打算在没有Internet连接的情况下编译OTB或其他网络限制,这会很有用。您可以找到一个存档,其中包含我们所有依赖项的源代码 the Orfeo ToolBox website (选择与您想要构建的OTB版本相对应的‘SuperBuild-存档’)。

Notes about GDAL: 从OTB 7.0开始,SuperBuild的GDAL版本为2.4.1。此版本需要pkg-config才能正确查找OpenJPEG(需要以.jp2、.j2k格式读取和写入图像),GDAL 2.4.1的最低版本为0.21。您可以使用以下命令进行安装:

apt-get install pkg-config

您现在已经准备好编译OTB了!只需使用make命令(可以使用CMake生成其他目标 -G 选项):

$ cd ~/OTB/build
$ make

应用程序将位于 CMAKE_INSTALL_PREFIX/bin/ 目录:

~/OTB/install/bin/otbcli_ExtractROI

将启动命令行版本的 ExtractROI 应用程序,而:

为了确保从系统中的任何位置访问您的OTB版本,我们建议设置以下环境变量。首先,添加 bin/ 目录到您的路径,以便于访问:

export PATH=$PATH:~/OTB/install/bin

第二,添加 lib/ 目录到您的 LD_LIBRARY_PATH :

export LD_LIBRARY_PATH=~/OTB/install/lib:$LD_LIBRARY_PATH

正常构建:仅构建OTB

一旦系统上的所有OTB依赖项都可用,就可以使用CMake生成一个生成文件:

$ cd ~/OTB/build
$ cmake -C configuration.cmake ../otb

剧本 configuration.cmake 如果CMake无法自动找到依赖项位置,则需要包含依赖项位置。这可以使用 XXX_DIR 变量,这些变量包含包含FindXXX.cmake脚本的目录,或者 XXX_INCLUDEDIR 和 XXX_LIBRARY 变量。

此外,确定您希望启用哪个模块,以及测试和示例。有关CMake变量的列表,请参阅上表。

OTB是模块化的。可以只构建一些模块,而不是构建整个集合。要停用模块(以及依赖它的模块),请关闭CMake变量 OTB_BUILD_DEFAULT_MODULES 、配置,然后分别关闭 Module_module_name 变量。

一些OTB功能被认为是可选的,您可以停用相关模块,这要归功于一组以 OTB_USE_XXX 。下表显示了哪些模块与这些变量相关联。请注意,这些变量覆盖变量,这一点非常重要 OTB_BUILD_DEFAULT_MODULES 。

您现在已经准备好编译OTB了!只需使用make命令(可以使用CMake生成其他目标 -G 选项):

$ make

安装目标将二进制文件和库复制到安装位置:

$ make install
CMake variable 3rd party module Modules depending on it
OTB_USE_LIBKML OTBlibkml OTBKMZ编写器OTBIOKML OTBAppKMZ
OTB_USE_CURL OTBCurl  
OTB_USE_MUPARSER OTBMuParser OTBMathParser OTBDempsterShafer OTB应用分类OTBAppMathParser OTBAppStereo OTBAppProjection OTB应用分割OTB道路提取OTBRCC8 OTBCCOBIA OTBMeanShift
OTB_USE_MUPARSERX OTBMuParserX OTBMathParserX OTBAppMathParserX
OTB_USE_LIBSVM OTBLibSVM 对于OTB可选监督OTB应用程序分类
OTB_USE_OPENCV OTBOpenCV 对于OTB可选监督OTB应用程序分类
OTB_USE_SHARK OTBShark 对于OTB可选监督OTB应用程序分类
OTB_USE_6S OTB6S OTB光学校准OTB应用光学校准OTB模拟
OTB_USE_SIFTFAST OTBSiftFast  

表:第三方和相关模块。

窗口

在Windows上开发OTB所需的所有内容,包括从源代码进行编译,都在OTB维基上进行了详细介绍,网址为:

http://wiki.orfeo-toolbox.org/index.php/OTB_development_on_Windows

已知问题

请核对一下 our gitlab tracker 以获取开放错误的列表。

测试

OTB有2500多项测试。运行它们可能需要20分钟到3小时,这取决于编译选项(发布模式确实会有所不同)和硬件。

要运行测试,请首先确保设置选项 BUILD_TESTING 至 ON 在建造类库之前。如果您想要运行对pythonAPI的测试,则还需要安装python模块 pytest 。

对于某些测试,您还需要测试数据和基线(~1 GB)。这些文件使用以下方式存储 git-lfs in the Data folder at the root of otb sources. To download them, you have to make sure git-lfs is installed before cloning otb (binaries for git lfs are available for different OS here )。

下载后,将二进制文件添加到$PATH并运行 git lfs install 。然后,您可以克隆OTB源:

git clone https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb.git

使用测试构建OTB后,您只需转到构建OTB的二进制目录并运行 ctest -N 有一份所有测试的清单。只是在用 ctest 将运行所有测试。要选择子集,您可以执行以下操作 ctest -R Kml 运行与KML文件相关的所有测试,或者 ctest -I 1,10 运行从1到10的测试。

编写文档

要构建操作手机,需要以下Python包: numpy, sphinx, sphinx_rtd_theme 。它们可在PIP上获得:

pip install numpy sphinx sphinx_rtd_theme

启用Python绑定并设置 BUILD_COOKBOOK :

cmake -DOTB_WRAP_PYTHON=ON -DBUILD_COOKBOOK=ON .

然后,构建目标:

make CookbookHTML