cars 1.0.0rc1__cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cars might be problematic. Click here for more details.
- cars/__init__.py +74 -0
- cars/applications/__init__.py +37 -0
- cars/applications/application.py +117 -0
- cars/applications/application_constants.py +29 -0
- cars/applications/application_template.py +146 -0
- cars/applications/auxiliary_filling/__init__.py +29 -0
- cars/applications/auxiliary_filling/abstract_auxiliary_filling_app.py +104 -0
- cars/applications/auxiliary_filling/auxiliary_filling_algo.py +475 -0
- cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +630 -0
- cars/applications/auxiliary_filling/auxiliary_filling_wrappers.py +90 -0
- cars/applications/dem_generation/__init__.py +30 -0
- cars/applications/dem_generation/abstract_dem_generation_app.py +116 -0
- cars/applications/dem_generation/bulldozer_config/base_config.yaml +42 -0
- cars/applications/dem_generation/bulldozer_dem_app.py +655 -0
- cars/applications/dem_generation/bulldozer_memory.py +55 -0
- cars/applications/dem_generation/dem_generation_algo.py +107 -0
- cars/applications/dem_generation/dem_generation_constants.py +32 -0
- cars/applications/dem_generation/dem_generation_wrappers.py +323 -0
- cars/applications/dense_match_filling/__init__.py +30 -0
- cars/applications/dense_match_filling/abstract_dense_match_filling_app.py +242 -0
- cars/applications/dense_match_filling/fill_disp_algo.py +113 -0
- cars/applications/dense_match_filling/fill_disp_constants.py +39 -0
- cars/applications/dense_match_filling/fill_disp_wrappers.py +83 -0
- cars/applications/dense_match_filling/zero_padding_app.py +302 -0
- cars/applications/dense_matching/__init__.py +30 -0
- cars/applications/dense_matching/abstract_dense_matching_app.py +261 -0
- cars/applications/dense_matching/census_mccnn_sgm_app.py +1460 -0
- cars/applications/dense_matching/cpp/__init__.py +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.cpython-312-i386-linux-gnu.so +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.py +94 -0
- cars/applications/dense_matching/cpp/includes/dense_matching.hpp +58 -0
- cars/applications/dense_matching/cpp/meson.build +9 -0
- cars/applications/dense_matching/cpp/src/bindings.cpp +13 -0
- cars/applications/dense_matching/cpp/src/dense_matching.cpp +207 -0
- cars/applications/dense_matching/dense_matching_algo.py +401 -0
- cars/applications/dense_matching/dense_matching_constants.py +89 -0
- cars/applications/dense_matching/dense_matching_wrappers.py +951 -0
- cars/applications/dense_matching/disparity_grid_algo.py +588 -0
- cars/applications/dense_matching/loaders/__init__.py +23 -0
- cars/applications/dense_matching/loaders/config_census_sgm_default.json +31 -0
- cars/applications/dense_matching/loaders/config_census_sgm_homogeneous.json +30 -0
- cars/applications/dense_matching/loaders/config_census_sgm_mountain_and_vegetation.json +30 -0
- cars/applications/dense_matching/loaders/config_census_sgm_shadow.json +30 -0
- cars/applications/dense_matching/loaders/config_census_sgm_sparse.json +36 -0
- cars/applications/dense_matching/loaders/config_census_sgm_urban.json +30 -0
- cars/applications/dense_matching/loaders/config_mapping.json +13 -0
- cars/applications/dense_matching/loaders/config_mccnn.json +28 -0
- cars/applications/dense_matching/loaders/global_land_cover_map.tif +0 -0
- cars/applications/dense_matching/loaders/pandora_loader.py +593 -0
- cars/applications/dsm_filling/__init__.py +32 -0
- cars/applications/dsm_filling/abstract_dsm_filling_app.py +101 -0
- cars/applications/dsm_filling/border_interpolation_app.py +270 -0
- cars/applications/dsm_filling/bulldozer_config/base_config.yaml +44 -0
- cars/applications/dsm_filling/bulldozer_filling_app.py +279 -0
- cars/applications/dsm_filling/exogenous_filling_app.py +333 -0
- cars/applications/grid_generation/__init__.py +30 -0
- cars/applications/grid_generation/abstract_grid_generation_app.py +142 -0
- cars/applications/grid_generation/epipolar_grid_generation_app.py +327 -0
- cars/applications/grid_generation/grid_correction_app.py +496 -0
- cars/applications/grid_generation/grid_generation_algo.py +388 -0
- cars/applications/grid_generation/grid_generation_constants.py +46 -0
- cars/applications/grid_generation/transform_grid.py +88 -0
- cars/applications/ground_truth_reprojection/__init__.py +30 -0
- cars/applications/ground_truth_reprojection/abstract_ground_truth_reprojection_app.py +137 -0
- cars/applications/ground_truth_reprojection/direct_localization_app.py +629 -0
- cars/applications/ground_truth_reprojection/ground_truth_reprojection_algo.py +275 -0
- cars/applications/point_cloud_outlier_removal/__init__.py +30 -0
- cars/applications/point_cloud_outlier_removal/abstract_outlier_removal_app.py +385 -0
- cars/applications/point_cloud_outlier_removal/outlier_removal_algo.py +392 -0
- cars/applications/point_cloud_outlier_removal/outlier_removal_constants.py +43 -0
- cars/applications/point_cloud_outlier_removal/small_components_app.py +527 -0
- cars/applications/point_cloud_outlier_removal/statistical_app.py +531 -0
- cars/applications/rasterization/__init__.py +30 -0
- cars/applications/rasterization/abstract_pc_rasterization_app.py +183 -0
- cars/applications/rasterization/rasterization_algo.py +534 -0
- cars/applications/rasterization/rasterization_constants.py +38 -0
- cars/applications/rasterization/rasterization_wrappers.py +634 -0
- cars/applications/rasterization/simple_gaussian_app.py +1152 -0
- cars/applications/resampling/__init__.py +28 -0
- cars/applications/resampling/abstract_resampling_app.py +187 -0
- cars/applications/resampling/bicubic_resampling_app.py +762 -0
- cars/applications/resampling/resampling_algo.py +614 -0
- cars/applications/resampling/resampling_constants.py +36 -0
- cars/applications/resampling/resampling_wrappers.py +309 -0
- cars/applications/sparse_matching/__init__.py +30 -0
- cars/applications/sparse_matching/abstract_sparse_matching_app.py +498 -0
- cars/applications/sparse_matching/sift_app.py +735 -0
- cars/applications/sparse_matching/sparse_matching_algo.py +360 -0
- cars/applications/sparse_matching/sparse_matching_constants.py +68 -0
- cars/applications/sparse_matching/sparse_matching_wrappers.py +238 -0
- cars/applications/triangulation/__init__.py +32 -0
- cars/applications/triangulation/abstract_triangulation_app.py +227 -0
- cars/applications/triangulation/line_of_sight_intersection_app.py +1243 -0
- cars/applications/triangulation/pc_transform.py +552 -0
- cars/applications/triangulation/triangulation_algo.py +371 -0
- cars/applications/triangulation/triangulation_constants.py +38 -0
- cars/applications/triangulation/triangulation_wrappers.py +259 -0
- cars/bundleadjustment.py +757 -0
- cars/cars.py +177 -0
- cars/conf/__init__.py +23 -0
- cars/conf/geoid/egm96.grd +0 -0
- cars/conf/geoid/egm96.grd.hdr +15 -0
- cars/conf/input_parameters.py +156 -0
- cars/conf/mask_cst.py +35 -0
- cars/core/__init__.py +23 -0
- cars/core/cars_logging.py +402 -0
- cars/core/constants.py +191 -0
- cars/core/constants_disparity.py +50 -0
- cars/core/datasets.py +140 -0
- cars/core/geometry/__init__.py +27 -0
- cars/core/geometry/abstract_geometry.py +1119 -0
- cars/core/geometry/shareloc_geometry.py +598 -0
- cars/core/inputs.py +568 -0
- cars/core/outputs.py +176 -0
- cars/core/preprocessing.py +722 -0
- cars/core/projection.py +843 -0
- cars/core/roi_tools.py +215 -0
- cars/core/tiling.py +774 -0
- cars/core/utils.py +164 -0
- cars/data_structures/__init__.py +23 -0
- cars/data_structures/cars_dataset.py +1541 -0
- cars/data_structures/cars_dict.py +74 -0
- cars/data_structures/corresponding_tiles_tools.py +186 -0
- cars/data_structures/dataframe_converter.py +185 -0
- cars/data_structures/format_transformation.py +297 -0
- cars/devibrate.py +689 -0
- cars/extractroi.py +264 -0
- cars/orchestrator/__init__.py +23 -0
- cars/orchestrator/achievement_tracker.py +125 -0
- cars/orchestrator/cluster/__init__.py +37 -0
- cars/orchestrator/cluster/abstract_cluster.py +244 -0
- cars/orchestrator/cluster/abstract_dask_cluster.py +375 -0
- cars/orchestrator/cluster/dask_cluster_tools.py +103 -0
- cars/orchestrator/cluster/dask_config/README.md +94 -0
- cars/orchestrator/cluster/dask_config/dask.yaml +21 -0
- cars/orchestrator/cluster/dask_config/distributed.yaml +70 -0
- cars/orchestrator/cluster/dask_config/jobqueue.yaml +26 -0
- cars/orchestrator/cluster/dask_config/reference_confs/dask-schema.yaml +137 -0
- cars/orchestrator/cluster/dask_config/reference_confs/dask.yaml +26 -0
- cars/orchestrator/cluster/dask_config/reference_confs/distributed-schema.yaml +1009 -0
- cars/orchestrator/cluster/dask_config/reference_confs/distributed.yaml +273 -0
- cars/orchestrator/cluster/dask_config/reference_confs/jobqueue.yaml +212 -0
- cars/orchestrator/cluster/dask_jobqueue_utils.py +204 -0
- cars/orchestrator/cluster/local_dask_cluster.py +116 -0
- cars/orchestrator/cluster/log_wrapper.py +1075 -0
- cars/orchestrator/cluster/mp_cluster/__init__.py +27 -0
- cars/orchestrator/cluster/mp_cluster/mp_factorizer.py +212 -0
- cars/orchestrator/cluster/mp_cluster/mp_objects.py +535 -0
- cars/orchestrator/cluster/mp_cluster/mp_tools.py +93 -0
- cars/orchestrator/cluster/mp_cluster/mp_wrapper.py +505 -0
- cars/orchestrator/cluster/mp_cluster/multiprocessing_cluster.py +873 -0
- cars/orchestrator/cluster/mp_cluster/multiprocessing_profiler.py +399 -0
- cars/orchestrator/cluster/pbs_dask_cluster.py +207 -0
- cars/orchestrator/cluster/sequential_cluster.py +139 -0
- cars/orchestrator/cluster/slurm_dask_cluster.py +234 -0
- cars/orchestrator/orchestrator.py +905 -0
- cars/orchestrator/orchestrator_constants.py +29 -0
- cars/orchestrator/registry/__init__.py +23 -0
- cars/orchestrator/registry/abstract_registry.py +143 -0
- cars/orchestrator/registry/compute_registry.py +106 -0
- cars/orchestrator/registry/id_generator.py +116 -0
- cars/orchestrator/registry/replacer_registry.py +213 -0
- cars/orchestrator/registry/saver_registry.py +363 -0
- cars/orchestrator/registry/unseen_registry.py +118 -0
- cars/orchestrator/tiles_profiler.py +279 -0
- cars/pipelines/__init__.py +26 -0
- cars/pipelines/conf_resolution/conf_final_resolution.yaml +5 -0
- cars/pipelines/conf_resolution/conf_first_resolution.yaml +2 -0
- cars/pipelines/conf_resolution/conf_intermediate_resolution.yaml +2 -0
- cars/pipelines/default/__init__.py +26 -0
- cars/pipelines/default/default_pipeline.py +786 -0
- cars/pipelines/parameters/__init__.py +0 -0
- cars/pipelines/parameters/advanced_parameters.py +417 -0
- cars/pipelines/parameters/advanced_parameters_constants.py +69 -0
- cars/pipelines/parameters/application_parameters.py +71 -0
- cars/pipelines/parameters/depth_map_inputs.py +0 -0
- cars/pipelines/parameters/dsm_inputs.py +918 -0
- cars/pipelines/parameters/dsm_inputs_constants.py +25 -0
- cars/pipelines/parameters/output_constants.py +52 -0
- cars/pipelines/parameters/output_parameters.py +454 -0
- cars/pipelines/parameters/sensor_inputs.py +842 -0
- cars/pipelines/parameters/sensor_inputs_constants.py +49 -0
- cars/pipelines/parameters/sensor_loaders/__init__.py +29 -0
- cars/pipelines/parameters/sensor_loaders/basic_classif_loader.py +86 -0
- cars/pipelines/parameters/sensor_loaders/basic_image_loader.py +98 -0
- cars/pipelines/parameters/sensor_loaders/pivot_classif_loader.py +90 -0
- cars/pipelines/parameters/sensor_loaders/pivot_image_loader.py +105 -0
- cars/pipelines/parameters/sensor_loaders/sensor_loader.py +93 -0
- cars/pipelines/parameters/sensor_loaders/sensor_loader_template.py +71 -0
- cars/pipelines/parameters/sensor_loaders/slurp_classif_loader.py +86 -0
- cars/pipelines/pipeline.py +119 -0
- cars/pipelines/pipeline_constants.py +31 -0
- cars/pipelines/pipeline_template.py +139 -0
- cars/pipelines/unit/__init__.py +26 -0
- cars/pipelines/unit/unit_pipeline.py +2850 -0
- cars/starter.py +167 -0
- cars-1.0.0rc1.dist-info/METADATA +292 -0
- cars-1.0.0rc1.dist-info/RECORD +200 -0
- cars-1.0.0rc1.dist-info/WHEEL +6 -0
- cars-1.0.0rc1.dist-info/entry_points.txt +8 -0
cars/cars.py
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
|
|
5
|
+
#
|
|
6
|
+
# This file is part of CARS
|
|
7
|
+
# (see https://github.com/CNES/cars).
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
"""
|
|
22
|
+
Main CARS Command Line Interface
|
|
23
|
+
user main argparse wrapper to CARS 3D pipelines submodules
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
# Standard imports
|
|
27
|
+
# TODO refactor but keep local functions for performance and remove pylint
|
|
28
|
+
# pylint: disable=import-outside-toplevel
|
|
29
|
+
import argparse
|
|
30
|
+
import json
|
|
31
|
+
import logging
|
|
32
|
+
import os
|
|
33
|
+
import sys
|
|
34
|
+
import warnings
|
|
35
|
+
|
|
36
|
+
import yaml
|
|
37
|
+
|
|
38
|
+
# CARS imports
|
|
39
|
+
from cars import __version__
|
|
40
|
+
from cars.core import cars_logging
|
|
41
|
+
from cars.orchestrator.cluster import log_wrapper
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def cars_parser() -> argparse.ArgumentParser:
|
|
45
|
+
"""
|
|
46
|
+
Main CLI argparse parser function
|
|
47
|
+
It builds argparse objects and constructs CLI interfaces parameters.
|
|
48
|
+
|
|
49
|
+
:return: CARS arparse CLI interface object
|
|
50
|
+
"""
|
|
51
|
+
# Create cars cli parser from argparse
|
|
52
|
+
# use @file to use a file containing parameters
|
|
53
|
+
parser = argparse.ArgumentParser(
|
|
54
|
+
"cars", description="CARS: CNES Algorithms to Reconstruct Surface"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
parser.add_argument("conf", type=str, help="Inputs Configuration File")
|
|
58
|
+
|
|
59
|
+
parser.add_argument(
|
|
60
|
+
"--loglevel",
|
|
61
|
+
default="PROGRESS",
|
|
62
|
+
choices=("DEBUG", "INFO", "PROGRESS", "WARNING", "ERROR", "CRITICAL"),
|
|
63
|
+
help="Logger level (default: WARNING. Should be one of "
|
|
64
|
+
"(DEBUG, INFO, PROGRESS, WARNING, ERROR, CRITICAL)",
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# General arguments at first level
|
|
68
|
+
parser.add_argument(
|
|
69
|
+
"--version",
|
|
70
|
+
"-v",
|
|
71
|
+
action="version",
|
|
72
|
+
version="%(prog)s {version}".format(version=__version__),
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
return parser
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def main_cli(args, dry_run=False): # noqa: C901
|
|
79
|
+
"""
|
|
80
|
+
Main for command line management
|
|
81
|
+
|
|
82
|
+
:param dry_run: activate only arguments checking
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
# TODO : refactor in order to avoid a slow argparse
|
|
86
|
+
# Don't move the local function imports for now
|
|
87
|
+
|
|
88
|
+
# Main try/except to catch all program exceptions
|
|
89
|
+
from cars.pipelines.pipeline import Pipeline
|
|
90
|
+
|
|
91
|
+
try:
|
|
92
|
+
# Check file extension and load configuration
|
|
93
|
+
config_path = args.conf
|
|
94
|
+
ext = os.path.splitext(config_path)[1].lower()
|
|
95
|
+
if ext == ".json":
|
|
96
|
+
with open(config_path, "r", encoding="utf8") as fstream:
|
|
97
|
+
config = json.load(fstream)
|
|
98
|
+
elif ext in [".yaml", ".yml"]:
|
|
99
|
+
with open(config_path, "r", encoding="utf8") as fstream:
|
|
100
|
+
config = yaml.safe_load(fstream)
|
|
101
|
+
else:
|
|
102
|
+
raise ValueError("Configuration file must be .json or .yaml/.yml")
|
|
103
|
+
|
|
104
|
+
# Cars 0.9.0 API change, check if the configfile seems to use the old
|
|
105
|
+
# API by looking for the deprecated out_dir key
|
|
106
|
+
# TODO this check can be removed after cars 0.10.0
|
|
107
|
+
if config.get("output", {}).get("out_dir"):
|
|
108
|
+
|
|
109
|
+
# throw an exception if both out_dir and directory are defined
|
|
110
|
+
if "directory" in config["output"]:
|
|
111
|
+
raise RuntimeError("both directory and out_dir keys defined")
|
|
112
|
+
# stacklevel -> main_cli()
|
|
113
|
+
warnings.warn(
|
|
114
|
+
"Deprecated key 'out_dir' found in output configuration. "
|
|
115
|
+
"Replacing it with key 'directory'",
|
|
116
|
+
FutureWarning,
|
|
117
|
+
stacklevel=2,
|
|
118
|
+
)
|
|
119
|
+
config["output"]["directory"] = config["output"]["out_dir"]
|
|
120
|
+
del config["output"]["out_dir"]
|
|
121
|
+
|
|
122
|
+
config_dir = os.path.abspath(os.path.dirname(config_path))
|
|
123
|
+
pipeline_name = config.get("advanced", {}).get("pipeline", "default")
|
|
124
|
+
|
|
125
|
+
# Logging configuration with args Loglevel
|
|
126
|
+
loglevel = getattr(args, "loglevel", "PROGRESS").upper()
|
|
127
|
+
out_dir = config["output"]["directory"]
|
|
128
|
+
|
|
129
|
+
# do not set logging if pipeline is default (already defined
|
|
130
|
+
if config.get("advanced", {}).get("pipeline", "default") != "default":
|
|
131
|
+
cars_logging.setup_logging(
|
|
132
|
+
loglevel,
|
|
133
|
+
out_dir=os.path.join(out_dir, "logs"),
|
|
134
|
+
pipeline=pipeline_name,
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
logging.debug("Show argparse arguments: {}".format(args))
|
|
138
|
+
|
|
139
|
+
# Generate pipeline and check conf
|
|
140
|
+
cars_logging.add_progress_message("Check configuration...")
|
|
141
|
+
used_pipeline = Pipeline(pipeline_name, config, config_dir)
|
|
142
|
+
cars_logging.add_progress_message("CARS pipeline is started.")
|
|
143
|
+
if not dry_run:
|
|
144
|
+
# run pipeline
|
|
145
|
+
used_pipeline.run(args)
|
|
146
|
+
|
|
147
|
+
# Generate summary of tasks
|
|
148
|
+
if config.get("advanced", {}).get("pipeline", "default") != "default":
|
|
149
|
+
log_wrapper.generate_summary(
|
|
150
|
+
os.path.join(out_dir, "logs"),
|
|
151
|
+
used_pipeline.used_conf,
|
|
152
|
+
clean_worker_logs=True,
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
cars_logging.add_progress_message(
|
|
156
|
+
"CARS has successfully completed the pipeline."
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
except BaseException:
|
|
160
|
+
# Catch all exceptions, show debug traceback and exit
|
|
161
|
+
logging.exception("CARS terminated with following error")
|
|
162
|
+
sys.exit(1)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def main():
|
|
166
|
+
"""
|
|
167
|
+
Main initial cars cli entry point
|
|
168
|
+
Configure and launch parser before main_cli function
|
|
169
|
+
"""
|
|
170
|
+
# CARS parser
|
|
171
|
+
parser = cars_parser()
|
|
172
|
+
args = parser.parse_args(args=None if sys.argv[1:] else ["--help"])
|
|
173
|
+
main_cli(args)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
if __name__ == "__main__":
|
|
177
|
+
main()
|
cars/conf/__init__.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
|
|
5
|
+
#
|
|
6
|
+
# This file is part of CARS
|
|
7
|
+
# (see https://github.com/CNES/cars).
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
"""
|
|
22
|
+
CARS conf module init file
|
|
23
|
+
"""
|
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ENVI
|
|
2
|
+
samples = 1441
|
|
3
|
+
lines = 721
|
|
4
|
+
bands = 1
|
|
5
|
+
header offset = 24
|
|
6
|
+
file type = ENVI Standard
|
|
7
|
+
data type = 4
|
|
8
|
+
interleave = bsq
|
|
9
|
+
sensor type = Unknown
|
|
10
|
+
byte order = 1
|
|
11
|
+
wavelength units = Unknown
|
|
12
|
+
map info = {Geographic Lat/Lon, 1, 1,-0.125, 90.125, 0.25, 0.25,WGS-84}
|
|
13
|
+
coordinate system string = {GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]}
|
|
14
|
+
band names = {
|
|
15
|
+
Band 1}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
|
|
5
|
+
#
|
|
6
|
+
# This file is part of CARS
|
|
7
|
+
# (see https://github.com/CNES/cars).
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
"""
|
|
22
|
+
This input module refers to parameters and configuration inputs
|
|
23
|
+
"""
|
|
24
|
+
# Standard imports
|
|
25
|
+
import json
|
|
26
|
+
import logging
|
|
27
|
+
import os
|
|
28
|
+
from typing import Any, Dict
|
|
29
|
+
|
|
30
|
+
# Third party imports
|
|
31
|
+
from json_checker import And, OptionalKey, Or
|
|
32
|
+
|
|
33
|
+
# CARS imports
|
|
34
|
+
from cars.core.inputs import rasterio_can_open
|
|
35
|
+
from cars.core.utils import make_relative_path_absolute
|
|
36
|
+
|
|
37
|
+
# tag for static conf file
|
|
38
|
+
STATIC_PARAMS_TAG = "static_parameters"
|
|
39
|
+
|
|
40
|
+
# Type for input configuration json
|
|
41
|
+
ConfigType = Dict[str, Any]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def read_input_parameters(filename: ConfigType) -> ConfigType:
|
|
45
|
+
"""
|
|
46
|
+
Read an input parameters json file.
|
|
47
|
+
Relative paths will be made absolute.
|
|
48
|
+
|
|
49
|
+
:param filename: Path to json file
|
|
50
|
+
:type filename: ConfigType
|
|
51
|
+
|
|
52
|
+
:return: The dictionary read from file
|
|
53
|
+
:rtype: ConfigType
|
|
54
|
+
"""
|
|
55
|
+
config = {}
|
|
56
|
+
with open(filename, "r", encoding="utf-8") as fstream:
|
|
57
|
+
# Load json file
|
|
58
|
+
config = json.load(fstream)
|
|
59
|
+
json_dir = os.path.abspath(os.path.dirname(filename))
|
|
60
|
+
# make potential relative paths absolute
|
|
61
|
+
for tag in [
|
|
62
|
+
IMG1_TAG,
|
|
63
|
+
IMG2_TAG,
|
|
64
|
+
MODEL1_TAG,
|
|
65
|
+
MODEL2_TAG,
|
|
66
|
+
MASK1_TAG,
|
|
67
|
+
MASK2_TAG,
|
|
68
|
+
COLOR1_TAG,
|
|
69
|
+
SRTM_DIR_TAG,
|
|
70
|
+
]:
|
|
71
|
+
if tag in config:
|
|
72
|
+
config[tag] = make_relative_path_absolute(config[tag], json_dir)
|
|
73
|
+
return config
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def create_img_tag_from_product_key(product_key: str):
|
|
77
|
+
"""
|
|
78
|
+
Create images tags from IMG_TAG_ROOT and the given product key
|
|
79
|
+
:param product_key: PRODUCT1_KEY or PRODUCT2_KEY
|
|
80
|
+
:return: IMG1_TAG or IMG2_TAG
|
|
81
|
+
"""
|
|
82
|
+
if product_key not in [PRODUCT1_KEY, PRODUCT2_KEY]:
|
|
83
|
+
logging.warning(
|
|
84
|
+
"product_key shall be {} or {}".format(PRODUCT1_KEY, PRODUCT2_KEY)
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
return "{}{}".format(IMG_TAG_ROOT, product_key)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def create_model_tag_from_product_key(product_key: str):
|
|
91
|
+
"""
|
|
92
|
+
Create images tags from MODEL_TAG_ROOT and the given product key
|
|
93
|
+
:param product_key: PRODUCT1_KEY or PRODUCT2_KEY
|
|
94
|
+
:return: MODEL1_TAG or MODEL2_TAG
|
|
95
|
+
"""
|
|
96
|
+
if product_key not in [PRODUCT1_KEY, PRODUCT2_KEY]:
|
|
97
|
+
logging.warning(
|
|
98
|
+
"product_key shall be {} or {}".format(PRODUCT1_KEY, PRODUCT2_KEY)
|
|
99
|
+
)
|
|
100
|
+
return "{}{}".format(MODEL_TAG_ROOT, product_key)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def create_model_type_tag_from_product_key(product_key: str):
|
|
104
|
+
"""
|
|
105
|
+
Create images tags from MODEL_TAG_ROOT and the given product key
|
|
106
|
+
:param product_key: PRODUCT1_KEY or PRODUCT2_KEY
|
|
107
|
+
:return: MODEL1_TAG or MODEL2_TAG
|
|
108
|
+
"""
|
|
109
|
+
if product_key not in [PRODUCT1_KEY, PRODUCT2_KEY]:
|
|
110
|
+
logger = logging.getLogger()
|
|
111
|
+
logger.warning(
|
|
112
|
+
"product_key shall be {} or {}".format(PRODUCT1_KEY, PRODUCT2_KEY)
|
|
113
|
+
)
|
|
114
|
+
return "{}{}".format(MODEL_TYPE_TAG_ROOT, product_key)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
# tags for input parameters
|
|
118
|
+
INPUT_SECTION_TAG = "input"
|
|
119
|
+
PRODUCT1_KEY = "1"
|
|
120
|
+
PRODUCT2_KEY = "2"
|
|
121
|
+
IMG_TAG_ROOT = "img"
|
|
122
|
+
MODEL_TAG_ROOT = "model"
|
|
123
|
+
MODEL_TYPE_TAG_ROOT = "model_type"
|
|
124
|
+
IMG1_TAG = create_img_tag_from_product_key(PRODUCT1_KEY)
|
|
125
|
+
IMG2_TAG = create_img_tag_from_product_key(PRODUCT2_KEY)
|
|
126
|
+
MODEL1_TAG = create_model_tag_from_product_key(PRODUCT1_KEY)
|
|
127
|
+
MODEL2_TAG = create_model_tag_from_product_key(PRODUCT2_KEY)
|
|
128
|
+
MODEL1_TYPE_TAG = create_model_type_tag_from_product_key(PRODUCT1_KEY)
|
|
129
|
+
MODEL2_TYPE_TAG = create_model_type_tag_from_product_key(PRODUCT2_KEY)
|
|
130
|
+
SRTM_DIR_TAG = "srtm_dir"
|
|
131
|
+
COLOR1_TAG = "color1"
|
|
132
|
+
MASK1_TAG = "mask1"
|
|
133
|
+
MASK2_TAG = "mask2"
|
|
134
|
+
CLASSIFICATION1_TAG = "classification1"
|
|
135
|
+
CLASSIFICATION2_TAG = "classification2"
|
|
136
|
+
NODATA1_TAG = "nodata1"
|
|
137
|
+
NODATA2_TAG = "nodata2"
|
|
138
|
+
DEFAULT_ALT_TAG = "default_alt"
|
|
139
|
+
USE_EPIPOLAR_A_PRIORI = "use_epipolar_a_priori"
|
|
140
|
+
EPIPOLAR_A_PRIORI = "epipolar_a_priori"
|
|
141
|
+
|
|
142
|
+
# Schema for former input configuration json (TODO : remove)
|
|
143
|
+
INPUT_CONFIGURATION_SCHEMA = {
|
|
144
|
+
IMG1_TAG: And(str, rasterio_can_open),
|
|
145
|
+
IMG2_TAG: And(str, rasterio_can_open),
|
|
146
|
+
OptionalKey(SRTM_DIR_TAG): And(str, Or(os.path.isfile, os.path.isdir)),
|
|
147
|
+
OptionalKey(COLOR1_TAG): And(str, rasterio_can_open),
|
|
148
|
+
OptionalKey(MASK1_TAG): And(str, rasterio_can_open),
|
|
149
|
+
OptionalKey(MASK2_TAG): And(str, rasterio_can_open),
|
|
150
|
+
OptionalKey(DEFAULT_ALT_TAG): float,
|
|
151
|
+
OptionalKey(DEFAULT_ALT_TAG): float,
|
|
152
|
+
NODATA1_TAG: int,
|
|
153
|
+
NODATA2_TAG: int,
|
|
154
|
+
OptionalKey(USE_EPIPOLAR_A_PRIORI): bool,
|
|
155
|
+
OptionalKey(EPIPOLAR_A_PRIORI): dict,
|
|
156
|
+
}
|
cars/conf/mask_cst.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
|
|
5
|
+
#
|
|
6
|
+
# This file is part of CARS
|
|
7
|
+
# (see https://github.com/CNES/cars).
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
"""
|
|
22
|
+
CARS mask module
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
# Standard imports
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# CARS imports
|
|
29
|
+
|
|
30
|
+
# Specific values
|
|
31
|
+
# 0 = valid pixels
|
|
32
|
+
# 255 = value used as no data during the rectification in the epipolar geometry
|
|
33
|
+
VALID_VALUE = 0
|
|
34
|
+
NO_DATA_IN_EPIPOLAR_RECTIFICATION = 255
|
|
35
|
+
PROTECTED_VALUES = [NO_DATA_IN_EPIPOLAR_RECTIFICATION]
|
cars/core/__init__.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
|
|
5
|
+
#
|
|
6
|
+
# This file is part of CARS
|
|
7
|
+
# (see https://github.com/CNES/cars).
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
"""
|
|
22
|
+
CARS core module init file
|
|
23
|
+
"""
|