从源代码编译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集安装,请参阅 devtoolset6devtoolset7) 。

首先要做的是创建一个使用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-guiccmake

请注意, 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_INCLUDEDIRXXX_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_TESTINGON 在建造类库之前。如果您想要运行对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