A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. πŸ“·

Overview

ODM Logo

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

images-diag

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

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 run ODM by placing some images (JPEGs or TIFFs) 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 project

You 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 2

Viewing Results

When 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.

API

ODM can be made accessible from a network via NodeODM.

Documentation

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

Forum

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 partecipate in the forum and to engage with fellow drone mapping users.

Snap Package

ODM is now available as a Snap Package from the Snap Store. To install you may use the Snap Store (available itself as a Snap Package) or the command line:

sudo snap install opendronemap

To run, you will need a terminal window into which you can type:

opendronemap

# or

snap run opendronemap

# or

/snap/bin/opendronemap

Snap packages will be kept up-to-date automatically, so you don't need to update ODM manually.

GPU Acceleration

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

When 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 OpenCL-based, so should work with most graphics card (not just NVIDIA).

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-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://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.

WSL or WSL2 Install

Note: This requires that you have installed WSL already by following the instructions on Microsoft's Website.

You can run ODM via WSL or WSL2 by downloading the rootfs.tar.gz file from the releases page on GitHub. Once you have the file saved to your Downloads folder in Windows, open a PowerShell or CMD window by right-clicking the Flag Menu (bottom left by default) and selecting "Windows PowerShell", or alternatively by using the Windows Terminal from the Windows Store.

Inside a PowerShell window, or Windows Terminal running PowerShell, type the following:

# PowerShell
wsl.exe --import ODM $env:APPDATA\ODM C:\path\to\your\Downloads\rootfs.tar.gz

Alternatively if you're using CMD.exe or the CMD support in Windows Terminal type:

# CMD
wsl.exe --import ODM %APPDATA%\ODM C:\path\to\your\Downloads\rootfs.tar.gz

In either case, make sure you replace C:\path\to\your\Downloads\rootfs.tar.gz with the actual path to your rootfs.tar.gz file.

This will save a new Hard Disk image to your Windows AppData folder at C:\Users\username\AppData\roaming\ODM (where username is your Username in Windows), and will set-up a new WSL "distro" called ODM.

You may start the ODM distro by using the relevant option in the Windows Terminal (from the Windows Store) or by executing wsl.exe -d ODM in a PowerShell or CMD window.

ODM is installed to the distro's /code directory. You may execute it with:

/code/run.sh

Updating ODM in WSL

The easiest way to update the installation of ODM is to download the new rootfs.tar.gz file and import it as another distro. You may then unregister the original instance the same way you delete ODM from WSL (see next heading).

Deleting an ODM in WSL instance

wsl.exe --unregister ODM

Finally you'll want to delete the files by using your Windows File Manager (Explorer) to navigate to %APPDATA%, find the ODM directory, and delete it by dragging it to the recycle bin. To permanently delete it empty the recycle bin.

If you have installed to a different directory by changing the --import command you ran to install you must use that directory name to delete the correct files. This is likely the case if you have multiple ODM installations or are updating an already-installed installation.

Native Install (Ubuntu 20.04)

You can run ODM natively on Ubuntu 20.04 LTS (although we don't recommend it):

  1. Download the source from here
  2. Run bash configure.sh install
  3. Download a sample dataset from here (about 550MB) and extract it in /datasets/aukerman
  4. Run ./run.sh --project-path /datasets odm_data_aukerman

Updating a native installation

When updating to a newer version of ODM, it is recommended that you run

bash configure.sh reinstall

to ensure all the dependent packages and modules get updated.

Build From Source

If you want to rebuild your own docker image (if you have changed the source code, for example), from the ODM folder you can type:

docker build -t my_odm_image --no-cache .

When building your own Docker image, if image size is of importance to you, you should use the --squash flag, like so:

docker build --squash -t my_odm_image .

This will clean up intermediate steps in the Docker build process, resulting in a significantly smaller image (about half the size).

Experimental flags need to be enabled in Docker to use the --squash flag. To enable this, insert the following into the file /etc/docker/daemon.json:

{
   "experimental": true
}

After this, you must restart docker.

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 our code of conduct, the contributing guidelines and how decisions are made.

For Linux users, the easiest way to modify the software is to make sure docker is installed, 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

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

If you have questions, join the developer's chat at https://community.opendronemap.org/c/developers-chat/21

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

Credits

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

Citation

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

Issues
  • Segfault while merging depthmaps

    Segfault while merging depthmaps

    Hi, I'm running the latest ODM Docker image (pulled last night) on a VPS running Debian with 24GB of RAM and 8 CPU cores. I'm currently trying to stitch together a survey that consists of around 270 photos, totaling 1-1.5GB. During processing, I get this:

    2017-03-10 13:48:42,183 Cleaning depthmap for image DJI_0062.JPG 2017-03-10 13:48:43,404 Cleaning depthmap for image DJI_0021.JPG 2017-03-10 13:48:44,682 Cleaning depthmap for image DJI_0060.JPG 2017-03-10 13:48:46,072 Cleaning depthmap for image DJI_0162.JPG 2017-03-10 13:48:47,415 Cleaning depthmap for image DJI_0236.JPG 2017-03-10 13:48:52,428 Cleaning depthmap for image DJI_0050.JPG 2017-03-10 13:48:53,772 Cleaning depthmap for image DJI_0052.JPG 2017-03-10 13:48:55,157 Cleaning depthmap for image DJI_0228.JPG 2017-03-10 13:48:56,464 Cleaning depthmap for image DJI_0087.JPG 2017-03-10 13:48:57,821 Cleaning depthmap for image DJI_0124.JPG 2017-03-10 13:48:59,103 Cleaning depthmap for image DJI_0118.JPG 2017-03-10 13:49:00,459 Cleaning depthmap for image DJI_0079.JPG 2017-03-10 13:49:01,845 Cleaning depthmap for image DJI_0241.JPG 2017-03-10 13:49:06,852 Cleaning depthmap for image DJI_0051.JPG 2017-03-10 13:49:08,309 Merging depthmaps Segmentation fault (core dumped) Traceback (most recent call last): File "/code/run.py", line 55, in plasm.execute(niter=1) File "/code/scripts/opensfm.py", line 90, in process (context.pyopencv_path, context.opensfm_path, tree.opensfm)) File "/code/opendm/system.py", line 28, in run raise Exception("Child returned {}".format(retcode)) Exception: Child returned 139 Any ideas? I'm fairly new to the project and I'm not sure where to dig in.

    troubleshooting 
    opened by bstempi 63
  • Align of resulting mosaic (in case of multispectral imaging)

    Align of resulting mosaic (in case of multispectral imaging)

    Each band of multispectral sensors (e.g. Micasense Rededge, Sequoia) is taken with separate lens, where different angle for each band is appied (each band image is in separate file). When sources images are merged to multiband image, there bands are significantly shifted each other. Therefore, each band must be processed separately in case of mosaicking. Unfortunately, when merging resulting mosaics, similar shift is present: odm Possibility of aligning resulting mosaics would be appreciated.

    Thanks.

    enhancement 
    opened by ivopavlik 59
  • m(o)ve over smvs

    m(o)ve over smvs

    There are one big limitation: I have replaced smvs with mve, but perhaps it should be optioned instead.

    enhancement help wanted 
    opened by smathermather 47
  • Update OpenSfM

    Update OpenSfM

    This PR brings in the latest changes to OpenSfM, which among other things include the reprojection of derivatives which are now computed analytically instead of autodiff-ed (20%-45% speed-up on opensfm reconstruct)

    WIP

    enhancement 
    opened by pierotofy 45
  • Fewer than 3 GCPs have correspondences in the generated model.

    Fewer than 3 GCPs have correspondences in the generated model.

    I have been repeatedly encountering an issue with the GCPs by running ODM with the Toledo input and also with my own data. I have checked the GPS locations in the exif data from the images. The GCPs are in the right locations and the coordinates are in UTM with the correct header. But I get always the same error:

    Error in Georef: Fewer than 3 GCPs have correspondences in the generated model. [ERROR] Georeferencing failed. Traceback (most recent call last): File "/home/vman/vman/OpenDroneMap/scripts/odm_georeferencing.py", line 124, in process '-outputCoordFile {coords}'.format(**kwargs)) File "/home/vman/vman/OpenDroneMap/opendm/system.py", line 28, in run raise Exception("Child returned {}".format(retcode)) Exception: Child returned 1

    The odm_georeferencing_log.txt files says at the bottom: Successfully loaded /home/vman/vman/OpenDroneMap/tests/test_data/odm_texturing/odm_textured_model.obj. Error in Georef: Fewer than 3 GCPs have correspondences in the generated model.

    I have more than 3 GCPs in the gcp_list.txt file. Everything works fine by ignoring the gcp_list.txt file (--use-exif option).

    Is there still something I am overseeing?

    Thanks Volker

    bug 
    opened by vroeb 43
  • Does ODM support Tif format

    Does ODM support Tif format

    I often use the multi-spectral camera to capture images in the experiment filed. So, I wonder if I can use Tif format files with multi-band, e.g. 10 bands in one Tif image, as input source images after some modifications. Is it a heavy work if I do this modifications? Thank you.

    enhancement help wanted 
    opened by xialang2012 42
  • Fast Orthophoto via sparse reconstruction

    Fast Orthophoto via sparse reconstruction

    This PR adds support for a new --fast-orthophoto flag, which skips the opensfm dense reconstruction step and uses the sparse reconstruction to generate an orthophoto, while skipping the generation of the full 3D model (the poisson mesh). This is going to benefit users that just want an orthophoto and works especially well on flat areas such as farm fields.

    List of changes:

    • Added --fast-orthophoto, --mesh-neighbors and --mesh-resolution parameters.
    • Removed old 2.5D mesh module and related flags.
    • Wrote new 2.5D mesh program, based on VTK7. We cannot use the binaries that ship with Ubuntu because the parallel features, which are critical for good performance, are not available in the binary packages. VTK7 adds time to the compilation, but doesn't increase image size in docker. The 2.5D mesh works by interpolating a DSM using shepard's method and performing a greedy terrain decimation, which allows us to retain the shape of buildings even with few points and fill-in gaps in the terrain. It's multithreaded, so meshing will be relatively fast especially on machines with multiple cores.

    image

    image

    Fast orthophoto:

    image

    • Cleaned up code that wasn't being used anymore
    • Made learner docker images, most of the files in /code/SuperBuild/src are not needed because they are installed in /code/SuperBuild/install (with a few exceptions)
    • Users can continue computing a DSM/DTM from the sparse point cloud when --fast-orthophoto is used.
    • Increased the min-num-features parameter default to 8000. This is both to help users get better orthophotos using the --fast-orthophoto flag, but also to help users get better overall results even when using the dense reconstruction. Often times 4000 isn't sufficient for areas of high vegetation and new users seem confused. If this is not a good idea, please let me know.
    • Users can keep using the dense reconstruction for generating the orthophoto and they can choose to use the new 2.5D mesh module. The --use-25dmesh flag remains. When --fast-orthophoto is used, --use-25dmesh is implicitly set.

    I recommend testing also with the changes introduced here: https://github.com/OpenDroneMap/mvs-texturing/pull/1

    The PR is stable enough to be tested, but do not merge yet. I'd love to hear feedback and do some more testing, especially to make sure that nothing in the existing pipeline broke. πŸ˜„

    enhancement 
    opened by pierotofy 42
  • Add SLAM module

    Add SLAM module

    This PR adds a SLAM module to OpenDroneMap so that it is possible to use videos as input instead of still images. It uses the open-source library ORB_SLAM2 to compute the camera trajectory and then continues with PMVS and the rest of the pipeline.

    Building the SLAM module is set as an option in the CMake files and the default is not to build it.

    Here's a short guide on how to use it

    opened by paulinus 41
  • Generating a footprint and average % overlap

    Generating a footprint and average % overlap

    At some point during reconstruction, is it possible to produce an estimate of overlap or generate something like this:

    footprint

    I think it would help with benchmarking and being able to discriminate between bad runs and bad photosets.

    enhancement help wanted 
    opened by dakotabenjamin 41
  • when attempting to run open drone map: Permission Denied

    when attempting to run open drone map: Permission Denied

    When I attempt to run open drone map in a new install it says permission is denied even when I have sudo access.

    opened by Bavar2142 40
  • vulnerable packages security

    vulnerable packages security

    Hi , i am using open drone map and when i scanned it for security , the report came up with two packages which are critically vulnerable to cyber attacks - 1) PYYAML 2) Pillow . Is there any way we can fix that ? please see the attached screenshot for both packages . image image

    is there way we can resolve this to be used ?

    enhancement help wanted 
    opened by karankatiyar92 1
  • Feature request: Add support of Popsift or AliceVision for pipeline steps

    Feature request: Add support of Popsift or AliceVision for pipeline steps

    During research - I noticed a lot of new SFM, MVS, algorithms that have GPU support. Can we provide an opportunity to create something like ODM-GPU with already created functionality, but also with support for new technologies?

    enhancement help wanted 
    opened by markFieldman 1
  • Multispectral improvements [WIP]

    Multispectral improvements [WIP]

    Improves multispectral calibration / processing.

    TODO:

    • [ ] Improve parameter passing (JSON file instead of multiple command line parameters)
    • [ ] Testing
    enhancement help wanted 
    opened by pierotofy 2
  • Skip corrupted images

    Skip corrupted images

    ODM should probably ignore (emit a warning) corrupted images and process whatever it can instead of stopping.

    enhancement 
    opened by pierotofy 1
  • Feature Request: Option to determine --gps-accuracy and then pass that to pipeline for processing

    Feature Request: Option to determine --gps-accuracy and then pass that to pipeline for processing

    How did you install OpenDroneMap? (Docker, natively, ...)?

    NA

    What's your browser and operating system? (Copy/paste the output of https://www.whatismybrowser.com/)

    NA

    What is the problem?

    Having an accurate assessment of the --gps-accuracy for a particular collect is pretty difficult, especially on non-RKT/PPK platforms.

    What should be the expected behavior? If this is a feature request, please describe in detail the changes you think should be made to the code, citing files and lines where changes should be made, if possible.

    I think, given our improved reporting, that we should have an option for ODM to self-optimize the --gps-accuracy flag early in the pipeline when it starts doing the reconstruction and determines that value. Then, it should pass that value back into the pipeline and reprocess what it needs to with that new --gps-accuracy value forward.

    How can we reproduce this? (What steps did you do to trigger the problem? What parameters are you using for processing? If possible please include a copy of your dataset uploaded on Google Drive or Dropbox. Be detailed)

    Use the default 10m on a dataset with better than 10m --gps-accuracy.
    Read the report, note the GPS Error value.
    Re-process that same dataset using the GPS Error from the report (or I round up to the next whole meter to not over-constrain).
    Read the report.
    Observe that the GPS Error has shrunk even further.

    I think this could be critical for helping us reduce our real/reported error, especially in situations where folks are A/B testing our pipeline against another pipeline/report and don't understand why our processing seems to indicate higher error/imprecision.

    opened by Saijin-Naib 4
  • Strange output

    Strange output

    How did you install OpenDroneMap? (Docker, natively, ...)?

    WebODM windows and nodeODM in docker in ubuntu

    What's your browser and operating system?

    Chrome windows/Linux

    What is the problem?

    I have an GCP list in EPSG:5850, opening the tiff in QGis and the info say WGS84 UTM but the coordinates look like EPSG:5850.

    What should be the expected behavior? If this is a feature request, please describe in detail the changes you think should be made to the code, citing files and lines where changes should be made, if possible.

    Would be best if the output was in the same system as the input.

    How can we reproduce this? (What steps did you do to trigger the problem? What parameters are you using for processing? If possible please include a copy of your dataset uploaded on Google Drive or Dropbox. Be detailed)

    just process something with EPSG:5850

    enhancement help wanted 
    opened by APOS80 1
  • Missing a setting

    Missing a setting

    What's your browser and operating system? (Copy/paste the output of https://www.whatismybrowser.com/)

    Chrome Windows 10

    What is the problem?

    I miss a setting!

    I would like setting that says that a point has to be in 2 images or more to be used. Theres a line in openvms.py that can be changes in ODM so it should be doable.

    What should be the expected behavior?

    better accuracy

    How can we reproduce this? (What steps did you do to trigger the problem? What parameters are you using for processing? Please include multiple screenshots of the problem! If possible please include a copy of your dataset uploaded on Google Drive or Dropbox. Be detailed)

    nope

    opened by APOS80 0
  • Using SIFT without GPS information

    Using SIFT without GPS information

    Hi, I noticed that if we do not have GPS information, the code currently forces us to use BOW matching with HAHOG ("osfm.py", lines 205-207). However, I would like to use SIFT with brute force matching. From looking at the github history, this was put in place before SIFT was supported. Is there a reason for using BOW matching + HAHOG when there is not GPS information?

    if not has_gps:
        log.ODM_INFO("No GPS information, using BOW matching")
        use_bow = True
    
    question 
    opened by nikhil765 1
  • Possible Bug:  We're parsing filesystem metadata files

    Possible Bug: We're parsing filesystem metadata files

    How did you install OpenDroneMap? (Docker, natively, ...)?

    N/A

    What's your browser and operating system? (Copy/paste the output of https://www.whatismybrowser.com/)

    N/A

    What is the problem?

    ODM is choking on parsing the MacOS finder-created metadata/index/preview files, as reported here:
    https://community.opendronemap.org/t/shape-error/8586

    What should be the expected behavior? If this is a feature request, please describe in detail the changes you think should be made to the code, citing files and lines where changes should be made, if possible.

    We should probably specifically avoid parsing any of those files created by Win/Mac/Linux globally (across all platforms), since we don't know how many times the data will change hands/platforms/hosts.

    How can we reproduce this? (What steps did you do to trigger the problem? What parameters are you using for processing? If possible please include a copy of your dataset uploaded on Google Drive or Dropbox. Be detailed)

    Let a MacOS computer handle the data directory and put the Finder metadata files there, then process the entire folder without filtering them out.

    enhancement help wanted 
    opened by Saijin-Naib 0
  • Feature Request: libcaesium integration

    Feature Request: libcaesium integration

    How did you install OpenDroneMap? (Docker, natively, ...)?

    Native

    What's your browser and operating system? (Copy/paste the output of https://www.whatismybrowser.com/)

    NA

    What is the problem?

    JPEGs coming out of most sensors are not well-optimized, and there are a host of lossless optimizations that can be applied to them to reduce file size. Typically, this is on the order of 20% or so.

    What should be the expected behavior? If this is a feature request, please describe in detail the changes you think should be made to the code, citing files and lines where changes should be made, if possible.

    I think looking at libcaesium for ingested images into ODM would be neat, as it could result in a smaller local database store, smaller upload to the cloud for Lightning, and smaller shuffling around for cluster/node operations.

    How can we reproduce this? (What steps did you do to trigger the problem? What parameters are you using for processing? If possible please include a copy of your dataset uploaded on Google Drive or Dropbox. Be detailed)

    Run Caesium Image Compressor against a dataset. SOOC Screenshot 2021-08-09 161413

    Lossless Optimization with libcaesium Screenshot 2021-08-09 161422

    enhancement help wanted 
    opened by Saijin-Naib 0
Releases(v2.6.5)
  • v2.6.5(Oct 15, 2021)

  • v2.6.4(Sep 26, 2021)

  • v2.5.7(Jun 21, 2021)

  • v2.5.6(Jun 16, 2021)

  • v2.5.5(Jun 10, 2021)

  • v2.5.3(Jun 5, 2021)

  • v2.5.0(May 24, 2021)

  • 2.4.7(Mar 24, 2021)

    • [x] Thermal support (MicaSense Altum)
    • [x] Faster processing (removed odm_georef)
    • [x] GPU support (feature extraction)
    • [x] Orthorectification module
    • [x] Point cloud to DEM (pc2dem) module
    • [x] Bug fixes / improvements
    Source code(tar.gz)
    Source code(zip)
  • v2.4.1(Jan 28, 2021)

  • v2.3.1(Dec 8, 2020)

  • v2.2.1(Nov 15, 2020)

  • v2.2.0(Nov 10, 2020)

  • v2.1.0(Nov 3, 2020)

  • v2.0.0(Sep 22, 2020)

    • Python 3
    • Ubuntu 18.04
    • Image Masks
    • Image Geolocation Files
    • Speed improvements
    • Memory improvements
    • Dependencies upgrades
    • Bug fixes
    • Unicorns
    Source code(tar.gz)
    Source code(zip)
  • v1.0.2(Aug 21, 2020)

  • v1.0.1(Jul 11, 2020)

    • Pseudo georeferencing support (for non-georeferenced datasets)
    • SIFT features
    • Sentera-6X sensor support
    • Radiometric calibration support
    • Ground rectification algorithm
    • Optimize disk flag
    • RTK support
    • Generate camera positions (JSON)
    • Faster flann matching
    • Faster filterpoints
    • Lots of bug fixes
    Source code(tar.gz)
    Source code(zip)
  • v0.9.8(Feb 3, 2020)

    • TIFF support
    • Faster split-merge
    • Brown camera improvements
    • MVE progress updates
    • OpenSfM engine update
    • Multispectral camera support (experimental)
    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(Oct 15, 2019)

  • v0.7.0(Jun 9, 2019)

  • v0.5.0(May 1, 2019)

    • Replaced SMVS with MVE for dense point clouds
    • Better point cloud filtering
    • DEM generation memory improvements
    • Lots of speed improvements, bug fixes
    Source code(tar.gz)
    Source code(zip)
  • v0.4-RC1(Aug 30, 2018)

    Check out our docs: http://docs.opendronemap.org/ And join the conversation: http://community.opendronemap.org/

    Changelog: New Features:

    • 2.5 dimensional mesh
    • Create georef transformation file
    • DEM/DTM modeling with ground classification
    • Add python contributions/plugin support
      • vegetation indices
      • blender
      • video 360
    • Fast orthophoto with sparse reconstruction
    • Add ID column support for GCP files
    • Expose more parameters for OpenSfM (depth map, etc)
    • Add support for laz output

    Fixes/updates:

    • Updated PDAL pipeline and version
    • Increase useful output to stdout
    • Remove resizing of original images (fixes issue with georeferencing
    • Fix GPS altitude tag parsing
    • Pyexiv2 crashing issue
    • Fix x,y dimensions in exif after resize
    • Improve install/configure script
    • Improve usability
    • improve readme instructions
    • remove depreciated parameters
    • Update dependencies
    • improve docker usability
    • fix utm bug: https://github.com/OpenDroneMap/WebODM/issues/267
    • replace jhead with exiv2
    • fix end_with tag with mvs-texturing
    • add ability to skip convert_to_las
    • fix issue with single-digit utm zones
    • Handle bundler files that have invalid/empty camera parameters
    • remove sudo statements from config
    • Fixed single-material rendering bug in odm_orthophoto
    • Split-merge, for very large datasets
    • Improve GDAL memory management
    • Presever double coordinates precision in odm_georef
    • Fix GCP accuracy issues
    • odm_georef output to binary instead of ply
    • fix mvs-tex temp dir issues
    • make csv export optional
    • improve odm_georef processing speed
    • use cmake build type for internal modules
    • remove mesh command in opensfm (currently unused)
    • fix gippy download
    • fix build processes in config script
    • Fix VTK build

    Known issues:

    • Still only works natively on 16.04, but docker is well supported (and recommended).

    TODO:

    • double check documentation
    • create lean release zip file (no git folder)
    Source code(tar.gz)
    Source code(zip)
    OpenDroneMap-v0.4.tar.xz(659.61 KB)
    OpenDroneMap-v0.4.zip(885.74 KB)
  • v0.3.1(May 10, 2017)

  • v0.3(May 4, 2017)

    Changelog

    Features:

    • Video SLAM processing (optional install) see wiki
    • UI Changes:
      • Global settings file
      • project path setting
      • verbose flag
      • parameter name simplification
    • GCP improvements:
      • Allow EXIF override
      • Automatically find gcp_list.txt
      • Use original images for georeferencing
      • Multithreaded
    • add opensfm-processes n flag for memory management
    • expose tone mapping parameter to mvs-texturing
    • Add optional modules in contrib/ directory: NDVI, GRASS DEM, Blender
    • Expose odm_orthophoto settings: BigTIFF, no-tiled, compression type
    • DEM generation using PDAL and a progressive morphological filter
    • More robust installation process (See readme)

    Fixes

    • better logging for subprocesses
    • update GDAL for multithreading
    • fix texturing global illumination
    • allow for partial restart of opensfm
    • Minimize Dockerfile
    • and more....

    Known Bugs

    • using a GCP file, the resized images must be very close in size to the originals, or it will either fail or come out very weird.
    • OpenSfM uses a lot of memory in systems with a high number of processors. For now, use --opensfm-processes n where n is smaller than your total number of cores (find that out by running nproc)
    Source code(tar.gz)
    Source code(zip)
    OpenDroneMap-v0.3.tar.gz(816.59 KB)
    OpenDroneMap-v0.3.zip(850.94 KB)
  • v0.3-RC1(Apr 25, 2017)

    Changelog

    Features:

    • Video SLAM processing (optional install) see wiki
    • UI Changes:
      • Global settings file
      • project path setting
      • verbose flag
      • parameter name simplification
    • GCP improvements:
      • Allow EXIF override
      • Automatically find gcp_list.txt
      • Use original images for georeferencing
      • Multithreaded
    • add opensfm-processes n flag for memory management
    • expose tone mapping parameter to mvs-texturing
    • Add optional modules in contrib/ directory: NDVI, GRASS DEM, Blender
    • Expose odm_orthophoto settings: BigTIFF, no-tiled, compression type
    • DEM generation using PDAL and a progressive morphological filter
    • More robust installation process (See readme)

    Fixes

    • better logging for subprocesses
    • update GDAL for multithreading
    • fix texturing global illumination
    • allow for partial restart of opensfm
    • Minimize Dockerfile
    • and more....
    Source code(tar.gz)
    Source code(zip)
    OpenDroneMap-v0.3.tar.gz(816.67 KB)
    OpenDroneMap-v0.3.zip(851.05 KB)
  • v0.2(Dec 19, 2016)

    Changelog

    New Features

    • MVS-Texturing: new texturing algorithm vastly improves blending, seam leveling, color correction, and overall quality using algorithms described in http://www.gcc.tu-darmstadt.de/media/gcc/papers/Waechter-2014-LTB.pdf
    • Updates OpenSfM to more recent version
    • Optional ability to install with semi-global matching point cloud densification technique. See here

    Minor changes

    • More streamlined installation
    • Improves Docker installation (note changed process in readme)
    • Parallelization of early tasks
    • Bug fixes and code cleanup
    Source code(tar.gz)
    Source code(zip)
    OpenDroneMap-v0_2.zip(589.32 KB)
  • v0.2-RC1(Nov 23, 2016)

    Changelog

    New Features

    • MVS-Texturing: new texturing algorithm vastly improves blending, seam leveling, color correction, and overall quality
    • Updates OpenSfM to more recent version
    • Optional ability to install with semi-global matching point cloud densification technique. See here

    Minor changes

    • More streamlined installation
    • Improves Docker installation (note changed process in readme)
    • Parallelization of early tasks
    • Bug fixes and code cleanup
    Source code(tar.gz)
    Source code(zip)
    OpenDroneMap-v0_2-RC1.tar.gz(564.30 KB)
    OpenDroneMap-v0_2-RC1.zip(590.66 KB)
  • v0.1(Jun 15, 2016)

    Changelog for v0.1-RC1

    Huge update, we've incorporated a framework for processing along the toolchain and improved the installation process.

    Installation

    • cmake superbuild for all components
    • Now you will run the following to install or update ODM:
    bash ./configure.sh
    mkdir build && cd build && cmake .. && make && cd ..
    
    # copy paste the following (with correct directory structure) into your ~/.bashrc (or other preferred method) (requires logout/in to work)
    export PYTHONPATH=$PYTHONPATH:<ODMDIR>/SuperBuild/install/lib/python2.7/dist-packages:<ODMDIR>/SuperBuild/src/opensfm
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<ODMDIR>/SuperBuild/install/lib
    

    Running ODM

    Use these instructions to run the processing script. Note there are significant differences from the previous version, namely you have to specify --project-path

    Code restructure

    • Object Oriented Code
    • Ecto framework
    • Project tree:
      • Your ODM project will have a more organized structure. One big change is that your images must be placed in a "images/" subdirectory in the project folder.
    • Testing framework

    Feature additions / changes

    • Add XYZ pointcloud output
    • benchmarking with --time
    • Replacement of LASTools with PDAL
    • Control script updates - --rerun-from, --rerun-all
    • Remove local ccd_defs
    Source code(tar.gz)
    Source code(zip)
    OpenDroneMap-v0_1.zip(180.80 MB)
  • v0.1-RC1(May 17, 2016)

    Changelog for v0.1-RC1

    Huge update, we've incorporated a framework for processing along the toolchain and improved the installation process.

    Installation

    • cmake superbuild for all components
    • Now you will run the following to install or update ODM:
    bash ./configure.sh
    mkdir build && cd build && cmake .. && make && cd ..
    
    # copy paste the following (with correct directory structure) into your ~/.bashrc (or other preferred method) (requires logout/in to work)
    export PYTHONPATH=$PYTHONPATH:<ODMDIR>/SuperBuild/install/lib/python2.7/dist-packages:<ODMDIR>/SuperBuild/src/opensfm
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<ODMDIR>/SuperBuild/install/lib
    

    Code restructure

    • Object Oriented Code
    • Ecto framework
    • Project tree:
      • Your ODM project will have a more organized structure. One big change is that your images must be placed in a "images/" subdirectory in the project folder.
    • Testing framework

    Feature additions / changes

    • Add XYZ pointcloud output
    • benchmarking with --time
    • Replacement of LASTools with PDAL
    • Control script updates - --rerun-from, --rerun-all
    • Remove local ccd_defs

    Planned updates for next release (v0.1)

    • None! This is a release candidate which means only bug fixes allowed.

    Release/Versioning semantics

    Beta

    | | | | --- | --- | | 0.1-RC1 | Beta Release Candidate | | 0.1 | Beta Release | | 0.1.1 | Bug Fix Release | | 0.2-RC1 | Feature update RC | | Etc. | |

    Major Release

    | | | | --- | --- | | 1.0-RC1 | Major Release Candidate | | 1.0 | Major Release | | 1.0.1 | Bug Fixes | | 1.1 | Minor Feature update (no api changes) | | Etc. | |

    Source code(tar.gz)
    Source code(zip)
    OpenDroneMap-0_1-RC1.zip(579.84 KB)
  • prealpha-final(Mar 15, 2016)

Owner
OpenDroneMap
Creating the most sustainable drone mapping software with the friendliest community on earth.
OpenDroneMap
Interactive, thoroughly customizable maps in native Android, iOS, macOS, Node.js, and Qt applications, powered by vector tiles and OpenGL

Mapbox GL Native A C++ library that powers customizable vector maps in native applications on multiple platforms by taking stylesheets that conform to

Mapbox 4.1k Oct 18, 2021
Entwine - point cloud organization for massive datasets

Build Status Entwine is a data organization library for massive point clouds, designed to conquer datasets of hundreds of billions of points as well a

Connor Manning 276 Oct 8, 2021
Open Source Routing Engine for OpenStreetMap

β–ˆβ–ˆβ–’ β–ˆβ–“ β–„β–„β–„ β–ˆβ–ˆβ–“ β–ˆβ–ˆβ–‘ β–ˆβ–ˆ β–„β–„β–„ β–ˆβ–ˆβ–“ β–ˆβ–ˆβ–“ β–„β–„β–„ β–“β–ˆβ–ˆβ–‘ β–ˆβ–’β–’β–ˆβ–ˆβ–ˆβ–ˆβ–„ β–“β–ˆβ–ˆβ–’ β–“β–ˆβ–ˆβ–‘ β–ˆβ–ˆβ–’β–’β–ˆβ–ˆβ–ˆβ–ˆβ–„ β–“β–ˆβ–ˆβ–’ β–“β–ˆβ–ˆβ–’ β–’β–ˆβ–ˆβ–ˆβ–ˆβ–„ β–“β–ˆβ–ˆ β–ˆβ–’β–‘β–’β–ˆβ–ˆ β–€β–ˆβ–„

valhalla 1.7k Oct 14, 2021
A command-line tool for converting heightmaps in GeoTIFF format into tiled optimized meshes.

TIN Terrain TIN Terrain is a command-line tool for converting heightmaps presented in GeoTIFF format into tiled optimized meshes (Triangulated Irregul

HERE Technologies 425 Oct 19, 2021
OpenOrienteering Mapper is a software for creating maps for the orienteering sport.

OpenOrienteering Mapper OpenOrienteering Mapper is an orienteering mapmaking program and provides a free and open source alternative to existing comme

null 278 Oct 5, 2021
Advanced map enabled for macOS Monterey

AdvancedMap Lilu plugin for enabling modern maps on non-Apple Silicon hardware. Advanced maps were added in macOS 12 Monterey, and worked fine on Inte

Joshua May 4 Sep 22, 2021
a language for fast, portable data-parallel computation

Halide Halide is a programming language designed to make it easier to write high-performance image and array processing code on modern machines. Halid

Halide 4.6k Oct 16, 2021
Earth observation data cubes from GDAL image collections

gdalcubes - Earth observation data cubes from GDAL image collections gdalcubes is a library to represent collections of Earth Observation (EO) images

Marius Appel 68 Oct 20, 2021
A fast algorithm for finding the pole of inaccessibility of a polygon (in JavaScript and C++)

A fast algorithm for finding polygon pole of inaccessibility, the most distant internal point from the polygon outline (not to be confused with centroid), implemented as a JavaScript library. Useful for optimal placement of a text label on a polygon.

Mapbox 1.1k Oct 7, 2021
Terrain Analysis Using Digital Elevation Models (TauDEM) software for hydrologic terrain analysis and channel network extraction.

TauDEM (Terrain Analysis Using Digital Elevation Models) is a suite of Digital Elevation Model (DEM) tools for the extraction and analysis of hydrolog

David Tarboton 171 Oct 21, 2021
2D and 3D map renderer using OpenGL ES

Tangram ES Tangram ES is a C++ library for rendering 2D and 3D maps from vector data using OpenGL ES. It is a counterpart to Tangram. This repository

Tangram 705 Oct 10, 2021
A 3D Mapping Engine & SDK for OpenSceneGraph.

osgEarth - 3D Mapping Engine & C++ SDK Welcome to osgEarth! osgEarth gives you the power to add beautiful 2D or 3D maps to your C++ application. Get s

Glenn 992 Oct 14, 2021
Alternative LAZ implementation for C++ and JavaScript

What is this? Alternative LAZ implementation. It supports compilation and usage in JavaScript, usage in database contexts such as pgpointcloud and Ora

Howard Butler 43 Oct 13, 2021
A lean, efficient, accurate geohash encoder and decoder library implemented in C

Geohash encoder/decoder in C A lean, efficient, accurate geohash encoder and decoder library implemented in C. It does not depend on the C standard li

Christopher Wellons 14 Sep 29, 2021
Computational geometry and spatial indexing on the sphere

S2 Geometry Library Overview This is a package for manipulating geometric shapes. Unlike many geometry libraries, S2 is primarily designed to work wit

Google 1.5k Oct 14, 2021
A C++17 image representation, processing and I/O library.

Selene Selene is a C++17 image representation, processing, and I/O library, focusing on ease of use and a clean, modern, type-safe API. Overview: Brie

Michael Hofmann 268 Aug 28, 2021
Mapnik implemention of Mapbox Vector Tile specification

mapnik-vector-tile A Mapnik implemention of Mapbox Vector Tile specification. Provides C++ headers that support rendering geodata into vector tiles an

Mapbox 523 Sep 26, 2021
experimental project to create PBF vector tiles

Vector tiles producer This is an experimental project to create vector tiles. What does this do? This creates vector tiles based on the mapnik proto f

vross 30 Jan 19, 2021
gSLICr: Real-time super-pixel segmentation

gSLICr: SLIC superpixels at over 250Hz This is the software bundle "gSLICr", a library for real-time superpixel segmentation written in C++ and CUDA.

Carl Yuheng Ren 285 Oct 11, 2021