从源代码编译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,而其他(大多数)是可选的,可以在构建过程中激活或不激活:
| 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 formake installBUILD_EXAMPLES:激活OTB示例的编译BUILD_TESTING:激活测试编译OTB_BUILD_DEFAULT_MODULES:激活构建示例所需的所有常用模块OTB_USE_XXX:激活模块 XXXOTBGroup_XXX:启用组中的模块 XXXOTB_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