π’ 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
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.
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\projectAlternatively, you can also use docker:
# Windows
docker run -ti --rm -v c:/Users/youruser/datasets:/datasets webodm/odm --project-path /datasets projectFirst 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 projectYou 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 2To see all parameters:
docker run -ti --rm -v /datasets:/datasets webodm/odm --helpWhen 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.
ODM can be made accessible from a network via NodeODM.
See http://docs.webodm.org for tutorials and more guides.
See https://webodm.org/community to find a community near you.
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.
If you want to rebuild your own docker image, from the ODM folder you can type:
docker build -t myodm --no-cache .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).
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.
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.shWhere /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 reinstallIf 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 docker stop odmdev(change your_username to your username)
docker start odmdev
docker exec -ti odmdev bash
su your_usernameIf you have questions, join the #devtalk's channel on discord: https://webodm.org/community
- Try to keep commits clean and simple
- Submit a pull request with detailed changes and test results
- Have fun!
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.
ODM makes use of other awesome open source projects to perform its tasks. Among them we'd like to highlight:
