diff --git a/README.md b/README.md index b8889d3b..4f055763 100644 --- a/README.md +++ b/README.md @@ -40,28 +40,78 @@ Steps to get OpenDroneMap running: 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. -Run install.sh to build. +#### Building OpenDroneMap using git - ./install.sh + cd path/to/odm/dir + git clone https://github.com/OpenDroneMap/OpenDroneMap.git . + export PYTHONPATH=$PYTHONPATH:`pwd`/SuperBuild/install/lib/python2.7/dist-packages + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/SuperBuild/install/lib + bash configure.sh + mkdir build && cd build && cmake .. && make && cd .. + +#### Running OpenDroneMap -From a directory full of your images, run +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](https://github.com/OpenDroneMap/OpenDroneMap/wiki/2.-Running-OpenDroneMap#running-odm-with-ground-control) - ./run.py +Create a project folder and places your images in an "images" directory: -An overview of installing and running OpenDroneMap on Ubuntu can be found here: https://www.youtube.com/watch?v=e2qp3o8caPs -Here are some other videos: + |-- /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](https://github.com/OpenDroneMap/OpenDroneMap/wiki/3.-Run-Time-Parameters) 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: - https://www.youtube.com/watch?v=7ZTufQkODLs (2015-01-30) - https://www.youtube.com/watch?v=m0i4GQdfl8A (2015-03-15) 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 -``` +__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 --- @@ -89,68 +139,3 @@ Documentation: For documentation, please take a look at our [wiki](https://github.com/OpenDroneMap/OpenDroneMap/wiki). - -Troubleshooting: -================ - -Make sure you have enough RAM and CPU. Only lowercase file extension supported now. - -If you run ODM with your own camera, it is possible you will see something like this: - -``` - - configuration: - --cmvs-maxImages: 500 - --end-with: pmvs - --match-size: 200 - --matcher-ratio: 0.6 - --matcher-threshold: 2 - --pmvs-csize: 2 - --pmvs-level: 1 - --pmvs-minImageNum: 3 - --pmvs-threshold: 0.7 - --pmvs-wsize: 7 - --resize-to: 1200 - --start-with: resize - - - - source files - Fri Sep 19 13:47:42 UTC 2014 - - - no CCD width or focal length found for DSC05391.JPG - camera: "SONY DSC-HX5V" - no CCD width or focal length found for DSC05392.JPG - camera: "SONY DSC-HX5V" - no CCD width or focal length found for DSC05393.JPG - camera: "SONY DSC-HX5V" - no CCD width or focal length found for DSC05394.JPG - camera: "SONY DSC-HX5V" - no CCD width or focal length found for DSC05395.JPG - camera: "SONY DSC-HX5V" - no CCD width or focal length found for DSC05396.JPG - camera: "SONY DSC-HX5V" - no CCD width or focal length found for DSC05397.JPG - camera: "SONY DSC-HX5V" - no CCD width or focal length found for DSC05398.JPG - camera: "SONY DSC-HX5V" - no CCD width or focal length found for DSC05399.JPG - camera: "SONY DSC-HX5V" - - found no usable images - quitting -Died at ../../OpenDroneMap/./run.pl line 364. - - -``` - -This means that your camera is not in the database, https://github.com/OpenDroneMap/OpenDroneMap/blob/gh-pages/ccd_defs.json - -This problem is easily remedied. We need to know CCD size in the camera. We'll get these for our Sony Cyber-shot DSC-HX5 from dpreview: http://www.dpreview.com/products/sony/compacts/sony_dschx5/specifications - -So, we'll add the following line to our ccd_defs.json: - - "SONY DSC-HX5V": 6.104, - -To check that ccd_defs.json compiles, run `ccd_defs_check.py` -If it prints the message 'CCD_DEFS compiles OK', then you can commit your changes. - -And so others can use it, we'll do a pull request to add it to our array for everyone else. - ---- - -Maintainers can run the ccd_defs.json compilation test automatically by creating a -symbolic link in .git/hooks to hooks/pre-commit - - cd .git/hooks - ln -s ../../hooks/pre-commit - -If ccd_defs.json does not compile, then the pre-commit hook will abort the commit.