From fc5c87e9c8d9924098475222aa50b2605af90430 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Fri, 13 Jan 2023 10:52:57 -0500 Subject: [PATCH] Fix alignment file search --- docs/index.adoc | 6 +++--- docs/swagger.json | 2 +- index.js | 4 ++-- libs/Task.js | 3 ++- libs/taskNew.js | 4 ++-- public/js/main.js | 2 +- tests/odm_options.json | 2 +- 7 files changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/index.adoc b/docs/index.adoc index 10f0ccd..35cc79b 100644 --- a/docs/index.adoc +++ b/docs/index.adoc @@ -8,7 +8,7 @@ REST API to access ODM === Version information [%hardbreaks] -_Version_ : 2.1.4 +_Version_ : 2.2.1 === Contact information @@ -340,7 +340,7 @@ _optional_|Token required for authentication (when authentication is required).| |*FormData*|*dateCreated* + _optional_|An optional timestamp overriding the default creation date of the task.|integer| |*FormData*|*images* + -_optional_|Images to process, plus optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt) or 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.|file| +_optional_|Images to process, plus optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt), seed file (seed.zip) or alignment files (align.las, align.laz, align.tif). If included, the GCP file should have .txt extension. If included, the seed archive pre-polulates the task directory with its contents.|file| |*FormData*|*name* + _optional_|An optional name to be associated with the task|string| |*FormData*|*options* + @@ -503,7 +503,7 @@ _required_|UUID of the task|string| |*Query*|*token* + _optional_|Token required for authentication (when authentication is required).|string| |*FormData*|*images* + -_required_|Images to process, plus optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt) or 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.|file| +_required_|Images to process, plus optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt), seed file (seed.zip) or alignment files (align.las, align.laz, align.tif). If included, the GCP file should have .txt extension. If included, the seed archive pre-polulates the task directory with its contents.|file| |=== diff --git a/docs/swagger.json b/docs/swagger.json index 758f943..23f4c6b 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -1 +1 @@ -{"info":{"title":"NodeODM","version":"2.1.4","description":"REST API to access ODM","license":{"name":"AGPL-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 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 optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt) or 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 optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt) or 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 GEO file and/or 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 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/list":{"get":{"description":"Gets the list of tasks available on this node.","tags":["task"],"parameters":[{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Task List","schema":{"title":"TaskList","type":"array","items":{"type":"object","required":["uuid"],"properties":{"uuid":{"type":"string","description":"UUID"}}}}},"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":"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"]},{"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":"2.2.1","description":"REST API to access ODM","license":{"name":"AGPL-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 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 optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt), seed file (seed.zip) or alignment files (align.las, align.laz, align.tif). 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 optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt), seed file (seed.zip) or alignment files (align.las, align.laz, align.tif). 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 GEO file and/or 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 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/list":{"get":{"description":"Gets the list of tasks available on this node.","tags":["task"],"parameters":[{"name":"token","in":"query","description":"Token required for authentication (when authentication is required).","required":false,"type":"string"}],"responses":{"200":{"description":"Task List","schema":{"title":"TaskList","type":"array","items":{"type":"object","required":["uuid"],"properties":{"uuid":{"type":"string","description":"UUID"}}}}},"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":"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"]},{"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 diff --git a/index.js b/index.js index 9f74a53..fd38730 100644 --- a/index.js +++ b/index.js @@ -142,7 +142,7 @@ app.post('/task/new/init', authCheck, taskNew.assignUUID, formDataParser, taskNe * - * name: images * in: formData - * description: Images to process, plus optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt) or 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. + * description: Images to process, plus optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt), seed file (seed.zip) or alignment files (align.las, align.laz, align.tif). 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 * - @@ -209,7 +209,7 @@ app.post('/task/new/commit/:uuid', authCheck, taskNew.getUUID, taskNew.handleCom * - * name: images * in: formData - * description: Images to process, plus optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt) or 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. + * description: Images to process, plus optional files such as a GEO file (geo.txt), image groups file (image_groups.txt), GCP file (*.txt), seed file (seed.zip) or alignment files (align.las, align.laz, align.tif). 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 * - diff --git a/libs/Task.js b/libs/Task.js index 8a8b800..b655c71 100644 --- a/libs/Task.js +++ b/libs/Task.js @@ -89,9 +89,10 @@ module.exports = class Task{ this.imageGroupsFiles.push(file); }else if (/\.txt$/gi.test(file)){ this.gcpFiles.push(file); - }else if (/^align.(tif|laz|las)$/.test(file)){ + }else if (/^align\.(tif|laz|las)$/gi.test(file)){ this.alignFiles.push(file); } + logger.debug(file); }); logger.debug(`Found ${this.gcpFiles.length} GCP files (${this.gcpFiles.join(" ")}) for ${this.uuid}`); logger.debug(`Found ${this.geoFiles.length} GEO files (${this.geoFiles.join(" ")}) for ${this.uuid}`); diff --git a/libs/taskNew.js b/libs/taskNew.js index 9e25f09..a6a5f38 100644 --- a/libs/taskNew.js +++ b/libs/taskNew.js @@ -363,13 +363,13 @@ module.exports = { }, cb => { - // Find any *.txt (GCP) file and move it to the data//gcp directory + // Find any *.txt (GCP) file or alignment file and move it to the data//gcp directory // also remove any lingering zipurl.zip fs.readdir(destImagesPath, (err, entries) => { if (err) cb(err); else { async.eachSeries(entries, (entry, cb) => { - if (/\.txt$/gi.test(entry)) { + if (/\.txt$/gi.test(entry) || /^align\.(las|laz|tif)$/gi.test(entry)) { mv(path.join(destImagesPath, entry), path.join(destGcpPath, entry), cb); }else if (/\.zip$/gi.test(entry)){ fs.unlink(path.join(destImagesPath, entry), cb); diff --git a/public/js/main.js b/public/js/main.js index 8fcc3be..8b835c5 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -119,7 +119,7 @@ $(function() { url : "/task/new/upload/", parallelUploads: 8, // http://blog.olamisan.com/max-parallel-http-connections-in-a-browser max parallel connections uploadMultiple: false, - acceptedFiles: "image/*,text/*,application/*", + acceptedFiles: "image/*,text/*,application/*,.las,.laz", autoProcessQueue: false, createImageThumbnails: false, previewTemplate: '
', diff --git a/tests/odm_options.json b/tests/odm_options.json index cd04499..c2a780a 100644 --- a/tests/odm_options.json +++ b/tests/odm_options.json @@ -1 +1 @@ -{"-h": {"action": "help", "default": "==SUPPRESS==", "help": "show this help message and exit"}, "--project-path": {"metavar": "", "action": "", "help": "Path to the project folder. Your project folder should contain subfolders for each dataset. Each dataset should have an \"images\" folder."}, "name": {"metavar": "", "action": "", "type": "", "default": "code", "nargs": "?", "help": "Name of dataset (i.e subfolder name within project folder). Default: %(default)s"}, "--resize-to": {"metavar": "", "action": "", "default": "2048", "type": "", "help": "Legacy option (use --feature-quality instead). Resizes images by the largest side for feature extraction purposes only. Set to -1 to disable. This does not affect the final orthophoto resolution quality and will not resize the original images. Default: %(default)s"}, "--end-with": {"metavar": "", "action": "", "default": "odm_report", "choices": "['dataset', 'split', 'merge', 'opensfm', 'openmvs', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto', 'odm_report']", "help": "End processing at this stage. Can be one of: %(choices)s. Default: %(default)s"}, "--rerun": {"metavar": "", "action": "", "choices": "['dataset', 'split', 'merge', 'opensfm', 'openmvs', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto', 'odm_report']", "help": "Rerun this stage only and stop. Can be one of: %(choices)s. Default: %(default)s"}, "--rerun-all": {"action": "", "nargs": "0", "default": "False", "help": "Permanently delete all previous results and rerun the processing pipeline."}, "--rerun-from": {"action": "", "metavar": "", "choices": "['dataset', 'split', 'merge', 'opensfm', 'openmvs', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto', 'odm_report']", "help": "Rerun processing from this stage. Can be one of: %(choices)s. Default: %(default)s"}, "--min-num-features": {"metavar": "", "action": "", "default": "8000", "type": "", "help": "Minimum number of features to extract per image. More features can be useful for finding more matches between images, potentially allowing the reconstruction of areas with little overlap or insufficient features. More features also slow down processing. Default: %(default)s"}, "--feature-type": {"metavar": "", "action": "", "default": "sift", "choices": "['sift', 'hahog']", "help": "Choose the algorithm for extracting keypoints and computing descriptors. Can be one of: %(choices)s. Default: %(default)s"}, "--feature-quality": {"metavar": "", "action": "", "default": "high", "choices": "['ultra', 'high', 'medium', 'low', 'lowest']", "help": "Set feature extraction quality. Higher quality generates better features, but requires more memory and takes longer. Can be one of: %(choices)s. Default: %(default)s"}, "--matcher-type": {"metavar": "", "action": "", "default": "flann", "choices": "['flann', 'bow']", "help": "Matcher algorithm, Fast Library for Approximate Nearest Neighbors or Bag of Words. FLANN is slower, but more stable. BOW is faster, but can sometimes miss valid matches. Can be one of: %(choices)s. Default: %(default)s"}, "--matcher-neighbors": {"metavar": "", "action": "", "default": "8", "type": "", "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. Default: %(default)s"}, "--matcher-distance": {"metavar": "", "action": "", "default": "0", "type": "", "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"}, "--use-fixed-camera-params": {"action": "", "nargs": "0", "default": "False", "help": "Turn off camera parameter optimization during bundle adjustment. This can be sometimes useful for improving results that exhibit doming/bowling or when images are taken with a rolling shutter camera. Default: %(default)s"}, "--cameras": {"default": "", "metavar": "", "action": "", "type": "", "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"}, "--camera-lens": {"metavar": "", "action": "", "default": "auto", "choices": "['auto', 'perspective', 'brown', 'fisheye', 'spherical']", "help": "Set a camera projection type. Manually setting a value can help improve geometric undistortion. By default the application tries to determine a lens type from the images metadata. Can be one of: %(choices)s. Default: %(default)s"}, "--radiometric-calibration": {"metavar": "", "action": "", "default": "none", "choices": "['none', 'camera', 'camera+sun']", "help": "Set the radiometric calibration to perform on images. When processing multispectral images you should set this option to obtain reflectance values (otherwise you will get digital number values). [camera] applies black level, vignetting, row gradient gain/exposure compensation (if appropriate EXIF tags are found). [camera+sun] is experimental, applies all the corrections of [camera], plus compensates for spectral radiance registered via a downwelling light sensor (DLS) taking in consideration the angle of the sun. Can be one of: %(choices)s. Default: %(default)s"}, "--max-concurrency": {"metavar": "", "action": "", "default": "4", "type": "", "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"}, "--depthmap-resolution": {"metavar": "", "action": "", "type": "", "default": "640", "help": "Legacy option (use --pc-quality instead). 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"}, "--use-hybrid-bundle-adjustment": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--use-3dmesh": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--skip-3dmodel": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--skip-report": {"action": "", "nargs": "0", "default": "False", "help": "Skip generation of PDF report. This can save time if you don't need a report. Default: %(default)s"}, "--ignore-gsd": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--mesh-size": {"metavar": "", "action": "", "default": "200000", "type": "", "help": "The maximum vertex count of the output mesh. Default: %(default)s"}, "--mesh-octree-depth": {"metavar": "", "action": "", "default": "11", "type": "", "help": "Octree depth used in the mesh reconstruction, increase to get more vertices, recommended values are 8-12. Default: %(default)s"}, "--fast-orthophoto": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--crop": {"metavar": "", "action": "", "default": "3", "type": "", "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"}, "--pc-quality": {"metavar": "", "action": "", "default": "medium", "choices": "['ultra', 'high', 'medium', 'low', 'lowest']", "help": "Set point cloud quality. Higher quality generates better, denser point clouds, but requires more memory and takes longer. Each step up in quality increases processing time roughly by a factor of 4x.Can be one of: %(choices)s. Default: %(default)s"}, "--pc-classify": {"action": "", "nargs": "0", "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"}, "--pc-csv": {"action": "", "nargs": "0", "default": "False", "help": "Export the georeferenced point cloud in CSV format. Default: %(default)s"}, "--pc-las": {"action": "", "nargs": "0", "default": "False", "help": "Export the georeferenced point cloud in LAS format. Default: %(default)s"}, "--pc-ept": {"action": "", "nargs": "0", "default": "False", "help": "Export the georeferenced point cloud in Entwine Point Tile (EPT) format. Default: %(default)s"}, "--pc-filter": {"metavar": "", "action": "", "type": "", "default": "2.5", "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. Default: %(default)s"}, "--pc-sample": {"metavar": "", "action": "", "type": "", "default": "0", "help": "Filters the point cloud by keeping only a single point around a radius N (in meters). This can be useful to limit the output resolution of the point cloud. Set to 0 to disable sampling. Default: %(default)s"}, "--smrf-scalar": {"metavar": "", "action": "", "type": "", "default": "1.25", "help": "Simple Morphological Filter elevation scalar parameter. Default: %(default)s"}, "--smrf-slope": {"metavar": "", "action": "", "type": "", "default": "0.15", "help": "Simple Morphological Filter slope parameter (rise over run). Default: %(default)s"}, "--smrf-threshold": {"metavar": "", "action": "", "type": "", "default": "0.5", "help": "Simple Morphological Filter elevation threshold parameter (meters). Default: %(default)s"}, "--smrf-window": {"metavar": "", "action": "", "type": "", "default": "18.0", "help": "Simple Morphological Filter window radius parameter (meters). Default: %(default)s"}, "--texturing-data-term": {"metavar": "", "action": "", "default": "gmi", "choices": "['gmi', 'area']", "help": "When texturing the 3D mesh, for each triangle, choose to prioritize images with sharp features (gmi) or those that cover the largest area (area). Default: %(default)s"}, "--texturing-outlier-removal-type": {"metavar": "", "action": "", "default": "gauss_clamping", "choices": "['none', 'gauss_clamping', 'gauss_damping']", "help": "Type of photometric outlier removal method. Can be one of: %(choices)s. Default: %(default)s"}, "--texturing-skip-global-seam-leveling": {"action": "", "nargs": "0", "default": "False", "help": "Skip normalization of colors across all images. Useful when processing radiometric data. Default: %(default)s"}, "--texturing-skip-local-seam-leveling": {"action": "", "nargs": "0", "default": "False", "help": "Skip the blending of colors near seams. Default: %(default)s"}, "--texturing-tone-mapping": {"metavar": "", "action": "", "choices": "['none', 'gamma']", "default": "none", "help": "Turn on gamma tone mapping or none for no tone mapping. Can be one of %(choices)s. Default: %(default)s "}, "--gcp": {"metavar": "", "action": "", "default": "None", "help": "Path to the file containing the ground control points used for georeferencing. The file needs to use the following format: \nEPSG: or <+proj definition>\ngeo_x geo_y geo_z im_x im_y image_name [gcp_name] [extra1] [extra2]\nDefault: %(default)s"}, "--geo": {"metavar": "", "action": "", "default": "None", "help": "Path to the image geolocation file containing the camera center coordinates used for georeferencing. Note that omega/phi/kappa are currently not supported (you can set them to 0). The file needs to use the following format: \nEPSG: or <+proj definition>\nimage_name geo_x geo_y geo_z [omega (degrees)] [phi (degrees)] [kappa (degrees)] [horz accuracy (meters)] [vert accuracy (meters)]\nDefault: %(default)s"}, "--use-exif": {"action": "", "nargs": "0", "default": "False", "help": "Use this tag if you have a GCP File but want to use the EXIF information for georeferencing instead. Default: %(default)s"}, "--dtm": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--dsm": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--dem-gapfill-steps": {"metavar": "", "action": "", "default": "3", "type": "", "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. Default: %(default)s"}, "--dem-resolution": {"metavar": "", "action": "", "type": "", "default": "5", "help": "DSM/DTM resolution in cm / pixel. Note that this value is capped by a ground sampling distance (GSD) estimate. To remove the cap, check --ignore-gsd also. Default: %(default)s"}, "--dem-decimation": {"metavar": "", "action": "", "default": "1", "type": "", "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 of DEM results in very large datasets. Default: %(default)s"}, "--dem-euclidean-map": {"action": "", "nargs": "0", "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"}, "--orthophoto-resolution": {"metavar": " 0.0>", "action": "", "default": "5", "type": "", "help": "Orthophoto resolution in cm / pixel. Note that this value is capped by a ground sampling distance (GSD) estimate. To remove the cap, check --ignore-gsd also. Default: %(default)s"}, "--orthophoto-no-tiled": {"action": "", "nargs": "0", "default": "False", "help": "Set this parameter if you want a striped GeoTIFF. Default: %(default)s"}, "--orthophoto-png": {"action": "", "nargs": "0", "default": "False", "help": "Set this parameter if you want to generate a PNG rendering of the orthophoto. Default: %(default)s"}, "--orthophoto-compression": {"metavar": "", "action": "", "type": "", "choices": "['JPEG', 'LZW', 'PACKBITS', 'DEFLATE', 'LZMA', 'NONE']", "default": "DEFLATE", "help": "Set the compression to use for orthophotos. Can be one of: %(choices)s. Default: %(default)s"}, "--orthophoto-cutline": {"action": "", "nargs": "0", "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"}, "--tiles": {"action": "", "nargs": "0", "default": "False", "help": "Generate static tiles for orthophotos and DEMs that are suitable for viewers like Leaflet or OpenLayers. Default: %(default)s"}, "--build-overviews": {"action": "", "nargs": "0", "default": "False", "help": "Build orthophoto overviews for faster display in programs such as QGIS. Default: %(default)s"}, "--verbose": {"action": "", "nargs": "0", "default": "False", "help": "Print additional messages to the console. Default: %(default)s"}, "--time": {"action": "", "nargs": "0", "default": "False", "help": "Generates a benchmark file with runtime info. Default: %(default)s"}, "--debug": {"action": "", "nargs": "0", "default": "False", "help": "Print debug messages. Default: %(default)s"}, "--version": {"action": "version", "version": "ODM 2.4.1", "help": "Displays version number and exits. "}, "--split": {"type": "", "action": "", "default": "999999", "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. Default: %(default)s"}, "--split-overlap": {"type": "", "action": "", "metavar": "", "default": "150", "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. Default: %(default)s"}, "--sm-cluster": {"metavar": "", "action": "", "type": "", "default": "None", "help": "URL to a ClusterODM instance for distributing a split-merge workflow on multiple nodes in parallel. Default: %(default)s"}, "--merge": {"metavar": "", "action": "", "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. Options: %(choices)s. Default: %(default)s"}, "--force-gps": {"action": "", "nargs": "0", "default": "False", "help": "Use images' GPS exif data for reconstruction, even if there are GCPs present.This flag is useful if you have high precision GPS measurements. If there are no GCPs, this flag does nothing. Default: %(default)s"}, "--gps-accuracy": {"type": "", "action": "", "metavar": "", "default": "10", "help": "Set a value in meters for the GPS Dilution of Precision (DOP) information for all images. If your images are tagged with high precision GPS information (RTK), this value will be automatically set accordingly. You can use this option to manually set it in case the reconstruction fails. Lowering this option can sometimes help control bowling-effects over large areas. Default: %(default)s"}, "--optimize-disk-space": {"action": "", "nargs": "0", "default": "False", "help": "Delete heavy intermediate files to optimize disk space usage. This affects the ability to restart the pipeline from an intermediate stage, but allows datasets to be processed on machines that don't have sufficient disk space available. Default: %(default)s"}, "--pc-rectify": {"action": "", "nargs": "0", "default": "False", "help": "Perform ground rectification on the point cloud. This means that wrongly classified ground points will be re-classified and gaps will be filled. Useful for generating DTMs. Default: %(default)s"}, "--primary-band": {"metavar": "", "action": "", "default": "auto", "type": "", "help": "When processing multispectral datasets, you can specify the name of the primary band that will be used for reconstruction. It's recommended to choose a band which has sharp details and is in focus. Default: %(default)s"}, "--skip-band-alignment": {"action": "", "nargs": "0", "default": "False", "help": "When processing multispectral datasets, ODM will automatically align the images for each band. If the images have been postprocessed and are already aligned, use this option. Default: %(default)s"}} \ No newline at end of file +{"-h": {"action": "help", "default": "==SUPPRESS==", "help": "show this help message and exit"}, "--project-path": {"metavar": "", "action": "", "help": "Path to the project folder. Your project folder should contain subfolders for each dataset. Each dataset should have an \"images\" folder."}, "name": {"metavar": "", "action": "", "type": "", "default": "code", "nargs": "?", "help": "Name of dataset (i.e subfolder name within project folder). Default: %(default)s"}, "--end-with": {"metavar": "", "action": "", "default": "odm_postprocess", "choices": "['dataset', 'split', 'merge', 'opensfm', 'openmvs', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto', 'odm_report', 'odm_postprocess']", "help": "End processing at this stage. Can be one of: %(choices)s. Default: %(default)s"}, "--rerun": {"metavar": "", "action": "", "choices": "['dataset', 'split', 'merge', 'opensfm', 'openmvs', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto', 'odm_report', 'odm_postprocess']", "help": "Rerun this stage only and stop. Can be one of: %(choices)s. Default: %(default)s"}, "--rerun-all": {"action": "", "nargs": "0", "default": "False", "help": "Permanently delete all previous results and rerun the processing pipeline."}, "--rerun-from": {"action": "", "metavar": "", "choices": "['dataset', 'split', 'merge', 'opensfm', 'openmvs', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto', 'odm_report', 'odm_postprocess']", "help": "Rerun processing from this stage. Can be one of: %(choices)s. Default: %(default)s"}, "--min-num-features": {"metavar": "", "action": "", "default": "10000", "type": "", "help": "Minimum number of features to extract per image. More features can be useful for finding more matches between images, potentially allowing the reconstruction of areas with little overlap or insufficient features. More features also slow down processing. Default: %(default)s"}, "--feature-type": {"metavar": "", "action": "", "default": "sift", "choices": "['akaze', 'hahog', 'orb', 'sift']", "help": "Choose the algorithm for extracting keypoints and computing descriptors. Can be one of: %(choices)s. Default: %(default)s"}, "--feature-quality": {"metavar": "", "action": "", "default": "high", "choices": "['ultra', 'high', 'medium', 'low', 'lowest']", "help": "Set feature extraction quality. Higher quality generates better features, but requires more memory and takes longer. Can be one of: %(choices)s. Default: %(default)s"}, "--matcher-type": {"metavar": "", "action": "", "default": "flann", "choices": "['bow', 'bruteforce', 'flann']", "help": "Matcher algorithm, Fast Library for Approximate Nearest Neighbors or Bag of Words. FLANN is slower, but more stable. BOW is faster, but can sometimes miss valid matches. BRUTEFORCE is very slow but robust.Can be one of: %(choices)s. Default: %(default)s"}, "--matcher-neighbors": {"metavar": "", "action": "", "default": "0", "type": "", "help": "Perform image matching with the nearest images based on GPS exif data. Set to 0 to match by triangulation. Default: %(default)s"}, "--use-fixed-camera-params": {"action": "", "nargs": "0", "default": "False", "help": "Turn off camera parameter optimization during bundle adjustment. This can be sometimes useful for improving results that exhibit doming/bowling or when images are taken with a rolling shutter camera. Default: %(default)s"}, "--cameras": {"default": "", "metavar": "", "action": "", "type": "", "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"}, "--camera-lens": {"metavar": "", "action": "", "default": "auto", "choices": "['auto', 'perspective', 'brown', 'fisheye', 'spherical', 'equirectangular', 'dual']", "help": "Set a camera projection type. Manually setting a value can help improve geometric undistortion. By default the application tries to determine a lens type from the images metadata. Can be one of: %(choices)s. Default: %(default)s"}, "--radiometric-calibration": {"metavar": "", "action": "", "default": "none", "choices": "['none', 'camera', 'camera+sun']", "help": "Set the radiometric calibration to perform on images. When processing multispectral and thermal images you should set this option to obtain reflectance/temperature values (otherwise you will get digital number values). [camera] applies black level, vignetting, row gradient gain/exposure compensation (if appropriate EXIF tags are found) and computes absolute temperature values. [camera+sun] is experimental, applies all the corrections of [camera], plus compensates for spectral radiance registered via a downwelling light sensor (DLS) taking in consideration the angle of the sun. Can be one of: %(choices)s. Default: %(default)s"}, "--max-concurrency": {"metavar": "", "action": "", "default": "4", "type": "", "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"}, "--use-hybrid-bundle-adjustment": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--sfm-algorithm": {"metavar": "", "action": "", "default": "incremental", "choices": "['incremental', 'triangulation', 'planar']", "help": "Choose the structure from motion algorithm. For aerial datasets, if camera GPS positions and angles are available, triangulation can generate better results. For planar scenes captured at fixed altitude with nadir-only images, planar can be much faster. Can be one of: %(choices)s. Default: %(default)s"}, "--sky-removal": {"action": "", "nargs": "0", "default": "False", "help": "Automatically compute image masks using AI to remove the sky. Experimental. Default: %(default)s"}, "--bg-removal": {"action": "", "nargs": "0", "default": "False", "help": "Automatically compute image masks using AI to remove the background. Experimental. Default: %(default)s"}, "--use-3dmesh": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--skip-3dmodel": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--skip-report": {"action": "", "nargs": "0", "default": "False", "help": "Skip generation of PDF report. This can save time if you don't need a report. Default: %(default)s"}, "--skip-orthophoto": {"action": "", "nargs": "0", "default": "False", "help": "Skip generation of the orthophoto. This can save time if you only need 3D results or DEMs. Default: %(default)s"}, "--ignore-gsd": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--no-gpu": {"action": "", "nargs": "0", "default": "False", "help": "Do not use GPU acceleration, even if it's available. Default: %(default)s"}, "--mesh-size": {"metavar": "", "action": "", "default": "200000", "type": "", "help": "The maximum vertex count of the output mesh. Default: %(default)s"}, "--mesh-octree-depth": {"metavar": "", "action": "", "default": "11", "type": "", "help": "Octree depth used in the mesh reconstruction, increase to get more vertices, recommended values are 8-12. Default: %(default)s"}, "--fast-orthophoto": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--crop": {"metavar": "", "action": "", "default": "3", "type": "", "help": "Automatically crop image outputs by creating a smooth buffer around the dataset boundaries, shrunk by N meters. Use 0 to disable cropping. Default: %(default)s"}, "--boundary": {"default": "", "metavar": "", "action": "", "type": "", "help": "GeoJSON polygon limiting the area of the reconstruction. Can be specified either as path to a GeoJSON file or as a JSON string representing the contents of a GeoJSON file. Default: %(default)s"}, "--auto-boundary": {"action": "", "nargs": "0", "default": "False", "help": "Automatically set a boundary using camera shot locations to limit the area of the reconstruction. This can help remove far away background artifacts (sky, background landscapes, etc.). See also --boundary. Default: %(default)s"}, "--auto-boundary-distance": {"metavar": "", "action": "", "type": "", "default": "0", "help": "Specify the distance between camera shot locations and the outer edge of the boundary when computing the boundary with --auto-boundary. Set to 0 to automatically choose a value. Default: %(default)s"}, "--pc-quality": {"metavar": "", "action": "", "default": "medium", "choices": "['ultra', 'high', 'medium', 'low', 'lowest']", "help": "Set point cloud quality. Higher quality generates better, denser point clouds, but requires more memory and takes longer. Each step up in quality increases processing time roughly by a factor of 4x.Can be one of: %(choices)s. Default: %(default)s"}, "--pc-classify": {"action": "", "nargs": "0", "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"}, "--pc-csv": {"action": "", "nargs": "0", "default": "False", "help": "Export the georeferenced point cloud in CSV format. Default: %(default)s"}, "--pc-las": {"action": "", "nargs": "0", "default": "False", "help": "Export the georeferenced point cloud in LAS format. Default: %(default)s"}, "--pc-ept": {"action": "", "nargs": "0", "default": "False", "help": "Export the georeferenced point cloud in Entwine Point Tile (EPT) format. Default: %(default)s"}, "--pc-copc": {"action": "", "nargs": "0", "default": "False", "help": "Save the georeferenced point cloud in Cloud Optimized Point Cloud (COPC) format. Default: %(default)s"}, "--pc-filter": {"metavar": "", "action": "", "type": "", "default": "2.5", "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. Default: %(default)s"}, "--pc-sample": {"metavar": "", "action": "", "type": "", "default": "0", "help": "Filters the point cloud by keeping only a single point around a radius N (in meters). This can be useful to limit the output resolution of the point cloud and remove duplicate points. Set to 0 to disable sampling. Default: %(default)s"}, "--pc-skip-geometric": {"action": "", "nargs": "0", "default": "False", "help": "Geometric estimates improve the accuracy of the point cloud by computing geometrically consistent depthmaps but may not be usable in larger datasets. This flag disables geometric estimates. Default: %(default)s"}, "--pc-tile": {"action": "", "nargs": "0", "default": "False", "help": "Reduce the memory usage needed for depthmap fusion by splitting large scenes into tiles. Turn this on if your machine doesn't have much RAM and/or you've set --pc-quality to high or ultra. Experimental. Default: %(default)s"}, "--smrf-scalar": {"metavar": "", "action": "", "type": "", "default": "1.25", "help": "Simple Morphological Filter elevation scalar parameter. Default: %(default)s"}, "--smrf-slope": {"metavar": "", "action": "", "type": "", "default": "0.15", "help": "Simple Morphological Filter slope parameter (rise over run). Default: %(default)s"}, "--smrf-threshold": {"metavar": "", "action": "", "type": "", "default": "0.5", "help": "Simple Morphological Filter elevation threshold parameter (meters). Default: %(default)s"}, "--smrf-window": {"metavar": "", "action": "", "type": "", "default": "18.0", "help": "Simple Morphological Filter window radius parameter (meters). Default: %(default)s"}, "--texturing-skip-global-seam-leveling": {"action": "", "nargs": "0", "default": "False", "help": "Skip normalization of colors across all images. Useful when processing radiometric data. Default: %(default)s"}, "--texturing-skip-local-seam-leveling": {"action": "", "nargs": "0", "default": "False", "help": "Skip the blending of colors near seams. Default: %(default)s"}, "--texturing-keep-unseen-faces": {"action": "", "nargs": "0", "default": "False", "help": "Keep faces in the mesh that are not seen in any camera. Default: %(default)s"}, "--texturing-single-material": {"action": "", "nargs": "0", "default": "False", "help": "Generate OBJs that have a single material and a single texture file instead of multiple ones. Default: %(default)s"}, "--gcp": {"metavar": "", "action": "", "default": "None", "help": "Path to the file containing the ground control points used for georeferencing. The file needs to use the following format: \nEPSG: or <+proj definition>\ngeo_x geo_y geo_z im_x im_y image_name [gcp_name] [extra1] [extra2]\nDefault: %(default)s"}, "--geo": {"metavar": "", "action": "", "default": "None", "help": "Path to the image geolocation file containing the camera center coordinates used for georeferencing. If you dont have values for omega/phi/kappa you can set them to 0. The file needs to use the following format: \nEPSG: or <+proj definition>\nimage_name geo_x geo_y geo_z [omega (degrees)] [phi (degrees)] [kappa (degrees)] [horz accuracy (meters)] [vert accuracy (meters)]\nDefault: %(default)s"}, "--align": {"metavar": "", "action": "", "default": "None", "help": "Path to a GeoTIFF DEM or a LAS/LAZ point cloud that the reconstruction outputs should be automatically aligned to. Experimental. Default: %(default)s"}, "--use-exif": {"action": "", "nargs": "0", "default": "False", "help": "Use this tag if you have a GCP File but want to use the EXIF information for georeferencing instead. Default: %(default)s"}, "--dtm": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--dsm": {"action": "", "nargs": "0", "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. Default: %(default)s"}, "--dem-gapfill-steps": {"metavar": "", "action": "", "default": "3", "type": "", "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. Default: %(default)s"}, "--dem-resolution": {"metavar": "", "action": "", "type": "", "default": "5", "help": "DSM/DTM resolution in cm / pixel. Note that this value is capped to 2x the ground sampling distance (GSD) estimate. To remove the cap, check --ignore-gsd also. Default: %(default)s"}, "--dem-decimation": {"metavar": "", "action": "", "default": "1", "type": "", "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 of DEM results in very large datasets. Default: %(default)s"}, "--dem-euclidean-map": {"action": "", "nargs": "0", "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"}, "--orthophoto-resolution": {"metavar": " 0.0>", "action": "", "default": "5", "type": "", "help": "Orthophoto resolution in cm / pixel. Note that this value is capped by a ground sampling distance (GSD) estimate. To remove the cap, check --ignore-gsd also. Default: %(default)s"}, "--orthophoto-no-tiled": {"action": "", "nargs": "0", "default": "False", "help": "Set this parameter if you want a striped GeoTIFF. Default: %(default)s"}, "--orthophoto-png": {"action": "", "nargs": "0", "default": "False", "help": "Set this parameter if you want to generate a PNG rendering of the orthophoto. Default: %(default)s"}, "--orthophoto-kmz": {"action": "", "nargs": "0", "default": "False", "help": "Set this parameter if you want to generate a Google Earth (KMZ) rendering of the orthophoto. Default: %(default)s"}, "--orthophoto-compression": {"metavar": "", "action": "", "type": "", "choices": "['JPEG', 'LZW', 'PACKBITS', 'DEFLATE', 'LZMA', 'NONE']", "default": "DEFLATE", "help": "Set the compression to use for orthophotos. Can be one of: %(choices)s. Default: %(default)s"}, "--orthophoto-cutline": {"action": "", "nargs": "0", "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"}, "--tiles": {"action": "", "nargs": "0", "default": "False", "help": "Generate static tiles for orthophotos and DEMs that are suitable for viewers like Leaflet or OpenLayers. Default: %(default)s"}, "--3d-tiles": {"action": "", "nargs": "0", "default": "False", "help": "Generate OGC 3D Tiles outputs. Default: %(default)s"}, "--rolling-shutter": {"action": "", "nargs": "0", "default": "False", "help": "Turn on rolling shutter correction. If the camera has a rolling shutter and the images were taken in motion, you can turn on this option to improve the accuracy of the results. See also --rolling-shutter-readout. Default: %(default)s"}, "--rolling-shutter-readout": {"type": "", "action": "", "metavar": "", "default": "0", "help": "Override the rolling shutter readout time for your camera sensor (in milliseconds), instead of using the rolling shutter readout database. Note that not all cameras are present in the database. Set to 0 to use the database value. Default: %(default)s"}, "--build-overviews": {"action": "", "nargs": "0", "default": "False", "help": "Build orthophoto overviews for faster display in programs such as QGIS. Default: %(default)s"}, "--cog": {"action": "", "nargs": "0", "default": "False", "help": "Create Cloud-Optimized GeoTIFFs instead of normal GeoTIFFs. Default: %(default)s"}, "--copy-to": {"metavar": "", "action": "", "help": "Copy output results to this folder after processing."}, "--version": {"action": "version", "version": "ODM 3.0.3", "help": "Displays version number and exits. "}, "--split": {"type": "", "action": "", "default": "999999", "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. Default: %(default)s"}, "--split-overlap": {"type": "", "action": "", "metavar": "", "default": "150", "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. Default: %(default)s"}, "--split-image-groups": {"metavar": "", "action": "", "default": "None", "help": "Path to the image groups file that controls how images should be split into groups. The file needs to use the following format: \nimage_name group_name\nDefault: %(default)s"}, "--sm-no-align": {"action": "", "nargs": "0", "default": "False", "help": "Skip alignment of submodels in split-merge. Useful if GPS is good enough on very large datasets. Default: %(default)s"}, "--sm-cluster": {"metavar": "", "action": "", "type": "", "default": "None", "help": "URL to a ClusterODM instance for distributing a split-merge workflow on multiple nodes in parallel. Default: %(default)s"}, "--merge": {"metavar": "", "action": "", "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. Options: %(choices)s. Default: %(default)s"}, "--force-gps": {"action": "", "nargs": "0", "default": "False", "help": "Use images' GPS exif data for reconstruction, even if there are GCPs present.This flag is useful if you have high precision GPS measurements. If there are no GCPs, this flag does nothing. Default: %(default)s"}, "--gps-accuracy": {"type": "", "action": "", "metavar": "", "default": "10", "help": "Set a value in meters for the GPS Dilution of Precision (DOP) information for all images. If your images are tagged with high precision GPS information (RTK), this value will be automatically set accordingly. You can use this option to manually set it in case the reconstruction fails. Lowering this option can sometimes help control bowling-effects over large areas. Default: %(default)s"}, "--optimize-disk-space": {"action": "", "nargs": "0", "default": "False", "help": "Delete heavy intermediate files to optimize disk space usage. This affects the ability to restart the pipeline from an intermediate stage, but allows datasets to be processed on machines that don't have sufficient disk space available. Default: %(default)s"}, "--pc-rectify": {"action": "", "nargs": "0", "default": "False", "help": "Perform ground rectification on the point cloud. This means that wrongly classified ground points will be re-classified and gaps will be filled. Useful for generating DTMs. Default: %(default)s"}, "--primary-band": {"metavar": "", "action": "", "default": "auto", "type": "", "help": "When processing multispectral datasets, you can specify the name of the primary band that will be used for reconstruction. It's recommended to choose a band which has sharp details and is in focus. Default: %(default)s"}, "--skip-band-alignment": {"action": "", "nargs": "0", "default": "False", "help": "When processing multispectral datasets, ODM will automatically align the images for each band. If the images have been postprocessed and are already aligned, use this option. Default: %(default)s"}} \ No newline at end of file