An open source command line toolkit for processing aerial drone imagery. ODM turns simple 2D images into:
- Classified Point Clouds
- 3D Textured Models
- Georeferenced Orthorectified Imagery
- 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 OpenDroneMap Desktop.
The easiest way to run ODM is via docker. To install docker, see docs.docker.com. Once you have docker installed and working, you can get ODM by running from a Command Prompt / Terminal:
docker pull opendronemap/odmRun ODM by placing some images (JPEGs, TIFFs or DNGs) in a folder named “images” (for example C:\Users\youruser\datasets\project\images or /home/youruser/datasets/project/images) and simply run from a Command Prompt / Terminal:
# Windows
docker run -ti --rm -v c:/Users/youruser/datasets:/datasets opendronemap/odm --project-path /datasets project# Mac/Linux
docker run -ti --rm -v /home/youruser/datasets:/datasets opendronemap/odm --project-path /datasets projectYou can pass additional parameters by appending them to the command:
docker run -ti --rm -v /datasets:/datasets opendronemap/odm --project-path /datasets project [--additional --parameters --here]For example, to generate a DSM (--dsm) and increase the orthophoto resolution (--orthophoto-resolution 2) :
docker run -ti --rm -v /datasets:/datasets opendronemap/odm --project-path /datasets project --dsm --orthophoto-resolution 2When the process finishes, the results will be organized as follows:
|-- images/
|-- img-1234.jpg
|-- ...
|-- opensfm/
|-- see mapillary/opensfm repository for more info
|-- odm_meshing/
|-- odm_mesh.ply # A 3D mesh
|-- odm_texturing/
|-- odm_textured_model.obj # Textured mesh
|-- 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.opendronemap.org for tutorials and more guides.
We have a vibrant community forum. You can search it for issues you might be having with ODM and you can post questions there. We encourage users of ODM to participate in the forum and to engage with fellow drone mapping users.
ODM can be installed natively on Windows. Just download the latest setup from the releases page. After opening the ODM Console you can process datasets by typing:
run C:\Users\youruser\datasets\project [--additional --parameters --here]ODM has support for doing SIFT feature extraction on a GPU, which is about 2x faster than the CPU on a typical consumer laptop. To use this feature, you need to use the opendronemap/odm:gpu docker image instead of opendronemap/odm and you need to pass the --gpus all flag:
docker run -ti --rm -v c:/Users/youruser/datasets:/datasets --gpus all opendronemap/odm:gpu --project-path /datasets project --feature-type siftWhen you run ODM, if the GPU is recognized, in the first few lines of output you should see:
[INFO] Writing exif overrides
[INFO] Maximum photo dimensions: 4000px
[INFO] Found GPU device: Intel(R) OpenCL HD Graphics
[INFO] Using GPU for extracting SIFT features
The SIFT GPU implementation is CUDA-based, so should work with most NVIDIA graphics cards of the GTX 9xx Generation or newer.
If you have an NVIDIA card, you can test that docker is recognizing the GPU by running:
docker run --rm --gpus all nvidia/cuda:10.0-base nvidia-smiIf 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://github.com/NVIDIA/nvidia-docker and https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker for information on docker/NVIDIA setup.
Starting from version 3.0.4, 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 our code of conduct, the contributing guidelines and how decisions are made.
Install pixi, (or use the devcontainer):
MSVC and the Windows SDK come from a host install of Visual Studio 2022 or Build Tools (conda-forge Windows native notes):
- Desktop development with C++
- Windows 10/11 SDK
pixi install --locked
pixi run build
pixi run test
pixi run smokeProcess a dataset (from the repo root, with a pixi shell or pixi run):
pixi run odm -- --project-path ~/datasets mydataset
# or, after: eval "$(pixi shell-hook)"
./run.py --project-path ~/datasets mydatasetGPU builds use the gpu environment: pixi install -e gpu && pixi run -e gpu build.
CPU image (matches CI):
pixi run docker-buildGPU image:
pixi run docker-build -- --gpuThese stamp the image with the OCI labels (revision, version, created) and tag
it opendronemap/odm:latest (:gpu) on master, or opendronemap/odm:<branch>
off master. Pass a custom tag or extra docker build flags after --, e.g.
pixi run docker-build -- -t my_odm_image --no-cache.
If you have questions, join the developer's chat at https://community.opendronemap.org/c/developers-chat/21
- Try to keep commits clean and simple
- Submit a pull request with detailed changes and test results
- Have fun!
ODM makes use of several libraries and other awesome open source projects to perform its tasks. Among them we'd like to highlight:
OpenDroneMap Authors ODM - A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. OpenDroneMap/ODM GitHub Page 2020; https://github.com/OpenDroneMap/ODM

