Skip to content

WebODM/ODM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3,569 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

ODM

CPU Build GPU Build Windows Build Version License Contributors Updated

πŸ“’ Now with NVIDIA GeForce RTX 50 Series support, checkpoints support and tons of improvements! Read the announcement

A free and open source photogrammetry engine for processing aerial and ground imagery. ODM turns images into:

  • Classified Point Clouds
  • 3D Textured Models
  • Georeferenced Orthophotos
  • Georeferenced Digital Elevation Models

ODM Pipeline

The application is available for Windows, Mac and Linux and it works from the command line, making it ideal for power users, scripts and for integration with other software.

If you would rather not type commands in a shell and are looking for a friendly user interface, check out WebODM.

Quickstart

Windows

First download the latest Windows setup. After installation, open the ODM Console, place some images in a folder named images (for example C:\Users\youruser\datasets\project\images) and run:

run c:\Users\youruser\datasets\project

Alternatively, you can also use docker:

# Windows
docker run -ti --rm -v c:/Users/youruser/datasets:/datasets webodm/odm --project-path /datasets project

macOS/Linux

First install docker. Once you have docker installed, place some images in a folder named images (for example C:\Users\youruser\datasets\project\images or /home/youruser/datasets/project/images) and run from a terminal:

# Mac/Linux
docker run -ti --rm -v /home/youruser/datasets:/datasets webodm/odm --project-path /datasets project

Arguments

You can pass additional parameters by appending them to the command:

run c:\Users\youruser\datasets\project [--args]
docker run -ti --rm -v /datasets:/datasets webodm/odm --project-path /datasets project [--args]

For example, to generate a DSM (--dsm) and increase the orthophoto resolution (--orthophoto-resolution 2) :

docker run -ti --rm -v /datasets:/datasets webodm/odm --project-path /datasets project --dsm --orthophoto-resolution 2

To see all parameters:

docker run -ti --rm -v /datasets:/datasets webodm/odm --help

Viewing Results

When the process finishes, the results will be organized as follows:

|-- images/
    |-- DJI_0001.jpg
    |-- ...
|-- opensfm/
    |-- see mapillary/opensfm repository for more info
|-- odm_meshing/
    |-- odm_mesh.ply                    # A 3D mesh
|-- odm_texturing/
    |-- odm_textured_model_geo.obj      # Georeferenced textured mesh
|-- odm_georeferencing/
    |-- odm_georeferenced_model.laz     # LAZ format point cloud
|-- odm_orthophoto/
    |-- odm_orthophoto.tif              # Orthophoto GeoTiff

You can use the following free and open source software to open the files generated in ODM:

  • .tif (GeoTIFF): QGIS
  • .laz (Compressed LAS): CloudCompare
  • .obj (Wavefront OBJ), .ply (Stanford Triangle Format): MeshLab

Note! Opening the .tif files generated by ODM in programs such as Photoshop or GIMP might not work (they are GeoTIFFs, not plain TIFFs). Use QGIS instead.

API

ODM can be made accessible from a network via NodeODM.

Documentation

See http://docs.webodm.org for tutorials and more guides.

Community

See https://webodm.org/community to find a community near you.

GPU Acceleration

ODM has GPU support to speed up certain computations. On Windows, this is enabled by default. With docker, to enable it, you need to use the webodm/odm:gpu docker image and you need to pass the --gpus all flag:

docker run -ti --rm -v c:/Users/youruser/datasets:/datasets --gpus all webodm/odm:gpu --project-path /datasets project

When you run ODM, if the GPU is recognized, in the first few lines of output you should see:

[INFO]    nvidia-smi detected

If you have an NVIDIA card, you can test that docker is recognizing the GPU by running:

docker run --rm --gpus all nvidia/cuda:13.0.0-base-ubuntu24.04 nvidia-smi

If you see an output that looks like this:

Fri Jul 24 18:51:55 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.82       Driver Version: 440.82       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |

You're in good shape!

See https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html for information on docker/NVIDIA setup.

You can disable GPU acceleration by using --no-gpu.

Build Docker Images

If you want to rebuild your own docker image, from the ODM folder you can type:

docker build -t myodm --no-cache .

Video Support

ODM can automatically extract images from video files (.mp4, .mov, .lrv, .ts). Just place one or more video files into the images folder and run the program as usual. Subtitles files (.srt) with GPS information are also supported. Place .srt files in the images folder, making sure that the filenames match. For example, my_video.mp4 ==> my_video.srt (case-sensitive).

Developers

Help improve our software! We welcome contributions from everyone, whether to add new features, improve speed, fix existing bugs or add support for more cameras. Check contributing guidelines.

Setup Development Environment

Docker is recommended for setting up a development environment. It's fairly easy to setup one with Linux and macOS. On Windows, I could recommend to use WSL.

Clone the repository and then run from a shell:

$ DATA=/path/to/datasets ./start-dev-env.sh

Where /path/to/datasets is a directory where you can place test datasets (it can also point to an empty directory if you don't have test datasets).

Run configure to set up the required third party libraries:

(odmdev) [user:/code] master+* Β± bash configure.sh reinstall

If you get kicked out by the setup, or you accidentally press CTRL+C, you can re-enter by doing:

docker start odmdev
docker exec -ti odmdev bash
su your_username

(change your_username to your username, and if that doesn't work, use "ubuntu")

You can now make changes to the ODM source. When you are ready to test the changes you can simply invoke:

(odmdev) [user:/code] master+* Β± ./run.sh --project-path /datasets mydataset

Stop dev container

 docker  stop odmdev

Resume dev container

(change your_username to your username)

docker start odmdev
docker exec -ti odmdev bash
su your_username

If you have questions, join the #devtalk's channel on discord: https://webodm.org/community

  1. Try to keep commits clean and simple
  2. Submit a pull request with detailed changes and test results
  3. Have fun!

Troubleshooting

The dev environment makes use of webodm/nodeodm by default. You may want to run docker pull webodm/nodeodm before running ./start-dev-env.sh to avoid using an old cached version.

In order to make a clean build, remove ~/.odm-dev-home and ODM/.setupdevenv.

Credits

ODM makes use of other awesome open source projects to perform its tasks. Among them we'd like to highlight:

About

Free and open source photogrammetry engine. Generate maps, point clouds, 3D models and DEMs from aerial and ground images. πŸ“·

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors