An open source command line toolkit for processing aerial drone imagery
 
 
 
 
 
 
Go to file
Dakota Benjamin 44ad6f87e3 Update README.md
Former-commit-id: 1d1459090c
2016-06-29 20:06:57 +00:00
SuperBuild remove opengv MD5 check 2016-05-07 14:52:53 -04:00
hooks Add Mvs-Texturing 2016-03-24 13:35:29 -04:00
img update odm logo 2015-03-17 21:41:15 -04:00
licenses add libext & libx11 2015-03-01 14:23:59 -05:00
modules Add Mvs-Texturing 2016-03-24 13:35:29 -04:00
opendm Add Mvs-Texturing 2016-03-24 13:35:29 -04:00
patched_files/src/graclus Revert "Revert "Upgrade Bundler + add support for Ceres solver"" 2015-08-21 14:13:42 -04:00
scripts Add Mvs-Texturing 2016-03-24 13:35:29 -04:00
tests Merge pull request #1 from Fi156/AddGCPlist 2016-02-24 10:44:37 +01:00
.dockerignore Added Dockerfile 2015-08-09 13:28:53 +02:00
.gitignore Update .gitignore 2016-02-19 12:02:50 -05:00
.gitmodules Remove ceres-solver submodule 2015-09-05 01:09:30 +02:00
CMakeLists.txt move binaries to a common directory 2015-11-30 15:47:44 +00:00
Dockerfile Update Dockerfile 2016-05-12 08:59:37 -04:00
LICENSE Rename LICENCE to LICENSE 2016-02-19 12:00:59 -05:00
README.md Update README.md 2016-06-29 20:06:57 +00:00
ccd_defs_check.py Add Mvs-Texturing 2016-03-24 13:35:29 -04:00
code_of_conduct.md Update Code of Conduct to Contributor Covenant 1.1.0 2015-06-19 10:33:12 -06:00
configure.sh Add Mvs-Texturing 2016-03-24 13:35:29 -04:00
run.py Refactor python code to comply with PEP8 2016-02-26 13:50:12 -05:00
upgradecmake.sh Add Mvs-Texturing 2016-03-24 13:35:29 -04:00

README.md

What is it?

OpenDroneMap is an open source toolkit for processing aerial drone imagery. Typical drones use simple point-and-shoot cameras, so the images from drones, while from a different perspective, are similar to any pictures taken from point-and-shoot cameras, i.e. non-metric imagery. OpenDroneMap turns those simple images into three dimensional geographic data that can be used in combination with other geographic datasets.

In a word, OpenDroneMap is a toolchain for processing raw civilian UAS imagery to other useful products. What kind of products?

  1. Point Clouds
  2. Digital Surface Models
  3. Textured Digital Surface Models
  4. Orthorectified Imagery
  5. Classified Point Clouds
  6. Digital Elevation Models
  7. etc.

So far, it does Point Clouds, Digital Surface Models, Textured Digital Surface Models, and Orthorectified Imagery.

Users' mailing list: http://lists.osgeo.org/cgi-bin/mailman/listinfo/opendronemap-users

Developer's mailing list: http://lists.osgeo.org/cgi-bin/mailman/listinfo/opendronemap-dev

Overview video: https://www.youtube.com/watch?v=0UctfoeNB_Y

Developers

Help improve our software!

Join the chat at https://gitter.im/OpenDroneMap/OpenDroneMap

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

Steps to get OpenDroneMap running:

(Requires Ubuntu 14.04 or later, see https://github.com/OpenDroneMap/odm_vagrant for running on Windows in a VM)

Support for Ubuntu 12.04 is currently BROKEN with the addition of OpenSfM and Ceres-Solver. We are working hard to get it working again in the future.

Building OpenDroneMap using git

cd path/to/odm/dir
git clone https://github.com/OpenDroneMap/OpenDroneMap.git .
export PYTHONPATH=$PYTHONPATH:`pwd`/SuperBuild/install/lib/python2.7/dist-packages:`pwd`/SuperBuild/src/opensfm
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/SuperBuild/install/lib
bash configure.sh
mkdir build && cd build && cmake .. && make && cd ..

Running OpenDroneMap

First you need a set of images, which may or may not be georeferenced. There are two ways OpenDroneMap can understand geographic coordinates. First, the images can be geotagged in their EXIF data. This is the default. Alternatively, you can create a GCP file, a process detailed here

Create a project folder and places your images in an "images" directory:

|-- /path/to/project/
    |-- images/
        |-- img-1234.jpg
        |-- ...

Then run:

python run.py --project-path /path/to/project

There are many options for tuning your project. See the wiki or run python run.py -h

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

|-- images/
    |-- img-1234.jpg
    |-- ...
|-- images_resize/
    |-- img-1234.jpg
    |-- ...
|-- opensfm/
    |-- not much useful in here
|-- pmvs/
    |-- recon0/
        |-- models/
            |-- option-0000.ply         # Dense point cloud
|-- odm_meshing/
    |-- odm_mesh.ply                    # A 3D mesh
    |-- odm_meshing_log.txt             # Output of the meshing task. May point out errors.
|-- odm_texturing/
    |-- odm_textured_model.obj          # Textured mesh
    |-- odm_textured_model_geo.obj      # Georeferenced textured mesh
    |-- texture_N.jpg                   # Associated textured images used by the model
|-- odm_georeferencing/
    |-- odm_georeferenced_model.ply     # A georeferenced dense point cloud
    |-- odm_georeferenced_model.ply.laz # LAZ format point cloud
    |-- odm_georeferenced_model.csv     # XYZ format point cloud
    |-- odm_georeferencing_log.txt      # Georeferencing log
    |-- odm_georeferencing_utm_log.txt  # Log for the extract_utm portion
|-- odm_georeferencing/
    |-- odm_orthophoto.png              # Orthophoto image (no coordinates)
    |-- odm_orthophoto.tif              # Orthophoto GeoTiff
    |-- odm_orthophoto_log.txt          # Log file
    |-- gdal_translate_log.txt          # Log for georeferencing the png file

Here are some other videos, which may be outdated:

Now that texturing is in the code base, you can access the full textured meshes using MeshLab. Open MeshLab, choose File:Import Mesh and choose your textured mesh from a location similar to the following: reconstruction-with-image-size-1200-results\odm_texturing\odm_textured_model.obj

For Ubuntu 15.10 users, this will help you get running:

sudo apt-get install python-xmltodict
sudo ln -s /usr/lib/x86_64-linux-gnu/libproj.so.9 /usr/lib/libproj.so

Alternatively, you can also run OpenDroneMap in a Docker container:

export IMAGES=/absolute/path/to/your/images
docker build -t opendronemap:latest .
docker run -v $IMAGES:/images opendronemap:latest

To pass in custom parameters to the run.py script, simply pass it as arguments to the docker run command.


Example data can be found at https://github.com/OpenDroneMap/odm_data


Long term, the aim is for the toolchain to also be able to optionally push to a variety of online data repositories, pushing hi-resolution aerials to OpenAerialMap, point clouds to OpenTopography, and pushing digital elevation models to an emerging global repository (yet to be named...). That leaves only digital surface model meshes and UV textured meshes with no global repository home.


Documentation:

For documentation, please take a look at our wiki.