一款用户友好、商业级的无人机图像处理软件。可从航拍图像生成地理参考地图、点云、高程模型和纹理化3D模型。目前支持多种处理引擎,包括ODM和MicMac。
- 入门指南
- 推荐机器规格
- 自定义和扩展
- API文档
- 路线图
- 获取帮助
- 支持项目
- 翻译
- 成为贡献者
- 架构概览
- 作为Linux服务运行Docker版本
- 本地运行
- 在云端运行(Google Compute, Amazon AWS)
- 许可证
入门指南
Windows和macOS用户可以购买自动化安装程序,这使安装过程更加简单。
WebODM还有一个云托管版本,可从webodm.net获取。
要在你的机器上手动安装WebODM:
-
安装以下应用程序:
- Git
- Docker
- Docker-compose
- Python
- Pip
-
Windows用户应安装Docker Desktop,并且 1) 确保启用了Linux容器(切换到Linux容器...),2) 为Docker分配足够的CPU(默认2个)和内存(>4Gb,16Gb更好,但要为Windows留一些),方法是进入设置 -- 高级,3) 选择虚拟硬盘存放的位置(设置 -- 高级 -- 镜像和卷)。
-
在Docker快速启动终端或Git Bash(Windows),或命令行(Mac / Linux)中,输入:
git clone https://github.com/OpenDroneMap/WebODM --config core.autocrlf=input --depth 1
cd WebODM
./webodm.sh start
- 如果在Linux上最后一步遇到任何问题,请确保你的用户属于docker组:
sudo usermod -aG docker $USER
exit
(通过注销然后重新登录来重启shell)
./webodm.sh start
- 在Web浏览器中打开
http://localhost:8000
(除非你在Windows上使用Docker Toolbox,请参见下文)
Docker Toolbox用户需要通过在Docker快速启动终端中运行以下命令来找到docker机器的IP:
docker-machine ip
192.168.1.100(你的输出会不同)
连接地址则为:http://192.168.1.100:8000
。
要停止WebODM,按CTRL+C或运行:
./webodm.sh stop
要将WebODM更新到最新版本,使用:
./webodm.sh update
管理处理节点
WebODM可以链接到一个或多个使用NodeODM API的处理节点,如NodeODM、NodeMICMAC或ClusterODM。默认配置包括一个"node-odm-1"处理节点,它与WebODM运行在同一台机器上,只是为了帮助你入门。随着你对WebODM越来越熟悉,你可能想在单独的机器上安装处理节点。
添加更多处理节点将允许你并行运行多个作业。
你还可以设置一个ClusterODM节点,通过分布式分割合并在多台机器上运行单个任务,更快地处理成千上万张图像,并且使用更少的内存。
如果你不需要默认的"node-odm-1"节点,只需在启动WebODM时传递--default-nodes 0
标志:
./webodm.sh restart --default-nodes 0
。
然后从Web界面手动删除"node-odm-1"节点即可。
启用MicMac
WebODM可以通过NodeMICMAC使用MicMac作为处理引擎。要添加MicMac,只需运行:
./webodm.sh restart --with-micmac
这将在运行WebODM的同一台机器上创建一个"node-micmac-1"处理节点。请注意,NodeMICMAC正在积极开发中,目前仍处于实验阶段。如果发现问题,请在NodeMICMAC仓库报告。
启用SSL
WebODM能够通过Let's Encrypt自动请求和安装SSL证书,或者你可以手动指定自己的密钥/证书对。
- 设置你的DNS记录(webodm.myorg.com --> 服务器IP)。
- 确保端口80和443是开放的。
- 运行以下命令:
./webodm.sh restart --ssl --hostname webodm.myorg.com
就这样!证书将在需要时自动续期。
如果你想指定自己的密钥/证书对,只需向./webodm.sh
传递--ssl-key
和--ssl-cert
选项。有关更多信息,请参见./webodm.sh --help
。
注意!你不能将IP地址传递给hostname参数!你需要设置一个DNS记录。
我的文件存储在哪里?
使用Docker时,所有处理结果都存储在docker卷中,而不在主机文件系统上。有两个特定的docker卷值得关注:
- Media(称为webodm_appmedia):这是存储所有与项目和任务相关文件的地方。
- Postgres DB(称为webodm_dbdata):这是Postgres数据库用来存储其数据的地方。
有关这两个卷如何使用以及在哪些容器中使用的更多信息,请参阅docker-compose.yml文件。
出于各种原因,如便于备份/恢复,如果你想将文件存储在主机文件系统上而不是docker卷中,你需要通过--media-dir
和/或--db-dir
选项传递路径:
./webodm.sh restart --media-dir /home/user/webodm_data --db-dir /home/user/webodm_db
请注意,更改后现有的任务结果将不可用。请参阅Docker文档的迁移数据卷部分,了解有关迁移现有任务结果的信息。
常见故障排除
症状 | 可能的解决方案 |
---|---|
内存不足 | 确保你的Docker环境分配了足够的RAM:MacOS说明,Windows说明 |
启动WebODM时出现:'WaitNamedPipe','系统找不到指定的文件。' | 1. 确保你在BIOS中启用了VT-x虚拟化。 2. 尝试将Python版本降级到2.7 |
在Windows上,docker-compose失败并显示无法执行脚本docker-compose | 确保你在BIOS中启用了VT-x虚拟化 |
无法在Windows 10的Microsoft Edge上访问WebODM | 尝试根据这些说明调整你的互联网属性 |
出现设备上没有空间 错误,但硬盘仍有足够空间 | Windows上的Docker默认只会为默认docker-machine分配20GB空间。你需要增加这个数量。参见这个链接和这个链接 |
无法通过./webodm.sh start 启动WebODM,每次重试时错误消息都不同 | 你可能内存不足。确保你有足够的可用RAM。推荐最少2GB,除非你知道自己在做什么 |
使用Docker Toolbox(VirtualBox)运行WebODM时,无法从同一网络的其他计算机访问WebODM | 以管理员身份运行cmd.exe ,然后输入"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm "default" natpf1 "rule-name,tcp,,8000,,8000" |
在Windows上,WebODM诊断页面显示的存储空间与Docker设置中实际设置的不一致 | 从Hyper-V管理器中,右键点击"DockerDesktopVM",转到编辑磁盘,然后选择扩展磁盘并将最大大小与Docker设置中指定的设置匹配。更改后,重启Docker。 |
Lightning资产中缺少图像
当你使用Lightning处理任务时,你需要将所有资产下载到本地WebODM实例。所有资产的压缩包不包含用于创建正射影像的图像。这意味着,虽然你可以在本地WebODM中可视化相机图层,但当你点击特定的相机图标时,不会显示图像。
如果你使用Docker运行WebODM,修复方法如下(以MacOS主机为例):
- 确保你有一个目录,其中包含该任务的所有图像且仅包含这些图像;
- 打开Docker Desktop并导航到容器。找到你的WebODM实例并导航到名为
worker
的容器。你需要容器ID。这是列在容器名称下的哈希值。点击旁边的复制图标复制容器ID。 - 打开终端并输入
docker cp <源目录>/. <docker容器ID>:/webodm/app/media/project/<项目ID>/task/<任务ID>
。粘贴容器ID以替换标题为<docker容器ID>
的位置。输入图像的完整目录路径以替换<源目录>
; - 返回Docker Desktop并在侧边栏导航到卷。点击名为
webodm_appmedia
的卷,点击project
,找到正确的项目并点击它,点击task
并找到正确的任务。 - 从Docker Desktop中替换终端命令中的正确
<项目ID>
和<任务ID>
; - 在终端中执行新编辑的命令。你将看到一系列进度消息,你的图像将被复制到Docker;
- 在本地WebODM实例中导航到你的项目;
- 打开地图并打开相机图层(左上角);
- 点击相机图标,相关图像将显示
你遇到过其他问题吗?请报告它们,以便我们将其包含在此文档中。
备份和恢复
如果你想将WebODM移动到另一个系统,你只需要传输docker卷(除非你将文件存储在文件系统中)。
在旧系统上:
mkdir -v backup
docker run --rm --volume webodm_dbdata:/temp --volume `pwd`/backup:/backup ubuntu tar cvf /backup/dbdata.tar /temp
docker run --rm --volume webodm_appmedia:/temp --volume `pwd`/backup:/backup ubuntu tar cvf /backup/appmedia.tar /temp
你的备份文件将存储在新创建的backup
目录中。将backup
目录传输到新系统,然后在新系统上:
ls backup # --> appmedia.tar dbdata.tar
./webodm.sh down # 确保WebODM已关闭
docker run --rm --volume webodm_dbdata:/temp --volume `pwd`/backup:/backup ubuntu bash -c "rm -fr /temp/* && tar xvf /backup/dbdata.tar"
docker run --rm --volume webodm_appmedia:/temp --volume `pwd`/backup:/backup ubuntu bash -c "rm -fr /temp/* && tar xvf /backup/appmedia.tar"
./webodm.sh start
如果恢复.tar文件丢失或损坏,你可以进行硬恢复
重置密码
如果你忘记了首次登录WebODM时设置的密码,要重置它只需输入:
./webodm.sh start && ./webodm.sh resetadminpassword newpass
密码将被重置为newpass
。该命令还会告诉你选择的用户名。
管理插件
可以从用户界面启用和禁用插件。只需转到管理 -- 插件。
更新
如果你使用docker,更新就像运行以下命令一样简单:
./webodm.sh update
如果你原生运行WebODM,这些命令应该可以完成更新:
cd /webodm
sudo su odm # 只有在你使用不同用户运行WebODM时才需要
git pull origin master
source python3-venv/bin/activate # 如果你运行的是虚拟环境
npm install
pip install -r requirements.txt
webpack --mode production
python manage.py collectstatic --noinput
python manage.py migrate
推荐的机器规格
要运行独立安装的WebODM(用户界面),包括处理组件(NodeODM),我们至少推荐:
- 100 GB可用磁盘空间
- 16 GB RAM
使用这些规格,不要期望处理超过几百张图像。要处理更大的数据集,请根据要处理的图像数量线性增加RAM。有更多核心的CPU将加快处理速度,但可能会增加内存使用。也支持GPU加速。要使用支持CUDA的显卡,确保在启动WebODM时传递--gpu
参数。在这种情况下,你需要安装nvidia-docker,参见https://github.com/NVIDIA/nvidia-docker 和 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker 了解docker/NVIDIA设置信息。
WebODM在Linux上运行最好,但在Windows和Mac上也运行良好。如果你有技术倾向,你可以在所有三个平台上原生运行WebODM。
WebODM本身只是一个用户界面(参见下文)并不需要太多资源。WebODM可以在只有1或2 GB RAM的机器上加载并正常工作,无需NodeODM。然后你可以使用处理服务,如lightning network,或在单独的更强大的机器上运行NodeODM。
自定义和扩展
小型自定义,如更改应用程序颜色、名称、徽标或添加自定义CSS/HTML/Javascript,可以直接从WebODM内的自定义 -- 品牌/主题面板执行。无需分叉或更改代码。
更高级的自定义可以通过编写插件来实现。这是向WebODM添加新功能的首选方式,因为它比维护单独的分支需要更少的工作。插件系统具有服务器端信号,可用于通知各种事件,ES6/React构建系统,用于向UI添加元素的动态客户端API,内置数据存储,异步任务运行器,GRASS引擎,添加菜单项的钩子以及快速注入CSS、Javascript和Django视图的函数。
对于插件,目前最好的文档来源是查看现有代码。如果你的插件还没有特定的钩子/入口点,请提出请求。我们正在不断添加钩子和入口点。
要创建插件,只需将plugins/test
插件复制到新目录(例如,plugins/myplugin
),然后修改manifest.json
、plugin.py
并执行./webodm.sh restart
。
API文档
请参阅API文档页面。
路线图
我们采用自下而上的方法来决定向WebODM添加哪些新功能。用户反馈指导我们的决策过程,我们通过改进请求收集这些反馈。 没找到您想要的功能?提交功能请求或帮助我们构建。
有时我们也会优先考虑获得财务支持的工作。如果您的组织能够为某个特定功能的开发提供财务支持,请联系我们,我们将实现它。
获取帮助
我们有几个沟通渠道供人们提问和参与社区:
首选的沟通方式是通过OpenDroneMap社区论坛。
支持项目
有很多方式可以回馈项目:
- 帮助我们测试新功能和现有功能,并报告错误和反馈。
- 分享您的航拍数据集。
- 在社区论坛和聊天室帮助回答问题。
- 在GitHub上给我们⭐️。
- 帮助我们将WebODM翻译成您的语言。
- 帮助我们分类点云数据集。
- 在社交媒体上宣传WebODM和OpenDroneMap。
- 虽然我们不接受捐赠,但您可以购买安装程序、书籍或赞助套餐。
- 您可以为新功能开发和错误修复承诺资金。
- 成为贡献者 🤘
翻译
将WebODM翻译成不同语言很容易!
- 访问https://hosted.weblate.org/engage/webodm/ 并注册一个账户(免费)
- 选择要翻译的语言,或开始新的翻译
- 开始翻译!就是这么简单。
如果您想预览翻译工作,请以开发者模式启动WebODM:
./webodm.sh restart --dev
然后编辑LOCALES文件,包含您的翻译语言代码。最后,从WebODM的仪表板访问"开发者工具"面板,并按"下载并替换翻译文件"按钮:
weblate.org的最新翻译文件将被下载并应用到WebODM的安装中。
成为贡献者
最简单的开始方式是查看我们的未解决问题列表并选择一个。您也可以根据使用WebODM的经验修复/改进全新的内容。我们会考虑所有想法,欢迎各种技能水平的人贡献。
您不一定需要是开发人员才能成为贡献者。我们需要您的帮助来编写更好的文档并改进用户界面文本和视觉效果。
如果您会编程,我们主要使用Python(Django)、JavaScript(React)、HTML和SCSS。有关更多信息,请参阅开发快速入门和贡献文档。
要做出贡献,您需要提交拉取请求(这里是方法)。要对WebODM进行更改,请克隆存储库并运行./webodm.sh start --dev
。
如果您有任何问题,请访问我们的论坛,我们很乐意帮助您完成第一次贡献。
架构概述
OpenDroneMap项目由几个组件组成。
- ODM是一个处理航拍图像的命令行工具包。熟悉命令行的用户可能只需使用这个组件就足够了。
- NodeODM是直接建立在ODM之上的轻量级接口和API(应用程序接口)。不熟悉命令行的用户可以使用这个接口来处理航拍图像,开发人员可以使用API来构建应用程序。不提供用户认证、地图显示等功能。
- WebODM添加了更多功能,如用户认证、地图显示、3D显示、更高级的API以及协调多个处理节点(并行运行作业)的能力。处理节点只是运行NodeODM的服务器。
WebODM在设计时考虑了可扩展性和性能。虽然默认设置将所有数据库和应用程序放在同一台机器上,但用户可以分离其组件以提高性能(例如,将Celery worker放在单独的机器上运行后台任务)。
需要注意的几点:
- 我们使用Celery workers来执行调整图像大小和处理任务结果等后台任务,但我们使用临时调度机制与NodeODM通信(处理正射影像、3D模型等)。选择使用两个独立的系统进行任务调度是由于临时机制在某些操作中给予我们的灵活性(捕获任务输出、持久数据和能够在中途重启任务、通过REST调用进行通信等)。
- 如果加载在多台机器上,Celery workers应该通过网络共享与Django应用程序共享其
app/media
目录。您可以通过./worker.sh
管理workers。
将docker版本作为Linux服务运行
如果您希望将docker版本作为systemd风格的Linux服务运行,具有自动启动/监控/停止等功能,存储库的service文件夹中包含一个systemd单元文件。
这应该可以在任何能够运行WebODM的Linux操作系统上工作,并使用基于SystemD的服务守护进程(例如Ubuntu 16.04服务器)。
这只在Ubuntu 16.04服务器和Red Hat Enterprise Linux 9上进行了测试。
需要满足以下先决条件:
- 需要odm用户
- 需要通过系统安装docker(ubuntu:
sudo apt-get install docker.io
) - 需要安装'screen'包
- 需要odm用户是docker组的成员
- 需要将WebODM目录检出/克隆到/opt/WebODM
- 需要/opt/WebODM递归地归odm:odm所有
- 需要在/opt/WebODM/python3-venv使用Python 3环境
如果满足所有先决条件,并且存储库已检出/克隆到/opt/WebODM文件夹,则可以使用以下步骤启用和管理服务:
首先,安装服务,并启用服务以从现在开始在启动时运行:
sudo systemctl enable /opt/WebODM/service/webodm-docker.service
手动启动/停止服务:
sudo systemctl stop webodm-docker
sudo systemctl start webodm-docker
手动检查服务状态:
sudo systemctl status webodm-docker
对于冒险者来说,可以通过在启用服务之前编辑./WebODM/service/webodm-docker.service文件来反映您的存储库位置,并修改systemctl enable命令到该目录,从而将存储库放在您喜欢的任何地方。
本地运行
WebODM可以在Windows、MacOS和Linux上本地运行。我们不建议本地运行WebODM(使用docker更容易),但这是可能的。
Ubuntu 16.04 LTS用户可以参考这个社区脚本在新机器上本地安装WebODM。
要运行WebODM,您需要安装:
- PostgreSQL (>= 9.5)
- PostGIS 2.3
- Python 3.6
- GDAL (>= 3)
- Node.js (>= 6.0)
- Nginx (Linux/MacOS) - 或 - Apache + mod_wsgi或Waitress (Windows)
- Redis (>= 2.6)
- GRASS GIS (>= 7.8)
在Linux上,确保安装:
apt-get install binutils libproj-dev gdal-bin nginx
在Windows上使用OSGeo4W安装程序安装GDAL。MacOS用户可以使用:
brew install postgres postgis
然后这些步骤应该足以让您启动并运行:
git clone --depth 1 https://github.com/OpenDroneMap/WebODM
创建一个包含数据库设置的WebODM/webodm/local_settings.py
文件:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'webodm_dev',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'localhost',
'PORT': '5432',
}
}
从psql或pgadmin连接到PostgreSQL,创建一个新数据库(命名为webodm_dev
),连接到它并设置postgis.enable_outdb_rasters和postgis.gdal_enabled_drivers设置:
ALTER SYSTEM SET postgis.enable_outdb_rasters TO True;
ALTER SYSTEM SET postgis.gdal_enabled_drivers TO 'GTiff';
启动redis代理:
redis-server
然后:
pip install -r requirements.txt
sudo npm install -g webpack
sudo npm install -g webpack-cli
npm install
webpack --mode production
python manage.py collectstatic --noinput
chmod +x start.sh && ./start.sh --no-gunicorn
最后,启动至少一个celery工作进程:
./worker.sh start
如果传递--no-gunicorn
参数,start.sh
脚本将使用Django的内置服务器。这对测试很好,但对生产环境不适合。
在生产环境中,如果安装了nginx,请修改nginx/nginx.conf
中的配置文件以匹配你的系统配置,然后直接运行不带参数的start.sh
。
Windows用户应参考本指南安装Apache + mod_wsgi并运行gunicorn:
gunicorn webodm.wsgi --bind 0.0.0.0:8000 --preload
如果你遇到rt_raster_gdal_warp: Could not create GDAL transformation object for output dataset creation
错误,请确保你的PostGIS安装支持PROJ:
SELECT PostGIS_Full_Version();
你可能还需要将环境变量PROJSO设置为PostGIS使用的.so或.dll投影库。这只需要文件名。例如在Windows上,你需要在控制面板 -> 系统 -> 环境变量中添加一个名为PROJSO的系统变量,并将其设置为libproj.dll(如果你使用的是proj 4.6.1)。更改后需要重启PostgreSQL服务/守护进程。http://postgis.net/docs/manual-2.0/RT_ST_Transform.html
如果你使用Windows并且在执行pip install -r requirements.txt
命令时因为zlib和Pillow相关的错误而无法继续,请手动编辑requirements.txt
文件,删除Pillow要求并运行:
easy_install pillow
pip install -r requirements.txt
在Windows上,确保所有PATH环境变量都正确设置。以下命令:
python --version
pip --version
npm --version
gdalinfo --version
redis-server --version
应该都能正常工作,不出现错误。
在云端运行(Google Compute、Amazon AWS)
12个步骤,让WebODM在云实例上运行。
这些步骤适用于Google Cloud,但也可以用于Amazon AWS和其他云平台,只需稍作修改:
- 启动一个Ubuntu 18.0 LTS的Google Cloud实例。
- 打开SSH终端 - Google通过网站提供SSH。
- 运行sudo apt-get update
- 运行sudo apt-get upgrade
- 安装docker-compose。从24.04版本开始不要通过apt安装。
- 运行sudo apt-get install python-pip
- 运行git clone https://github.com/OpenDroneMap/WebODM --config core.autocrlf=input --depth 1
- cd WebODM(Linux区分大小写)
- sudo ./webodm.sh start
- 现在你可以通过Google实例的公共IP地址访问WebODM。记住默认端口是8000。
- 检查你的实例防火墙是否允许端口8000上的入站TCP连接!如果忘记这一步,你将无法连接到WebODM。
- 打开http://你的Google实例公共IP地址:8000
要在Google Cloud上设置防火墙,打开实例,在实例设置页面中间找到NIC0。打开它,然后为入站和出站添加TCP端口8000。
许可证
WebODM根据GNU Affero通用公共许可证v3.0的条款获得许可。
商标
参见商标指南