Project Icon

WebODM

生成高精度地图点云和3D模型的无人机影像处理平台

WebODM是一个开源的无人机影像处理平台,可从航拍图像生成地理参考地图、点云、高程模型和纹理3D模型。它支持ODM和MicMac等多个处理引擎,具有用户友好的界面,能处理大规模数据集,并可通过插件扩展功能。WebODM适用于从业余爱好者到专业测绘人员的各类用户,为无人机影像处理提供了一个功能强大且易于使用的开源解决方案。

WebODM

构建状态 版本 已翻译

一款用户友好、商业级的无人机图像处理软件。可从航拍图像生成地理参考地图、点云、高程模型和纹理化3D模型。目前支持多种处理引擎,包括ODMMicMac

图片

图片

图片

入门指南

Windows和macOS用户可以购买自动化安装程序,这使安装过程更加简单。

WebODM还有一个云托管版本,可从webodm.net获取。

要在你的机器上手动安装WebODM:

  • 安装以下应用程序:

  • 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的处理节点,如NodeODMNodeMICMACClusterODM。默认配置包括一个"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卷值得关注:

  1. Media(称为webodm_appmedia):这是存储所有与项目和任务相关文件的地方。
  2. 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主机为例):

  1. 确保你有一个目录,其中包含该任务的所有图像且仅包含这些图像;
  2. 打开Docker Desktop并导航到容器。找到你的WebODM实例并导航到名为worker的容器。你需要容器ID。这是列在容器名称下的哈希值。点击旁边的复制图标复制容器ID。
  3. 打开终端并输入docker cp <源目录>/. <docker容器ID>:/webodm/app/media/project/<项目ID>/task/<任务ID>。粘贴容器ID以替换标题为<docker容器ID>的位置。输入图像的完整目录路径以替换<源目录>
  4. 返回Docker Desktop并在侧边栏导航到卷。点击名为webodm_appmedia的卷,点击project,找到正确的项目并点击它,点击task并找到正确的任务。
  5. 从Docker Desktop中替换终端命令中的正确<项目ID><任务ID>
  6. 在终端中执行新编辑的命令。你将看到一系列进度消息,你的图像将被复制到Docker;
  7. 在本地WebODM实例中导航到你的项目;
  8. 打开地图并打开相机图层(左上角);
  9. 点击相机图标,相关图像将显示

你遇到过其他问题吗?请报告它们,以便我们将其包含在此文档中。

备份和恢复

如果你想将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-dockerhttps://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.jsonplugin.py并执行./webodm.sh restart

API文档

请参阅API文档页面

路线图

我们采用自下而上的方法来决定向WebODM添加哪些新功能。用户反馈指导我们的决策过程,我们通过改进请求收集这些反馈。 没找到您想要的功能?提交功能请求帮助我们构建

有时我们也会优先考虑获得财务支持的工作。如果您的组织能够为某个特定功能的开发提供财务支持,请联系我们,我们将实现它。

获取帮助

我们有几个沟通渠道供人们提问和参与社区:

首选的沟通方式是通过OpenDroneMap社区论坛

支持项目

有很多方式可以回馈项目:

  • 帮助我们测试新功能和现有功能,并报告错误反馈
  • 分享您的航拍数据集。
  • 在社区论坛聊天室帮助回答问题。
  • 在GitHub上给我们⭐️。
  • 帮助我们将WebODM翻译成您的语言。
  • 帮助我们分类点云数据集
  • 在社交媒体上宣传WebODM和OpenDroneMap。
  • 虽然我们不接受捐赠,但您可以购买安装程序书籍赞助套餐
  • 您可以为新功能开发和错误修复承诺资金
  • 成为贡献者 🤘

翻译

将WebODM翻译成不同语言很容易!

如果您想预览翻译工作,请以开发者模式启动WebODM:

./webodm.sh restart --dev

然后编辑LOCALES文件,包含您的翻译语言代码。最后,从WebODM的仪表板访问"开发者工具"面板,并按"下载并替换翻译文件"按钮:

image

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

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_rasterspostgis.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和其他云平台,只需稍作修改:

  1. 启动一个Ubuntu 18.0 LTS的Google Cloud实例。
  2. 打开SSH终端 - Google通过网站提供SSH。
  3. 运行sudo apt-get update
  4. 运行sudo apt-get upgrade
  5. 安装docker-compose。从24.04版本开始不要通过apt安装。
  6. 运行sudo apt-get install python-pip
  7. 运行git clone https://github.com/OpenDroneMap/WebODM --config core.autocrlf=input --depth 1
  8. cd WebODM(Linux区分大小写)
  9. sudo ./webodm.sh start
  10. 现在你可以通过Google实例的公共IP地址访问WebODM。记住默认端口是8000。
  11. 检查你的实例防火墙是否允许端口8000上的入站TCP连接!如果忘记这一步,你将无法连接到WebODM。
  12. 打开http://你的Google实例公共IP地址:8000

要在Google Cloud上设置防火墙,打开实例,在实例设置页面中间找到NIC0。打开它,然后为入站和出站添加TCP端口8000。

许可证

WebODM根据GNU Affero通用公共许可证v3.0的条款获得许可。

商标

参见商标指南

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号