Skip to content

edgarriba cmake branch info (for developers)

Fi156 edited this page Feb 23, 2016 · 3 revisions

Hints for the installation can be found at: https://github.com/OpenDroneMap/OpenDroneMap/wiki/1.-Installation

I want to try help everyone get familiar with the code in the edgarriba's port. I'll try my best to explain it here

Project Structure

├── ccd_defs_check.py                     # check the data/ccd_defs.json for compilation errors
├── CMakeLists.txt                        # cmake file
├── code_of_conduct.md                    # info on contributing
├── configure.sh                          # The new install file. Builds dependencies and external modules in SuperBuild
├── data                                  # Misc data
│   └── ccd_defs.json                     # json file with camera ccd width definitions
├── Dockerfile                            # For use with Docker
├── hooks                                 # Git hooks
│   └── pre-commit                        # check ccd_defs before commit
├── img
│   └── odm_image.png                     # The logo
├── LICENSE                               # GPL v.3 license
├── licenses                              # licenses reference for external modules
│   ├── libext_copyright.txt
│   ├── libx11_copyright.txt
│   └── license.md
├── modules                               # internal modules
│   ├── CMakeLists.txt                    # cmake file
│   ├── odm_extract_utm                   # extract UTM from images metadata for georeferencing
│   │   ├── CMakeLists.txt
│   │   └── src
│   │       ├── Logger.cpp
│   │       ├── Logger.hpp
│   │       ├── main.cpp
│   │       ├── UtmExtractor.cpp
│   │       └── UtmExtractor.hpp
│   ├── odm_georef                        # georeferences the model
│   │   ├── CMakeLists.txt
│   │   ├── CMakeLists.txt.user
│   │   └── src
│   │       ├── FindTransform.cpp
│   │       ├── FindTransform.hpp
│   │       ├── Georef.cpp
│   │       ├── Georef.hpp
│   │       ├── Logger.cpp
│   │       ├── Logger.hpp
│   │       ├── main.cpp
│   │       ├── modifiedPclFunctions.cpp
│   │       └── modifiedPclFunctions.hpp
│   ├── odm_meshing                       # creates a triangulated mesh of the dense point cloud
│   │   ├── CMakeLists.txt
│   │   └── src
│   │       ├── Logger.cpp
│   │       ├── Logger.hpp
│   │       ├── main.cpp
│   │       ├── OdmMeshing.cpp
│   │       └── OdmMeshing.hpp
│   ├── odm_orthophoto                    # Creates an orthophoto from the textured mesh
│   │   ├── CMakeLists.txt
│   │   ├── CMakeLists.txt.user
│   │   └── src
│   │       ├── Logger.cpp
│   │       ├── Logger.hpp
│   │       ├── main.cpp
│   │       ├── OdmOrthoPhoto.cpp
│   │       └── OdmOrthoPhoto.hpp
│   └── odm_texturing                     # Creates a textured mesh from the mesh and images
│       ├── CMakeLists.txt
│       ├── CMakeLists.txt.user
│       └── src
│           ├── Logger.cpp
│           ├── Logger.hpp
│           ├── main.cpp
│           ├── modifiedPclFunctions.cpp
│           ├── modifiedPclFunctions.hpp
│           ├── OdmTexturing.cpp
│           └── OdmTexturing.hpp
├── opendm                                # Directory containing utility scripts and context
│   ├── config.py                         # Argparse config
│   ├── context.py                        # contains paths and other universal variables (num_cores, supported_extensions)
│   ├── __init__.py
│   ├── io.py                             # io functions
│   ├── log.py                            # logging configuration
│   ├── system.py                         # functions mimicking system function and other utilities
│   ├── tasks.py                          # classes for odmtasks (I don't think this is functional code. It may be irrelevant)
│   └── types.py                          # classes for ODM_Photo, ODM_Reconstruction, ODM_GCPoint, ODM_Tree
├── patched_files                         # I'm actually not sure what this is for. I think it has to do with the install. 
│   └── src
│       └── graclus
│           ├── graclus1.2.tar.gz
│           └── index.html
├── README.md                             # The Readme for Github
├── run.py                                # The control script. Note it's very small, most of the goods are in scripts/
├── scripts                               # The juicy bits. These files define ecto "cells", explained below
│   ├── cmvs.py                           # With PMVS, generates a dense point cloud
│   ├── dataset.py                        # Prep the dataset
│   ├── example_ecto_python.py            # example
│   ├── __init__.py
│   ├── odm_app.py                        # Defines the main App class, which inherits from ecto.BlackBox, explained below
│   ├── odm_georeferencing.py             # Georeferences the output files
│   ├── odm_meshing.py                    # Generates a triangulated mesh from ply
│   ├── odm_orthophoto.py                 # Generates an orthophoto from textured mesh
│   ├── odm_texturing.py                  # Generates a textured mesh
│   ├── opensfm.py                        # Does the structure from motion process
│   ├── pmvs.py                           # With CMVS, generates a dense point cloud
│   └── resize.py                         # resizes the photos
├── SuperBuild                            # A cmake SuperBuild downloads, configures and builds other projects
│   ├── cmake
│   │   ├── External-Catkin.cmake
│   │   ├── External-Ceres.cmake
│   │   ├── External-CMVS.cmake
│   │   ├── External-Ecto.cmake
│   │   ├── External-GFlags.cmake
│   │   ├── External-LAStools.cmake
│   │   ├── External-OpenCV.cmake
│   │   ├── External-OpenGV.cmake
│   │   ├── External-OpenSfM.cmake
│   │   ├── External-PCL.cmake
│   │   └── ExternalProject-Setup.cmake
│   └── CMakeLists.txt
└── tests                                 # Tests
    ├── test_data                         # A small, well-oiled dataset that should work most of the time (we hope)
    │   └── images
    │       ├── 1JI_0064.JPG
    │       ├── ...
    ├── testing.md                        # What needs to be tested and how. This is not comprehensive. 
    └── test_odm.py                       # The testing script. Uses unittest. 

Ecto? Cells? Plasms?

OK so this part is a little hard to grok, and I'm still new to the concept too, so bear with me. First off, you can get info about ecto straight from the source.

So as I understand it, ecto is a framework for getting 'stuff' from one place to another- in our case, photos to a variety of other products such as 3D meshes and orthophotos. It uses Directed Acyclic Graphs, called plasms, to do this. Each "cell" is a computation which takes an input, performs some process, and passes an output to a number of other cells.

A BlackBox is an encapsulation of a plasm, so that it can be reused. That mean you can rerun the code on a dataset and it will know which cells have already been run.