From b59fb316bc29118b82f390953070500e89f290a1 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 25 Jun 2019 13:21:15 -0400 Subject: [PATCH 1/5] Export cameras.json --- libs/Task.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/Task.js b/libs/Task.js index 047f18f..4b8e311 100644 --- a/libs/Task.js +++ b/libs/Task.js @@ -341,7 +341,8 @@ module.exports = class Task{ let allPaths = ['odm_orthophoto/odm_orthophoto.tif', 'odm_orthophoto/odm_orthophoto.mbtiles', 'odm_georeferencing', 'odm_texturing', 'odm_dem/dsm.tif', 'odm_dem/dtm.tif', 'dsm_tiles', 'dtm_tiles', - 'orthophoto_tiles', 'potree_pointcloud', 'entwine_pointcloud', 'images.json']; + 'orthophoto_tiles', 'potree_pointcloud', 'entwine_pointcloud', + 'images.json', 'cameras.json']; // Did the user request different outputs than the default? if (this.outputs.length > 0) allPaths = this.outputs; From 1bd65e81b0b197a317cf7d5972558fb289b53910 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 25 Jun 2019 13:42:12 -0400 Subject: [PATCH 2/5] Added test files --- tests/processing_results/cameras.json | 1 + tests/processing_results/opensfm/matches/test.txt | 0 2 files changed, 1 insertion(+) create mode 100644 tests/processing_results/cameras.json create mode 100644 tests/processing_results/opensfm/matches/test.txt diff --git a/tests/processing_results/cameras.json b/tests/processing_results/cameras.json new file mode 100644 index 0000000..b035d46 --- /dev/null +++ b/tests/processing_results/cameras.json @@ -0,0 +1 @@ +{"dji fc300s 4000 2250 perspective 0.5555": {"k2": 0.016, "projection_type": "perspective", "k1": 0.006, "height": 2250, "width": 4000, "focal": 0.5616905969087824}} \ No newline at end of file diff --git a/tests/processing_results/opensfm/matches/test.txt b/tests/processing_results/opensfm/matches/test.txt new file mode 100644 index 0000000..e69de29 From c379ed861fc6503b26eef4d8925bea30891aa61e Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 25 Jun 2019 14:09:37 -0400 Subject: [PATCH 3/5] Add support for json option type --- libs/odmInfo.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libs/odmInfo.js b/libs/odmInfo.js index c92bf08..16d845e 100644 --- a/libs/odmInfo.js +++ b/libs/odmInfo.js @@ -222,6 +222,18 @@ module.exports = { } } }, + { + regex: /^(json)$/, + validate: function(matches, value){ + try{ + if (typeof value !== 'string') return false; + JSON.parse(value); + return true; + }catch(e){ + return false; + } + } + }, { regex: /^(string|path)$/, validate: function(){ From 1ba169ab702a667ac88a9d0e7f46a585fedb31b9 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 25 Jun 2019 14:18:01 -0400 Subject: [PATCH 4/5] Added new options for tests, updated version --- package.json | 2 +- tests/odm_options.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b97cb98..7552c15 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NodeODM", - "version": "1.5.2", + "version": "1.5.3", "description": "REST API to access ODM", "main": "index.js", "scripts": { diff --git a/tests/odm_options.json b/tests/odm_options.json index 3d2c1f3..673e3fc 100644 --- a/tests/odm_options.json +++ b/tests/odm_options.json @@ -1 +1 @@ -{"--pc-classify": {"action": "store_true", "default": "False", "help": "Classify the point cloud outputs using a Simple Morphological Filter. You can control the behavior of this option by tweaking the --dem-* parameters. Default: %(default)s"}, "--smrf-scalar": {"default": "1.25", "type": "", "metavar": "", "help": "Simple Morphological Filter elevation scalar parameter. \nDefault: %(default)s"}, "--opensfm-depthmap-min-patch-sd": {"default": "1", "type": "", "metavar": "", "help": "When using PATCH_MATCH or PATCH_MATCH_SAMPLE, controls the standard deviation threshold to include patches. Patches with lower standard deviation are ignored. Default: %(default)s"}, "--smrf-window": {"default": "18.0", "type": "", "metavar": "", "help": "Simple Morphological Filter window radius parameter (meters). \nDefault: %(default)s"}, "--mesh-octree-depth": {"default": "9", "type": "", "metavar": "", "help": "Oct-tree depth used in the mesh reconstruction, increase to get more vertices, recommended values are 8-12. Default: %(default)s"}, "--sm-cluster": {"default": "None", "type": "", "metavar": "", "help": "URL to a ClusterODM instance for distributing a split-merge workflow on multiple nodes in parallel. Default: %(default)s"}, "--min-num-features": {"default": "8000", "type": "", "metavar": "", "help": "Minimum number of features to extract per image. More features leads to better results but slower execution. Default: %(default)s"}, "--resize-to": {"default": "2048", "type": "", "metavar": "", "help": "resizes images by the largest side for opensfm. Set to -1 to disable. Default: %(default)s"}, "--smrf-slope": {"default": "0.15", "type": "", "metavar": "", "help": "Simple Morphological Filter slope parameter (rise over run). \nDefault: %(default)s"}, "--rerun-from": {"action": "", "choices": "['dataset', 'split', 'merge', 'opensfm', 'mve', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto']", "help": "Can be one of:dataset | split | merge | opensfm | mve | odm_filterpoints | odm_meshing | mvs_texturing | odm_georeferencing | odm_dem | odm_orthophoto", "metavar": ""}, "--use-3dmesh": {"action": "store_true", "default": "False", "help": "Use a full 3D mesh to compute the orthophoto instead of a 2.5D mesh. This option is a bit faster and provides similar results in planar areas."}, "--dem-euclidean-map": {"action": "store_true", "default": "False", "help": "Computes an euclidean raster map for each DEM. The map reports the distance from each cell to the nearest NODATA value (before any hole filling takes place). This can be useful to isolate the areas that have been filled. Default: %(default)s"}, "--mve-confidence": {"default": "0.6", "type": "", "metavar": "", "help": "Discard points that have less than a certain confidence threshold. This only affects dense reconstructions performed with MVE. Higher values discard more points. Default: %(default)s"}, "--rerun": {"choices": "['dataset', 'split', 'merge', 'opensfm', 'mve', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto']", "help": "Can be one of:dataset | split | merge | opensfm | mve | odm_filterpoints | odm_meshing | mvs_texturing | odm_georeferencing | odm_dem | odm_orthophoto", "metavar": ""}, "--texturing-skip-hole-filling": {"action": "store_true", "default": "False", "help": "Skip filling of holes in the mesh. Default: %(default)s"}, "--texturing-skip-global-seam-leveling": {"action": "store_true", "default": "False", "help": "Skip global seam leveling. Useful for IR data.Default: %(default)s"}, "--project-path": {"metavar": "", "help": "Path to the project folder"}, "--texturing-nadir-weight": {"default": "16", "type": "", "metavar": "", "help": "Affects orthophotos only. Higher values result in sharper corners, but can affect color distribution and blurriness. Use lower values for planar areas and higher values for urban areas. The default value works well for most scenarios. Default: %(default)s"}, "--texturing-outlier-removal-type": {"default": "gauss_clamping", "choices": "['none', 'gauss_clamping', 'gauss_damping']", "help": "Type of photometric outlier removal method: [none, gauss_damping, gauss_clamping]. Default: %(default)s", "metavar": ""}, "--orthophoto-resolution": {"default": "5", "type": "", "metavar": " 0.0>", "help": "Orthophoto resolution in cm / pixel.\nDefault: %(default)s"}, "--dtm": {"action": "store_true", "default": "False", "help": "Use this tag to build a DTM (Digital Terrain Model, ground only) using a simple morphological filter. Check the --dem* and --smrf* parameters for finer tuning."}, "--rerun-all": {"action": "store_true", "default": "False", "help": "force rerun of all tasks"}, "--orthophoto-no-tiled": {"action": "store_true", "default": "False", "help": "Set this parameter if you want a stripped geoTIFF.\nDefault: %(default)s"}, "--dem-resolution": {"default": "5", "type": "", "metavar": "", "help": "DSM/DTM resolution in cm / pixel.\nDefault: %(default)s"}, "-h": {"action": "help", "default": "==SUPPRESS==", "help": "show this help message and exit"}, "--mesh-size": {"default": "100000", "type": "", "metavar": "", "help": "The maximum vertex count of the output mesh. Default: %(default)s"}, "--orthophoto-compression": {"default": "DEFLATE", "choices": "['JPEG', 'LZW', 'PACKBITS', 'DEFLATE', 'LZMA', 'NONE']", "type": "", "help": "Set the compression to use. Note that this could break gdal_translate if you don't know what you are doing. Options: %(choices)s.\nDefault: %(default)s", "metavar": ""}, "--ignore-gsd": {"action": "store_true", "default": "False", "help": "Ignore Ground Sampling Distance (GSD). GSD caps the maximum resolution of image outputs and resizes images when necessary, resulting in faster processing and lower memory usage. Since GSD is an estimate, sometimes ignoring it can result in slightly better image output quality."}, "--build-overviews": {"action": "store_true", "default": "False", "help": "Build orthophoto overviews using gdaladdo."}, "--use-opensfm-dense": {"action": "store_true", "default": "False", "help": "Use opensfm to compute dense point cloud alternatively"}, "--opensfm-depthmap-min-consistent-views": {"default": "3", "type": "", "metavar": "", "help": "Minimum number of views that should reconstruct a point for it to be valid. Use lower values if your images have less overlap. Lower values result in denser point clouds but with more noise. Default: %(default)s"}, "--texturing-skip-local-seam-leveling": {"action": "store_true", "default": "False", "help": "Skip local seam blending. Default: %(default)s"}, "--verbose": {"action": "store_true", "default": "False", "help": "Print additional messages to the console\nDefault: %(default)s"}, "--gcp": {"default": "None", "metavar": "", "help": "path to the file containing the ground control points used for georeferencing. Default: %(default)s. The file needs to be on the following line format: \neasting northing height pixelrow pixelcol imagename"}, "--use-exif": {"action": "store_true", "default": "False", "help": "Use this tag if you have a gcp_list.txt but want to use the exif geotags instead"}, "--mesh-samples": {"default": "1.0", "type": "", "metavar": "= 1.0>", "help": "Number of points per octree node, recommended and default value: %(default)s"}, "--split": {"default": "999999", "type": "", "metavar": "", "help": "Average number of images per submodel. When splitting a large dataset into smaller submodels, images are grouped into clusters. This value regulates the number of images that each cluster should have on average."}, "--matcher-distance": {"default": "0", "type": "", "metavar": "", "help": "Distance threshold in meters to find pre-matching images based on GPS exif data. Set both matcher-neighbors and this to 0 to skip pre-matching. Default: %(default)s"}, "--split-overlap": {"default": "150", "type": "", "metavar": "", "help": "Radius of the overlap between submodels. After grouping images into clusters, images that are closer than this radius to a cluster are added to the cluster. This is done to ensure that neighboring submodels overlap."}, "--orthophoto-bigtiff": {"default": "IF_SAFER", "type": "", "help": "Control whether the created orthophoto is a BigTIFF or classic TIFF. BigTIFF is a variant for files larger than 4GiB of data. Options are %(choices)s. See GDAL specs: https://www.gdal.org/frmt_gtiff.html for more info. \nDefault: %(default)s", "choices": "['YES', 'NO', 'IF_NEEDED', 'IF_SAFER']"}, "--dem-decimation": {"default": "1", "type": "", "metavar": "", "help": "Decimate the points before generating the DEM. 1 is no decimation (full quality). 100 decimates ~99%% of the points. Useful for speeding up generation.\nDefault=%(default)s"}, "--orthophoto-cutline": {"action": "store_true", "default": "False", "help": "Generates a polygon around the cropping area that cuts the orthophoto around the edges of features. This polygon can be useful for stitching seamless mosaics with multiple overlapping orthophotos. Default: %(default)s"}, "--pc-filter": {"default": "2.5", "type": "", "metavar": "", "help": "Filters the point cloud by removing points that deviate more than N standard deviations from the local mean. Set to 0 to disable filtering.\nDefault: %(default)s"}, "--fast-orthophoto": {"action": "store_true", "default": "False", "help": "Skips dense reconstruction and 3D model generation. It generates an orthophoto directly from the sparse reconstruction. If you just need an orthophoto and do not need a full 3D model, turn on this option. Experimental."}, "--texturing-data-term": {"default": "gmi", "choices": "['gmi', 'area']", "help": "Data term: [area, gmi]. Default: %(default)s", "metavar": ""}, "--crop": {"default": "3", "type": "", "metavar": "", "help": "Automatically crop image outputs by creating a smooth buffer around the dataset boundaries, shrinked by N meters. Use 0 to disable cropping. Default: %(default)s"}, "--images": {"metavar": "", "help": "Path to input images"}, "--proj": {"metavar": "", "help": "Projection used to transform the model into geographic coordinates"}, "--pc-las": {"action": "store_true", "default": "False", "help": "Export the georeferenced point cloud in LAS format. Default: %(default)s"}, "--version": {"action": "version", "version": "OpenDroneMap 0.6.0", "help": "Displays version number and exits. "}, "--merge": {"default": "all", "choices": "['all', 'pointcloud', 'orthophoto', 'dem']", "help": "Choose what to merge in the merge step in a split dataset. By default all available outputs are merged. Default: %(default)s", "metavar": ""}, "--dsm": {"action": "store_true", "default": "False", "help": "Use this tag to build a DSM (Digital Surface Model, ground + objects) using a progressive morphological filter. Check the --dem* parameters for finer tuning."}, "--dem-gapfill-steps": {"default": "3", "type": "", "metavar": "", "help": "Number of steps used to fill areas with gaps. Set to 0 to disable gap filling. Starting with a radius equal to the output resolution, N different DEMs are generated with progressively bigger radius using the inverse distance weighted (IDW) algorithm and merged together. Remaining gaps are then merged using nearest neighbor interpolation. \nDefault=%(default)s"}, "--mesh-point-weight": {"default": "4", "type": "", "metavar": "", "help": "This floating point value specifies the importance that interpolation of the point samples is given in the formulation of the screened Poisson equation. The results of the original (unscreened) Poisson Reconstruction can be obtained by setting this value to 0.Default= %(default)s"}, "--max-concurrency": {"default": "4", "type": "", "metavar": "", "help": "The maximum number of processes to use in various processes. Peak memory requirement is ~1GB per thread and 2 megapixel image resolution. Default: %(default)s"}, "name": {"type": "", "metavar": "", "help": "Name of Project (i.e subdirectory of projects folder)"}, "--texturing-tone-mapping": {"default": "none", "choices": "['none', 'gamma']", "help": "Turn on gamma tone mapping or none for no tone mapping. Choices are 'gamma' or 'none'. Default: %(default)s ", "metavar": ""}, "--texturing-keep-unseen-faces": {"action": "store_true", "default": "False", "help": "Keep faces in the mesh that are not seen in any camera. Default: %(default)s"}, "--video": {"metavar": "", "help": "Path to the video file to process"}, "--skip-3dmodel": {"action": "store_true", "default": "False", "help": "Skip generation of a full 3D model. This can save time if you only need 2D results such as orthophotos and DEMs."}, "--matcher-neighbors": {"default": "8", "type": "", "metavar": "", "help": "Number of nearest images to pre-match based on GPS exif data. Set to 0 to skip pre-matching. Neighbors works together with Distance parameter, set both to 0 to not use pre-matching. OpenSFM uses both parameters at the same time, Bundler uses only one which has value, prefering the Neighbors parameter. Default: %(default)s"}, "--pc-csv": {"action": "store_true", "default": "False", "help": "Export the georeferenced point cloud in CSV format. Default: %(default)s"}, "--end-with": {"default": "odm_orthophoto", "choices": "['dataset', 'split', 'merge', 'opensfm', 'mve', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto']", "help": "Can be one of:dataset | split | merge | opensfm | mve | odm_filterpoints | odm_meshing | mvs_texturing | odm_georeferencing | odm_dem | odm_orthophoto", "metavar": ""}, "--depthmap-resolution": {"default": "640", "type": "", "metavar": "", "help": "Controls the density of the point cloud by setting the resolution of the depthmap images. Higher values take longer to compute but produce denser point clouds. Default: %(default)s"}, "--texturing-skip-visibility-test": {"action": "store_true", "default": "False", "help": "Skip geometric visibility test. Default: %(default)s"}, "--slam-config": {"metavar": "", "help": "Path to config file for orb-slam"}, "--opensfm-depthmap-method": {"default": "PATCH_MATCH", "choices": "['PATCH_MATCH', 'BRUTE_FORCE', 'PATCH_MATCH_SAMPLE']", "help": "Raw depthmap computation algorithm. PATCH_MATCH and PATCH_MATCH_SAMPLE are faster, but might miss some valid points. BRUTE_FORCE takes longer but produces denser reconstructions. Default: %(default)s", "metavar": ""}, "--use-fixed-camera-params": {"action": "store_true", "default": "False", "help": "Turn off camera parameter optimization during bundler"}, "--time": {"action": "store_true", "default": "False", "help": "Generates a benchmark file with runtime info\nDefault: %(default)s"}, "--smrf-threshold": {"default": "0.5", "type": "", "metavar": "", "help": "Simple Morphological Filter elevation threshold parameter (meters). \nDefault: %(default)s"}, "--use-hybrid-bundle-adjustment": {"action": "store_true", "default": "False", "help": "Run local bundle adjustment for every image added to the reconstruction and a global adjustment every 100 images. Speeds up reconstruction for very large datasets."}} \ No newline at end of file +{"--pc-classify": {"action": "store_true", "default": "False", "help": "Classify the point cloud outputs using a Simple Morphological Filter. You can control the behavior of this option by tweaking the --dem-* parameters. Default: %(default)s"}, "--smrf-scalar": {"default": "1.25", "type": "", "metavar": "", "help": "Simple Morphological Filter elevation scalar parameter. \nDefault: %(default)s"}, "--opensfm-depthmap-min-patch-sd": {"default": "1", "type": "", "metavar": "", "help": "When using PATCH_MATCH or PATCH_MATCH_SAMPLE, controls the standard deviation threshold to include patches. Patches with lower standard deviation are ignored. Default: %(default)s"}, "--smrf-window": {"default": "18.0", "type": "", "metavar": "", "help": "Simple Morphological Filter window radius parameter (meters). \nDefault: %(default)s"}, "--mesh-octree-depth": {"default": "9", "type": "", "metavar": "", "help": "Oct-tree depth used in the mesh reconstruction, increase to get more vertices, recommended values are 8-12. Default: %(default)s"}, "--sm-cluster": {"default": "None", "type": "", "metavar": "", "help": "URL to a ClusterODM instance for distributing a split-merge workflow on multiple nodes in parallel. Default: %(default)s"}, "--min-num-features": {"default": "8000", "type": "", "metavar": "", "help": "Minimum number of features to extract per image. More features leads to better results but slower execution. Default: %(default)s"}, "--resize-to": {"default": "2048", "type": "", "metavar": "", "help": "Resizes images by the largest side for feature extraction. Set to -1 to disable. This does not affect the final orthophoto resolution quality. Default: %(default)s"}, "--smrf-slope": {"default": "0.15", "type": "", "metavar": "", "help": "Simple Morphological Filter slope parameter (rise over run). \nDefault: %(default)s"}, "--rerun-from": {"action": "", "choices": "['dataset', 'split', 'merge', 'opensfm', 'mve', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto']", "help": "Can be one of:dataset | split | merge | opensfm | mve | odm_filterpoints | odm_meshing | mvs_texturing | odm_georeferencing | odm_dem | odm_orthophoto", "metavar": ""}, "--use-3dmesh": {"action": "store_true", "default": "False", "help": "Use a full 3D mesh to compute the orthophoto instead of a 2.5D mesh. This option is a bit faster and provides similar results in planar areas."}, "--orthophoto-compression": {"default": "DEFLATE", "choices": "['JPEG', 'LZW', 'PACKBITS', 'DEFLATE', 'LZMA', 'NONE']", "type": "", "help": "Set the compression to use. Note that this could break gdal_translate if you don't know what you are doing. Options: %(choices)s.\nDefault: %(default)s", "metavar": ""}, "--mve-confidence": {"default": "0.6", "type": "", "metavar": "", "help": "Discard points that have less than a certain confidence threshold. This only affects dense reconstructions performed with MVE. Higher values discard more points. Default: %(default)s"}, "--rerun": {"choices": "['dataset', 'split', 'merge', 'opensfm', 'mve', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto']", "help": "Can be one of:dataset | split | merge | opensfm | mve | odm_filterpoints | odm_meshing | mvs_texturing | odm_georeferencing | odm_dem | odm_orthophoto", "metavar": ""}, "--texturing-skip-hole-filling": {"action": "store_true", "default": "False", "help": "Skip filling of holes in the mesh. Default: %(default)s"}, "--texturing-skip-global-seam-leveling": {"action": "store_true", "default": "False", "help": "Skip global seam leveling. Useful for IR data.Default: %(default)s"}, "--project-path": {"metavar": "", "help": "Path to the project folder"}, "--texturing-nadir-weight": {"default": "16", "type": "", "metavar": "", "help": "Affects orthophotos only. Higher values result in sharper corners, but can affect color distribution and blurriness. Use lower values for planar areas and higher values for urban areas. The default value works well for most scenarios. Default: %(default)s"}, "--texturing-outlier-removal-type": {"default": "gauss_clamping", "choices": "['none', 'gauss_clamping', 'gauss_damping']", "help": "Type of photometric outlier removal method: [none, gauss_damping, gauss_clamping]. Default: %(default)s", "metavar": ""}, "--orthophoto-resolution": {"default": "5", "type": "", "metavar": " 0.0>", "help": "Orthophoto resolution in cm / pixel.\nDefault: %(default)s"}, "--dtm": {"action": "store_true", "default": "False", "help": "Use this tag to build a DTM (Digital Terrain Model, ground only) using a simple morphological filter. Check the --dem* and --smrf* parameters for finer tuning."}, "--rerun-all": {"action": "store_true", "default": "False", "help": "force rerun of all tasks"}, "--orthophoto-no-tiled": {"action": "store_true", "default": "False", "help": "Set this parameter if you want a stripped geoTIFF.\nDefault: %(default)s"}, "--dem-resolution": {"default": "5", "type": "", "metavar": "", "help": "DSM/DTM resolution in cm / pixel.\nDefault: %(default)s"}, "-h": {"action": "help", "default": "==SUPPRESS==", "help": "show this help message and exit"}, "--mesh-size": {"default": "100000", "type": "", "metavar": "", "help": "The maximum vertex count of the output mesh. Default: %(default)s"}, "--ignore-gsd": {"action": "store_true", "default": "False", "help": "Ignore Ground Sampling Distance (GSD). GSD caps the maximum resolution of image outputs and resizes images when necessary, resulting in faster processing and lower memory usage. Since GSD is an estimate, sometimes ignoring it can result in slightly better image output quality."}, "--build-overviews": {"action": "store_true", "default": "False", "help": "Build orthophoto overviews using gdaladdo."}, "--use-opensfm-dense": {"action": "store_true", "default": "False", "help": "Use opensfm to compute dense point cloud alternatively"}, "--opensfm-depthmap-min-consistent-views": {"default": "3", "type": "", "metavar": "", "help": "Minimum number of views that should reconstruct a point for it to be valid. Use lower values if your images have less overlap. Lower values result in denser point clouds but with more noise. Default: %(default)s"}, "--texturing-skip-local-seam-leveling": {"action": "store_true", "default": "False", "help": "Skip local seam blending. Default: %(default)s"}, "--texturing-keep-unseen-faces": {"action": "store_true", "default": "False", "help": "Keep faces in the mesh that are not seen in any camera. Default: %(default)s"}, "--gcp": {"default": "None", "metavar": "", "help": "path to the file containing the ground control points used for georeferencing. Default: %(default)s. The file needs to be on the following line format: \neasting northing height pixelrow pixelcol imagename"}, "--use-exif": {"action": "store_true", "default": "False", "help": "Use this tag if you have a gcp_list.txt but want to use the exif geotags instead"}, "--mesh-samples": {"default": "1.0", "type": "", "metavar": "= 1.0>", "help": "Number of points per octree node, recommended and default value: %(default)s"}, "--split": {"default": "999999", "type": "", "metavar": "", "help": "Average number of images per submodel. When splitting a large dataset into smaller submodels, images are grouped into clusters. This value regulates the number of images that each cluster should have on average."}, "--matcher-distance": {"default": "0", "type": "", "metavar": "", "help": "Distance threshold in meters to find pre-matching images based on GPS exif data. Set both matcher-neighbors and this to 0 to skip pre-matching. Default: %(default)s"}, "--split-overlap": {"default": "150", "type": "", "metavar": "", "help": "Radius of the overlap between submodels. After grouping images into clusters, images that are closer than this radius to a cluster are added to the cluster. This is done to ensure that neighboring submodels overlap."}, "--orthophoto-bigtiff": {"default": "IF_SAFER", "type": "", "help": "Control whether the created orthophoto is a BigTIFF or classic TIFF. BigTIFF is a variant for files larger than 4GiB of data. Options are %(choices)s. See GDAL specs: https://www.gdal.org/frmt_gtiff.html for more info. \nDefault: %(default)s", "choices": "['YES', 'NO', 'IF_NEEDED', 'IF_SAFER']"}, "--dem-decimation": {"default": "1", "type": "", "metavar": "", "help": "Decimate the points before generating the DEM. 1 is no decimation (full quality). 100 decimates ~99%% of the points. Useful for speeding up generation.\nDefault=%(default)s"}, "--orthophoto-cutline": {"action": "store_true", "default": "False", "help": "Generates a polygon around the cropping area that cuts the orthophoto around the edges of features. This polygon can be useful for stitching seamless mosaics with multiple overlapping orthophotos. Default: %(default)s"}, "--pc-filter": {"default": "2.5", "type": "", "metavar": "", "help": "Filters the point cloud by removing points that deviate more than N standard deviations from the local mean. Set to 0 to disable filtering.\nDefault: %(default)s"}, "--fast-orthophoto": {"action": "store_true", "default": "False", "help": "Skips dense reconstruction and 3D model generation. It generates an orthophoto directly from the sparse reconstruction. If you just need an orthophoto and do not need a full 3D model, turn on this option. Experimental."}, "--pc-ept": {"action": "store_true", "default": "False", "help": "Export the georeferenced point cloud in Entwine Point Tile (EPT) format. Default: %(default)s"}, "--crop": {"default": "3", "type": "", "metavar": "", "help": "Automatically crop image outputs by creating a smooth buffer around the dataset boundaries, shrinked by N meters. Use 0 to disable cropping. Default: %(default)s"}, "--images": {"metavar": "", "help": "Path to input images"}, "--pc-las": {"action": "store_true", "default": "False", "help": "Export the georeferenced point cloud in LAS format. Default: %(default)s"}, "--version": {"action": "version", "version": "OpenDroneMap 0.8.1", "help": "Displays version number and exits. "}, "--merge": {"default": "all", "choices": "['all', 'pointcloud', 'orthophoto', 'dem']", "help": "Choose what to merge in the merge step in a split dataset. By default all available outputs are merged. Default: %(default)s", "metavar": ""}, "--dsm": {"action": "store_true", "default": "False", "help": "Use this tag to build a DSM (Digital Surface Model, ground + objects) using a progressive morphological filter. Check the --dem* parameters for finer tuning."}, "--dem-gapfill-steps": {"default": "3", "type": "", "metavar": "", "help": "Number of steps used to fill areas with gaps. Set to 0 to disable gap filling. Starting with a radius equal to the output resolution, N different DEMs are generated with progressively bigger radius using the inverse distance weighted (IDW) algorithm and merged together. Remaining gaps are then merged using nearest neighbor interpolation. \nDefault=%(default)s"}, "--mesh-point-weight": {"default": "4", "type": "", "metavar": "", "help": "This floating point value specifies the importance that interpolation of the point samples is given in the formulation of the screened Poisson equation. The results of the original (unscreened) Poisson Reconstruction can be obtained by setting this value to 0.Default= %(default)s"}, "--max-concurrency": {"default": "4", "type": "", "metavar": "", "help": "The maximum number of processes to use in various processes. Peak memory requirement is ~1GB per thread and 2 megapixel image resolution. Default: %(default)s"}, "name": {"default": "code", "type": "", "nargs": "?", "metavar": "", "help": "Name of Project (i.e subdirectory of projects folder)"}, "--texturing-tone-mapping": {"default": "none", "choices": "['none', 'gamma']", "help": "Turn on gamma tone mapping or none for no tone mapping. Choices are 'gamma' or 'none'. Default: %(default)s ", "metavar": ""}, "--cameras": {"default": "", "type": "", "metavar": "", "help": "Use the camera parameters computed from another dataset instead of calculating them. Can be specified either as path to a cameras.json file or as a JSON string representing the contents of a cameras.json file. Default: %(default)s"}, "--dem-euclidean-map": {"action": "store_true", "default": "False", "help": "Computes an euclidean raster map for each DEM. The map reports the distance from each cell to the nearest NODATA value (before any hole filling takes place). This can be useful to isolate the areas that have been filled. Default: %(default)s"}, "--skip-3dmodel": {"action": "store_true", "default": "False", "help": "Skip generation of a full 3D model. This can save time if you only need 2D results such as orthophotos and DEMs."}, "--matcher-neighbors": {"default": "8", "type": "", "metavar": "", "help": "Number of nearest images to pre-match based on GPS exif data. Set to 0 to skip pre-matching. Neighbors works together with Distance parameter, set both to 0 to not use pre-matching. OpenSFM uses both parameters at the same time, Bundler uses only one which has value, prefering the Neighbors parameter. Default: %(default)s"}, "--pc-csv": {"action": "store_true", "default": "False", "help": "Export the georeferenced point cloud in CSV format. Default: %(default)s"}, "--end-with": {"default": "odm_orthophoto", "choices": "['dataset', 'split', 'merge', 'opensfm', 'mve', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto']", "help": "Can be one of:dataset | split | merge | opensfm | mve | odm_filterpoints | odm_meshing | mvs_texturing | odm_georeferencing | odm_dem | odm_orthophoto", "metavar": ""}, "--depthmap-resolution": {"default": "640", "type": "", "metavar": "", "help": "Controls the density of the point cloud by setting the resolution of the depthmap images. Higher values take longer to compute but produce denser point clouds. Default: %(default)s"}, "--texturing-data-term": {"default": "gmi", "choices": "['gmi', 'area']", "help": "Data term: [area, gmi]. Default: %(default)s", "metavar": ""}, "--texturing-skip-visibility-test": {"action": "store_true", "default": "False", "help": "Skip geometric visibility test. Default: %(default)s"}, "--opensfm-depthmap-method": {"default": "PATCH_MATCH", "choices": "['PATCH_MATCH', 'BRUTE_FORCE', 'PATCH_MATCH_SAMPLE']", "help": "Raw depthmap computation algorithm. PATCH_MATCH and PATCH_MATCH_SAMPLE are faster, but might miss some valid points. BRUTE_FORCE takes longer but produces denser reconstructions. Default: %(default)s", "metavar": ""}, "--use-fixed-camera-params": {"action": "store_true", "default": "False", "help": "Turn off camera parameter optimization during bundler"}, "--time": {"action": "store_true", "default": "False", "help": "Generates a benchmark file with runtime info\nDefault: %(default)s"}, "--smrf-threshold": {"default": "0.5", "type": "", "metavar": "", "help": "Simple Morphological Filter elevation threshold parameter (meters). \nDefault: %(default)s"}, "--verbose": {"action": "store_true", "default": "False", "help": "Print additional messages to the console\nDefault: %(default)s"}, "--use-hybrid-bundle-adjustment": {"action": "store_true", "default": "False", "help": "Run local bundle adjustment for every image added to the reconstruction and a global adjustment every 100 images. Speeds up reconstruction for very large datasets."}} \ No newline at end of file From 1b19872687ebc26220d7bee501567891fdf98270 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 25 Jun 2019 14:18:14 -0400 Subject: [PATCH 5/5] Updated docs --- docs/index.adoc | 4 ++-- docs/swagger.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/index.adoc b/docs/index.adoc index c984cc5..2c884dc 100644 --- a/docs/index.adoc +++ b/docs/index.adoc @@ -1,4 +1,4 @@ -= node-opendronemap += NodeODM [[_overview]] @@ -8,7 +8,7 @@ REST API to access ODM === Version information [%hardbreaks] -_Version_ : 1.5.2 +_Version_ : 1.5.3 === Contact information diff --git a/docs/swagger.json b/docs/swagger.json index 2b408ec..51d70a4 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -1 +1 @@ -{"info":{"title":"node-opendronemap","version":"1.5.2","description":"REST API to access ODM","license":{"name":"GPL-3.0"},"contact":{"name":"Piero Toffanin"}},"consumes":["application/json"],"produces":["application/json","application/zip"],"basePath":"/","schemes":["http"],"swagger":"2.0","paths":{"/task/new/init":{"post":{"description":"Initialize the upload of a new task. If successful, a user can start uploading files via /task/new/upload. The task will not start until /task/new/commit is called.","tags":["task"],"parameters":[{"name":"name","in":"formData","description":"An optional name to be associated with the task","required":false,"type":"string"},{"name":"options","in":"formData","description":"Serialized JSON string of the options to use for processing, as an array of the format: [{name: option1, value: value1}, {name: option2, value: value2}, ...]. For example, [{\"name\":\"cmvs-maxImages\",\"value\":\"500\"},{\"name\":\"time\",\"value\":true}]. For a list of all options, call /options","required":false,"type":"string"},{"name":"skipPostProcessing","in":"formData","description":"When set, skips generation of map tiles, derivate assets, point cloud tiles.","required":false,"type":"boolean"},{"name":"webhook","in":"formData","description":"Optional URL to call when processing has ended (either successfully or unsuccessfully).","required":false,"type":"string"},{"name":"outputs","in":"formData","description":"An optional serialized JSON string of paths relative to the project directory that should be included in the all.zip result file, overriding the default behavior.","required":false,"type":"string"},{"name":"dateCreated","in":"formData","description":"An optional timestamp overriding the default creation date of the task.","required":false,"type":"integer"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"},{"name":"set-uuid","in":"header","description":"An optional UUID string that will be used as UUID for this task instead of generating a random one.","required":false,"type":"string"}],"responses":{"200":{"description":"Success","schema":{"type":"object","required":["uuid"],"properties":{"uuid":{"type":"string","description":"UUID of the newly created task"}}}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/new/upload/{uuid}":{"post":{"description":"Adds one or more files to the task created via /task/new/init. It does not start the task. To start the task, call /task/new/commit.","tags":["task"],"consumes":["multipart/form-data"],"parameters":[{"name":"uuid","in":"path","description":"UUID of the task","required":true,"type":"string"},{"name":"images","in":"formData","description":"Images to process, plus an optional GCP file (*.txt) and/or an optional seed file (seed.zip). If included, the GCP file should have .txt extension. If included, the seed archive pre-polulates the task directory with its contents.","required":true,"type":"file"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"File Received","schema":{"$ref":"#/definitions/Response"}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/new/commit/{uuid}":{"post":{"description":"Creates a new task for which images have been uploaded via /task/new/upload.","tags":["task"],"parameters":[{"name":"uuid","in":"path","description":"UUID of the task","required":true,"type":"string"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Success","schema":{"type":"object","required":["uuid"],"properties":{"uuid":{"type":"string","description":"UUID of the newly created task"}}}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/new":{"post":{"description":"Creates a new task and places it at the end of the processing queue. For uploading really large tasks, see /task/new/init instead.","tags":["task"],"consumes":["multipart/form-data"],"parameters":[{"name":"images","in":"formData","description":"Images to process, plus an optional GCP file (*.txt) and/or an optional seed file (seed.zip). If included, the GCP file should have .txt extension. If included, the seed archive pre-polulates the task directory with its contents.","required":false,"type":"file"},{"name":"zipurl","in":"formData","description":"URL of the zip file containing the images to process, plus an optional GCP file. If included, the GCP file should have .txt extension","required":false,"type":"string"},{"name":"name","in":"formData","description":"An optional name to be associated with the task","required":false,"type":"string"},{"name":"options","in":"formData","description":"Serialized JSON string of the options to use for processing, as an array of the format: [{name: option1, value: value1}, {name: option2, value: value2}, ...]. For example, [{\"name\":\"cmvs-maxImages\",\"value\":\"500\"},{\"name\":\"time\",\"value\":true}]. For a list of all options, call /options","required":false,"type":"string"},{"name":"skipPostProcessing","in":"formData","description":"When set, skips generation of map tiles, derivate assets, point cloud tiles.","required":false,"type":"boolean"},{"name":"webhook","in":"formData","description":"Optional URL to call when processing has ended (either successfully or unsuccessfully).","required":false,"type":"string"},{"name":"outputs","in":"formData","description":"An optional serialized JSON string of paths relative to the project directory that should be included in the all.zip result file, overriding the default behavior.","required":false,"type":"string"},{"name":"dateCreated","in":"formData","description":"An optional timestamp overriding the default creation date of the task.","required":false,"type":"integer"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"},{"name":"set-uuid","in":"header","description":"An optional UUID string that will be used as UUID for this task instead of generating a random one.","required":false,"type":"string"}],"responses":{"200":{"description":"Success","schema":{"type":"object","required":["uuid"],"properties":{"uuid":{"type":"string","description":"UUID of the newly created task"}}}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/{uuid}/info":{"get":{"description":"Gets information about this task, such as name, creation date, processing time, status, command line options and number of images being processed. See schema definition for a full list.","tags":["task"],"parameters":[{"name":"uuid","in":"path","description":"UUID of the task","required":true,"type":"string"},{"name":"options","in":"formData","description":"Serialized JSON string of the options to use for processing, as an array of the format: [{name: option1, value: value1}, {name: option2, value: value2}, ...]. For example, [{\"name\":\"cmvs-maxImages\",\"value\":\"500\"},{\"name\":\"time\",\"value\":true}]. For a list of all options, call /options","required":false,"type":"string"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"},{"name":"with_output","in":"query","description":"Optionally retrieve the console output for this task. The parameter specifies the line number that the console output should be truncated from. For example, passing a value of 100 will retrieve the console output starting from line 100. By default no console output is added to the response.","default":0,"required":false,"type":"integer"}],"responses":{"200":{"description":"Task Information","schema":{"title":"TaskInfo","type":"object","required":["uuid","name","dateCreated","processingTime","status","options","imagesCount","progress"],"properties":{"uuid":{"type":"string","description":"UUID"},"name":{"type":"string","description":"Name"},"dateCreated":{"type":"integer","description":"Timestamp"},"processingTime":{"type":"integer","description":"Milliseconds that have elapsed since the task started being processed."},"status":{"type":"object","required":["code"],"properties":{"code":{"type":"integer","description":"Status code (10 = QUEUED, 20 = RUNNING, 30 = FAILED, 40 = COMPLETED, 50 = CANCELED)","enum":[10,20,30,40,50]}}},"options":{"type":"array","description":"List of options used to process this task","items":{"type":"object","required":["name","value"],"properties":{"name":{"type":"string","description":"Option name (example: \"odm_meshing-octreeDepth\")"},"value":{"type":"string","description":"Value (example: 9)"}}}},"imagesCount":{"type":"integer","description":"Number of images"},"progress":{"type":"float","description":"Percentage progress (estimated) of the task"},"output":{"type":"array","description":"Console output for the task (only if requested via ?output=)","items":{"type":"string"}}}}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/{uuid}/output":{"get":{"description":"Retrieves the console output of the OpenDroneMap's process. Useful for monitoring execution and to provide updates to the user.","tags":["task"],"parameters":[{"name":"uuid","in":"path","description":"UUID of the task","required":true,"type":"string"},{"name":"line","in":"query","description":"Optional line number that the console output should be truncated from. For example, passing a value of 100 will retrieve the console output starting from line 100. Defaults to 0 (retrieve all console output).","default":0,"required":false,"type":"integer"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Console Output","schema":{"type":"string"}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/{uuid}/download/{asset}":{"get":{"description":"Retrieves an asset (the output of OpenDroneMap's processing) associated with a task","tags":["task"],"produces":["application/zip"],"parameters":[{"name":"uuid","in":"path","type":"string","description":"UUID of the task","required":true},{"name":"asset","in":"path","type":"string","description":"Type of asset to download. Use \"all.zip\" for zip file containing all assets.","required":true,"enum":["all.zip","orthophoto.tif"]},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Asset File","schema":{"type":"file"}},"default":{"description":"Error message","schema":{"$ref":"#/definitions/Error"}}}}},"/task/cancel":{"post":{"description":"Cancels a task (stops its execution, or prevents it from being executed)","parameters":[{"name":"uuid","in":"body","description":"UUID of the task","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Command Received","schema":{"$ref":"#/definitions/Response"}}}}},"/task/remove":{"post":{"description":"Removes a task and deletes all of its assets","parameters":[{"name":"uuid","in":"body","description":"UUID of the task","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Command Received","schema":{"$ref":"#/definitions/Response"}}}}},"/task/restart":{"post":{"description":"Restarts a task that was previously canceled, that had failed to process or that successfully completed","parameters":[{"name":"uuid","in":"body","description":"UUID of the task","required":true,"schema":{"type":"string"}},{"name":"options","in":"body","description":"Serialized JSON string of the options to use for processing, as an array of the format: [{name: option1, value: value1}, {name: option2, value: value2}, ...]. For example, [{\"name\":\"cmvs-maxImages\",\"value\":\"500\"},{\"name\":\"time\",\"value\":true}]. For a list of all options, call /options. Overrides the previous options set for this task.","required":false,"schema":{"type":"string"}},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Command Received","schema":{"$ref":"#/definitions/Response"}}}}},"/options":{"get":{"description":"Retrieves the command line options that can be passed to process a task","parameters":[{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"tags":["server"],"responses":{"200":{"description":"Options","schema":{"type":"array","items":{"title":"Option","type":"object","required":["name","type","value","domain","help"],"properties":{"name":{"type":"string","description":"Command line option (exactly as it is passed to the OpenDroneMap process, minus the leading '--')"},"type":{"type":"string","description":"Datatype of the value of this option","enum":["int","float","string","bool"]},"value":{"type":"string","description":"Default value of this option"},"domain":{"type":"string","description":"Valid range of values (for example, \"positive integer\" or \"float > 0.0\")"},"help":{"type":"string","description":"Description of what this option does"}}}}}}}},"/info":{"get":{"description":"Retrieves information about this node","parameters":[{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"tags":["server"],"responses":{"200":{"description":"Info","schema":{"type":"object","required":["version","taskQueueCount","maxImages","engineVersion","engine"],"properties":{"version":{"type":"string","description":"Current API version"},"taskQueueCount":{"type":"integer","description":"Number of tasks currently being processed or waiting to be processed"},"availableMemory":{"type":"integer","description":"Amount of RAM available in bytes"},"totalMemory":{"type":"integer","description":"Amount of total RAM in the system in bytes"},"cpuCores":{"type":"integer","description":"Number of CPU cores (virtual)"},"maxImages":{"type":"integer","description":"Maximum number of images allowed for new tasks or null if there's no limit."},"maxParallelTasks":{"type":"integer","description":"Maximum number of tasks that can be processed simultaneously"},"engineVersion":{"type":"string","description":"Current version of processing engine"},"engine":{"type":"string","description":"Lowercase identifier of processing engine"}}}}}}},"/auth/info":{"get":{"description":"Retrieves login information for this node.","tags":["auth"],"responses":{"200":{"description":"LoginInformation","schema":{"type":"object","required":["message","loginUrl","registerUrl"],"properties":{"message":{"type":"string","description":"Message to be displayed to the user prior to login/registration. This might include instructions on how to register or login, or to communicate that authentication is not available."},"loginUrl":{"type":"string","description":"URL (absolute or relative) where to make a POST request to obtain a token, or null if login is disabled."},"registerUrl":{"type":"string","description":"URL (absolute or relative) where to make a POST request to register a user, or null if registration is disabled."}}}}}}},"/auth/login":{"post":{"description":"Retrieve a token from a username/password pair.","parameters":[{"name":"username","in":"body","description":"Username","required":true,"schema":{"type":"string"}},{"name":"password","in":"body","description":"Password","required":true,"type":"string"}],"responses":{"200":{"description":"Login Succeeded","schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string","description":"Token to be passed as a query parameter to other API calls."}}}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/auth/register":{"post":{"description":"Register a new username/password.","parameters":[{"name":"username","in":"body","description":"Username","required":true,"schema":{"type":"string"}},{"name":"password","in":"body","description":"Password","required":true,"type":"string"}],"responses":{"200":{"description":"Response","schema":{"$ref":"#/definitions/Response"}}}}}},"definitions":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Description of the error"}}},"Response":{"type":"object","required":["success"],"properties":{"success":{"type":"boolean","description":"true if the command succeeded, false otherwise"},"error":{"type":"string","description":"Error message if an error occured"}}}},"responses":{},"parameters":{},"securityDefinitions":{},"tags":[]} \ No newline at end of file +{"info":{"title":"NodeODM","version":"1.5.3","description":"REST API to access ODM","license":{"name":"GPL-3.0"},"contact":{"name":"Piero Toffanin"}},"consumes":["application/json"],"produces":["application/json","application/zip"],"basePath":"/","schemes":["http"],"swagger":"2.0","paths":{"/task/new/init":{"post":{"description":"Initialize the upload of a new task. If successful, a user can start uploading files via /task/new/upload. The task will not start until /task/new/commit is called.","tags":["task"],"parameters":[{"name":"name","in":"formData","description":"An optional name to be associated with the task","required":false,"type":"string"},{"name":"options","in":"formData","description":"Serialized JSON string of the options to use for processing, as an array of the format: [{name: option1, value: value1}, {name: option2, value: value2}, ...]. For example, [{\"name\":\"cmvs-maxImages\",\"value\":\"500\"},{\"name\":\"time\",\"value\":true}]. For a list of all options, call /options","required":false,"type":"string"},{"name":"skipPostProcessing","in":"formData","description":"When set, skips generation of map tiles, derivate assets, point cloud tiles.","required":false,"type":"boolean"},{"name":"webhook","in":"formData","description":"Optional URL to call when processing has ended (either successfully or unsuccessfully).","required":false,"type":"string"},{"name":"outputs","in":"formData","description":"An optional serialized JSON string of paths relative to the project directory that should be included in the all.zip result file, overriding the default behavior.","required":false,"type":"string"},{"name":"dateCreated","in":"formData","description":"An optional timestamp overriding the default creation date of the task.","required":false,"type":"integer"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"},{"name":"set-uuid","in":"header","description":"An optional UUID string that will be used as UUID for this task instead of generating a random one.","required":false,"type":"string"}],"responses":{"200":{"description":"Success","schema":{"type":"object","required":["uuid"],"properties":{"uuid":{"type":"string","description":"UUID of the newly created task"}}}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/new/upload/{uuid}":{"post":{"description":"Adds one or more files to the task created via /task/new/init. It does not start the task. To start the task, call /task/new/commit.","tags":["task"],"consumes":["multipart/form-data"],"parameters":[{"name":"uuid","in":"path","description":"UUID of the task","required":true,"type":"string"},{"name":"images","in":"formData","description":"Images to process, plus an optional GCP file (*.txt) and/or an optional seed file (seed.zip). If included, the GCP file should have .txt extension. If included, the seed archive pre-polulates the task directory with its contents.","required":true,"type":"file"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"File Received","schema":{"$ref":"#/definitions/Response"}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/new/commit/{uuid}":{"post":{"description":"Creates a new task for which images have been uploaded via /task/new/upload.","tags":["task"],"parameters":[{"name":"uuid","in":"path","description":"UUID of the task","required":true,"type":"string"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Success","schema":{"type":"object","required":["uuid"],"properties":{"uuid":{"type":"string","description":"UUID of the newly created task"}}}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/new":{"post":{"description":"Creates a new task and places it at the end of the processing queue. For uploading really large tasks, see /task/new/init instead.","tags":["task"],"consumes":["multipart/form-data"],"parameters":[{"name":"images","in":"formData","description":"Images to process, plus an optional GCP file (*.txt) and/or an optional seed file (seed.zip). If included, the GCP file should have .txt extension. If included, the seed archive pre-polulates the task directory with its contents.","required":false,"type":"file"},{"name":"zipurl","in":"formData","description":"URL of the zip file containing the images to process, plus an optional GCP file. If included, the GCP file should have .txt extension","required":false,"type":"string"},{"name":"name","in":"formData","description":"An optional name to be associated with the task","required":false,"type":"string"},{"name":"options","in":"formData","description":"Serialized JSON string of the options to use for processing, as an array of the format: [{name: option1, value: value1}, {name: option2, value: value2}, ...]. For example, [{\"name\":\"cmvs-maxImages\",\"value\":\"500\"},{\"name\":\"time\",\"value\":true}]. For a list of all options, call /options","required":false,"type":"string"},{"name":"skipPostProcessing","in":"formData","description":"When set, skips generation of map tiles, derivate assets, point cloud tiles.","required":false,"type":"boolean"},{"name":"webhook","in":"formData","description":"Optional URL to call when processing has ended (either successfully or unsuccessfully).","required":false,"type":"string"},{"name":"outputs","in":"formData","description":"An optional serialized JSON string of paths relative to the project directory that should be included in the all.zip result file, overriding the default behavior.","required":false,"type":"string"},{"name":"dateCreated","in":"formData","description":"An optional timestamp overriding the default creation date of the task.","required":false,"type":"integer"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"},{"name":"set-uuid","in":"header","description":"An optional UUID string that will be used as UUID for this task instead of generating a random one.","required":false,"type":"string"}],"responses":{"200":{"description":"Success","schema":{"type":"object","required":["uuid"],"properties":{"uuid":{"type":"string","description":"UUID of the newly created task"}}}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/{uuid}/info":{"get":{"description":"Gets information about this task, such as name, creation date, processing time, status, command line options and number of images being processed. See schema definition for a full list.","tags":["task"],"parameters":[{"name":"uuid","in":"path","description":"UUID of the task","required":true,"type":"string"},{"name":"options","in":"formData","description":"Serialized JSON string of the options to use for processing, as an array of the format: [{name: option1, value: value1}, {name: option2, value: value2}, ...]. For example, [{\"name\":\"cmvs-maxImages\",\"value\":\"500\"},{\"name\":\"time\",\"value\":true}]. For a list of all options, call /options","required":false,"type":"string"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"},{"name":"with_output","in":"query","description":"Optionally retrieve the console output for this task. The parameter specifies the line number that the console output should be truncated from. For example, passing a value of 100 will retrieve the console output starting from line 100. By default no console output is added to the response.","default":0,"required":false,"type":"integer"}],"responses":{"200":{"description":"Task Information","schema":{"title":"TaskInfo","type":"object","required":["uuid","name","dateCreated","processingTime","status","options","imagesCount","progress"],"properties":{"uuid":{"type":"string","description":"UUID"},"name":{"type":"string","description":"Name"},"dateCreated":{"type":"integer","description":"Timestamp"},"processingTime":{"type":"integer","description":"Milliseconds that have elapsed since the task started being processed."},"status":{"type":"object","required":["code"],"properties":{"code":{"type":"integer","description":"Status code (10 = QUEUED, 20 = RUNNING, 30 = FAILED, 40 = COMPLETED, 50 = CANCELED)","enum":[10,20,30,40,50]}}},"options":{"type":"array","description":"List of options used to process this task","items":{"type":"object","required":["name","value"],"properties":{"name":{"type":"string","description":"Option name (example: \"odm_meshing-octreeDepth\")"},"value":{"type":"string","description":"Value (example: 9)"}}}},"imagesCount":{"type":"integer","description":"Number of images"},"progress":{"type":"float","description":"Percentage progress (estimated) of the task"},"output":{"type":"array","description":"Console output for the task (only if requested via ?output=)","items":{"type":"string"}}}}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/{uuid}/output":{"get":{"description":"Retrieves the console output of the OpenDroneMap's process. Useful for monitoring execution and to provide updates to the user.","tags":["task"],"parameters":[{"name":"uuid","in":"path","description":"UUID of the task","required":true,"type":"string"},{"name":"line","in":"query","description":"Optional line number that the console output should be truncated from. For example, passing a value of 100 will retrieve the console output starting from line 100. Defaults to 0 (retrieve all console output).","default":0,"required":false,"type":"integer"},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Console Output","schema":{"type":"string"}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/task/{uuid}/download/{asset}":{"get":{"description":"Retrieves an asset (the output of OpenDroneMap's processing) associated with a task","tags":["task"],"produces":["application/zip"],"parameters":[{"name":"uuid","in":"path","type":"string","description":"UUID of the task","required":true},{"name":"asset","in":"path","type":"string","description":"Type of asset to download. Use \"all.zip\" for zip file containing all assets.","required":true,"enum":["all.zip","orthophoto.tif"]},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Asset File","schema":{"type":"file"}},"default":{"description":"Error message","schema":{"$ref":"#/definitions/Error"}}}}},"/task/cancel":{"post":{"description":"Cancels a task (stops its execution, or prevents it from being executed)","parameters":[{"name":"uuid","in":"body","description":"UUID of the task","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Command Received","schema":{"$ref":"#/definitions/Response"}}}}},"/task/remove":{"post":{"description":"Removes a task and deletes all of its assets","parameters":[{"name":"uuid","in":"body","description":"UUID of the task","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Command Received","schema":{"$ref":"#/definitions/Response"}}}}},"/task/restart":{"post":{"description":"Restarts a task that was previously canceled, that had failed to process or that successfully completed","parameters":[{"name":"uuid","in":"body","description":"UUID of the task","required":true,"schema":{"type":"string"}},{"name":"options","in":"body","description":"Serialized JSON string of the options to use for processing, as an array of the format: [{name: option1, value: value1}, {name: option2, value: value2}, ...]. For example, [{\"name\":\"cmvs-maxImages\",\"value\":\"500\"},{\"name\":\"time\",\"value\":true}]. For a list of all options, call /options. Overrides the previous options set for this task.","required":false,"schema":{"type":"string"}},{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Command Received","schema":{"$ref":"#/definitions/Response"}}}}},"/options":{"get":{"description":"Retrieves the command line options that can be passed to process a task","parameters":[{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"tags":["server"],"responses":{"200":{"description":"Options","schema":{"type":"array","items":{"title":"Option","type":"object","required":["name","type","value","domain","help"],"properties":{"name":{"type":"string","description":"Command line option (exactly as it is passed to the OpenDroneMap process, minus the leading '--')"},"type":{"type":"string","description":"Datatype of the value of this option","enum":["int","float","string","bool"]},"value":{"type":"string","description":"Default value of this option"},"domain":{"type":"string","description":"Valid range of values (for example, \"positive integer\" or \"float > 0.0\")"},"help":{"type":"string","description":"Description of what this option does"}}}}}}}},"/info":{"get":{"description":"Retrieves information about this node","parameters":[{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"tags":["server"],"responses":{"200":{"description":"Info","schema":{"type":"object","required":["version","taskQueueCount","maxImages","engineVersion","engine"],"properties":{"version":{"type":"string","description":"Current API version"},"taskQueueCount":{"type":"integer","description":"Number of tasks currently being processed or waiting to be processed"},"availableMemory":{"type":"integer","description":"Amount of RAM available in bytes"},"totalMemory":{"type":"integer","description":"Amount of total RAM in the system in bytes"},"cpuCores":{"type":"integer","description":"Number of CPU cores (virtual)"},"maxImages":{"type":"integer","description":"Maximum number of images allowed for new tasks or null if there's no limit."},"maxParallelTasks":{"type":"integer","description":"Maximum number of tasks that can be processed simultaneously"},"engineVersion":{"type":"string","description":"Current version of processing engine"},"engine":{"type":"string","description":"Lowercase identifier of processing engine"}}}}}}},"/auth/info":{"get":{"description":"Retrieves login information for this node.","tags":["auth"],"responses":{"200":{"description":"LoginInformation","schema":{"type":"object","required":["message","loginUrl","registerUrl"],"properties":{"message":{"type":"string","description":"Message to be displayed to the user prior to login/registration. This might include instructions on how to register or login, or to communicate that authentication is not available."},"loginUrl":{"type":"string","description":"URL (absolute or relative) where to make a POST request to obtain a token, or null if login is disabled."},"registerUrl":{"type":"string","description":"URL (absolute or relative) where to make a POST request to register a user, or null if registration is disabled."}}}}}}},"/auth/login":{"post":{"description":"Retrieve a token from a username/password pair.","parameters":[{"name":"username","in":"body","description":"Username","required":true,"schema":{"type":"string"}},{"name":"password","in":"body","description":"Password","required":true,"type":"string"}],"responses":{"200":{"description":"Login Succeeded","schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string","description":"Token to be passed as a query parameter to other API calls."}}}},"default":{"description":"Error","schema":{"$ref":"#/definitions/Error"}}}}},"/auth/register":{"post":{"description":"Register a new username/password.","parameters":[{"name":"username","in":"body","description":"Username","required":true,"schema":{"type":"string"}},{"name":"password","in":"body","description":"Password","required":true,"type":"string"}],"responses":{"200":{"description":"Response","schema":{"$ref":"#/definitions/Response"}}}}}},"definitions":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Description of the error"}}},"Response":{"type":"object","required":["success"],"properties":{"success":{"type":"boolean","description":"true if the command succeeded, false otherwise"},"error":{"type":"string","description":"Error message if an error occured"}}}},"responses":{},"parameters":{},"securityDefinitions":{},"tags":[]} \ No newline at end of file