cars 1.0.0rc3__cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.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.
Files changed (220) hide show
  1. cars/__init__.py +74 -0
  2. cars/applications/__init__.py +40 -0
  3. cars/applications/application.py +117 -0
  4. cars/applications/application_constants.py +29 -0
  5. cars/applications/application_template.py +146 -0
  6. cars/applications/auxiliary_filling/__init__.py +29 -0
  7. cars/applications/auxiliary_filling/abstract_auxiliary_filling_app.py +105 -0
  8. cars/applications/auxiliary_filling/auxiliary_filling_algo.py +475 -0
  9. cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +632 -0
  10. cars/applications/auxiliary_filling/auxiliary_filling_wrappers.py +90 -0
  11. cars/applications/dem_generation/__init__.py +30 -0
  12. cars/applications/dem_generation/abstract_dem_generation_app.py +116 -0
  13. cars/applications/dem_generation/bulldozer_config/base_config.yaml +46 -0
  14. cars/applications/dem_generation/bulldozer_dem_app.py +641 -0
  15. cars/applications/dem_generation/bulldozer_memory.py +55 -0
  16. cars/applications/dem_generation/dem_generation_algo.py +107 -0
  17. cars/applications/dem_generation/dem_generation_constants.py +32 -0
  18. cars/applications/dem_generation/dem_generation_wrappers.py +323 -0
  19. cars/applications/dense_match_filling/__init__.py +30 -0
  20. cars/applications/dense_match_filling/abstract_dense_match_filling_app.py +242 -0
  21. cars/applications/dense_match_filling/fill_disp_algo.py +113 -0
  22. cars/applications/dense_match_filling/fill_disp_constants.py +39 -0
  23. cars/applications/dense_match_filling/fill_disp_wrappers.py +83 -0
  24. cars/applications/dense_match_filling/zero_padding_app.py +302 -0
  25. cars/applications/dense_matching/__init__.py +30 -0
  26. cars/applications/dense_matching/abstract_dense_matching_app.py +261 -0
  27. cars/applications/dense_matching/census_mccnn_sgm_app.py +1461 -0
  28. cars/applications/dense_matching/cpp/__init__.py +0 -0
  29. cars/applications/dense_matching/cpp/dense_matching_cpp.cpython-313-x86_64-linux-gnu.so +0 -0
  30. cars/applications/dense_matching/cpp/dense_matching_cpp.py +94 -0
  31. cars/applications/dense_matching/cpp/includes/dense_matching.hpp +58 -0
  32. cars/applications/dense_matching/cpp/meson.build +9 -0
  33. cars/applications/dense_matching/cpp/src/bindings.cpp +13 -0
  34. cars/applications/dense_matching/cpp/src/dense_matching.cpp +207 -0
  35. cars/applications/dense_matching/dense_matching_algo.py +401 -0
  36. cars/applications/dense_matching/dense_matching_constants.py +89 -0
  37. cars/applications/dense_matching/dense_matching_wrappers.py +951 -0
  38. cars/applications/dense_matching/disparity_grid_algo.py +597 -0
  39. cars/applications/dense_matching/loaders/__init__.py +23 -0
  40. cars/applications/dense_matching/loaders/config_census_sgm_default.json +31 -0
  41. cars/applications/dense_matching/loaders/config_census_sgm_homogeneous.json +30 -0
  42. cars/applications/dense_matching/loaders/config_census_sgm_mountain_and_vegetation.json +30 -0
  43. cars/applications/dense_matching/loaders/config_census_sgm_shadow.json +30 -0
  44. cars/applications/dense_matching/loaders/config_census_sgm_sparse.json +36 -0
  45. cars/applications/dense_matching/loaders/config_census_sgm_urban.json +30 -0
  46. cars/applications/dense_matching/loaders/config_mapping.json +13 -0
  47. cars/applications/dense_matching/loaders/config_mccnn.json +28 -0
  48. cars/applications/dense_matching/loaders/global_land_cover_map.tif +0 -0
  49. cars/applications/dense_matching/loaders/pandora_loader.py +593 -0
  50. cars/applications/dsm_filling/__init__.py +32 -0
  51. cars/applications/dsm_filling/abstract_dsm_filling_app.py +101 -0
  52. cars/applications/dsm_filling/border_interpolation_app.py +278 -0
  53. cars/applications/dsm_filling/bulldozer_config/base_config.yaml +44 -0
  54. cars/applications/dsm_filling/bulldozer_filling_app.py +288 -0
  55. cars/applications/dsm_filling/exogenous_filling_app.py +341 -0
  56. cars/applications/dsm_merging/__init__.py +28 -0
  57. cars/applications/dsm_merging/abstract_dsm_merging_app.py +101 -0
  58. cars/applications/dsm_merging/weighted_fusion_app.py +639 -0
  59. cars/applications/grid_correction/__init__.py +30 -0
  60. cars/applications/grid_correction/abstract_grid_correction_app.py +103 -0
  61. cars/applications/grid_correction/grid_correction_app.py +557 -0
  62. cars/applications/grid_generation/__init__.py +30 -0
  63. cars/applications/grid_generation/abstract_grid_generation_app.py +142 -0
  64. cars/applications/grid_generation/epipolar_grid_generation_app.py +327 -0
  65. cars/applications/grid_generation/grid_generation_algo.py +388 -0
  66. cars/applications/grid_generation/grid_generation_constants.py +46 -0
  67. cars/applications/grid_generation/transform_grid.py +88 -0
  68. cars/applications/ground_truth_reprojection/__init__.py +30 -0
  69. cars/applications/ground_truth_reprojection/abstract_ground_truth_reprojection_app.py +137 -0
  70. cars/applications/ground_truth_reprojection/direct_localization_app.py +629 -0
  71. cars/applications/ground_truth_reprojection/ground_truth_reprojection_algo.py +275 -0
  72. cars/applications/point_cloud_outlier_removal/__init__.py +30 -0
  73. cars/applications/point_cloud_outlier_removal/abstract_outlier_removal_app.py +385 -0
  74. cars/applications/point_cloud_outlier_removal/outlier_removal_algo.py +392 -0
  75. cars/applications/point_cloud_outlier_removal/outlier_removal_constants.py +43 -0
  76. cars/applications/point_cloud_outlier_removal/small_components_app.py +522 -0
  77. cars/applications/point_cloud_outlier_removal/statistical_app.py +528 -0
  78. cars/applications/rasterization/__init__.py +30 -0
  79. cars/applications/rasterization/abstract_pc_rasterization_app.py +183 -0
  80. cars/applications/rasterization/rasterization_algo.py +534 -0
  81. cars/applications/rasterization/rasterization_constants.py +38 -0
  82. cars/applications/rasterization/rasterization_wrappers.py +639 -0
  83. cars/applications/rasterization/simple_gaussian_app.py +1152 -0
  84. cars/applications/resampling/__init__.py +28 -0
  85. cars/applications/resampling/abstract_resampling_app.py +187 -0
  86. cars/applications/resampling/bicubic_resampling_app.py +760 -0
  87. cars/applications/resampling/resampling_algo.py +590 -0
  88. cars/applications/resampling/resampling_constants.py +36 -0
  89. cars/applications/resampling/resampling_wrappers.py +309 -0
  90. cars/applications/sensors_subsampling/__init__.py +32 -0
  91. cars/applications/sensors_subsampling/abstract_subsampling_app.py +109 -0
  92. cars/applications/sensors_subsampling/rasterio_subsampling_app.py +420 -0
  93. cars/applications/sensors_subsampling/subsampling_algo.py +108 -0
  94. cars/applications/sparse_matching/__init__.py +30 -0
  95. cars/applications/sparse_matching/abstract_sparse_matching_app.py +599 -0
  96. cars/applications/sparse_matching/sift_app.py +724 -0
  97. cars/applications/sparse_matching/sparse_matching_algo.py +360 -0
  98. cars/applications/sparse_matching/sparse_matching_constants.py +66 -0
  99. cars/applications/sparse_matching/sparse_matching_wrappers.py +282 -0
  100. cars/applications/triangulation/__init__.py +32 -0
  101. cars/applications/triangulation/abstract_triangulation_app.py +227 -0
  102. cars/applications/triangulation/line_of_sight_intersection_app.py +1243 -0
  103. cars/applications/triangulation/pc_transform.py +552 -0
  104. cars/applications/triangulation/triangulation_algo.py +371 -0
  105. cars/applications/triangulation/triangulation_constants.py +38 -0
  106. cars/applications/triangulation/triangulation_wrappers.py +259 -0
  107. cars/bundleadjustment.py +750 -0
  108. cars/cars.py +179 -0
  109. cars/conf/__init__.py +23 -0
  110. cars/conf/geoid/egm96.grd +0 -0
  111. cars/conf/geoid/egm96.grd.hdr +15 -0
  112. cars/conf/input_parameters.py +156 -0
  113. cars/conf/mask_cst.py +35 -0
  114. cars/core/__init__.py +23 -0
  115. cars/core/cars_logging.py +402 -0
  116. cars/core/constants.py +191 -0
  117. cars/core/constants_disparity.py +50 -0
  118. cars/core/datasets.py +140 -0
  119. cars/core/geometry/__init__.py +27 -0
  120. cars/core/geometry/abstract_geometry.py +1130 -0
  121. cars/core/geometry/shareloc_geometry.py +604 -0
  122. cars/core/inputs.py +568 -0
  123. cars/core/outputs.py +176 -0
  124. cars/core/preprocessing.py +722 -0
  125. cars/core/projection.py +843 -0
  126. cars/core/roi_tools.py +215 -0
  127. cars/core/tiling.py +774 -0
  128. cars/core/utils.py +164 -0
  129. cars/data_structures/__init__.py +23 -0
  130. cars/data_structures/cars_dataset.py +1544 -0
  131. cars/data_structures/cars_dict.py +74 -0
  132. cars/data_structures/corresponding_tiles_tools.py +186 -0
  133. cars/data_structures/dataframe_converter.py +185 -0
  134. cars/data_structures/format_transformation.py +297 -0
  135. cars/devibrate.py +689 -0
  136. cars/extractroi.py +264 -0
  137. cars/orchestrator/__init__.py +23 -0
  138. cars/orchestrator/achievement_tracker.py +125 -0
  139. cars/orchestrator/cluster/__init__.py +37 -0
  140. cars/orchestrator/cluster/abstract_cluster.py +250 -0
  141. cars/orchestrator/cluster/abstract_dask_cluster.py +381 -0
  142. cars/orchestrator/cluster/dask_cluster_tools.py +103 -0
  143. cars/orchestrator/cluster/dask_config/README.md +94 -0
  144. cars/orchestrator/cluster/dask_config/dask.yaml +21 -0
  145. cars/orchestrator/cluster/dask_config/distributed.yaml +70 -0
  146. cars/orchestrator/cluster/dask_config/jobqueue.yaml +26 -0
  147. cars/orchestrator/cluster/dask_config/reference_confs/dask-schema.yaml +137 -0
  148. cars/orchestrator/cluster/dask_config/reference_confs/dask.yaml +26 -0
  149. cars/orchestrator/cluster/dask_config/reference_confs/distributed-schema.yaml +1009 -0
  150. cars/orchestrator/cluster/dask_config/reference_confs/distributed.yaml +273 -0
  151. cars/orchestrator/cluster/dask_config/reference_confs/jobqueue.yaml +212 -0
  152. cars/orchestrator/cluster/dask_jobqueue_utils.py +204 -0
  153. cars/orchestrator/cluster/local_dask_cluster.py +116 -0
  154. cars/orchestrator/cluster/log_wrapper.py +728 -0
  155. cars/orchestrator/cluster/mp_cluster/__init__.py +27 -0
  156. cars/orchestrator/cluster/mp_cluster/mp_factorizer.py +212 -0
  157. cars/orchestrator/cluster/mp_cluster/mp_objects.py +535 -0
  158. cars/orchestrator/cluster/mp_cluster/mp_tools.py +93 -0
  159. cars/orchestrator/cluster/mp_cluster/mp_wrapper.py +505 -0
  160. cars/orchestrator/cluster/mp_cluster/multiprocessing_cluster.py +986 -0
  161. cars/orchestrator/cluster/mp_cluster/multiprocessing_profiler.py +399 -0
  162. cars/orchestrator/cluster/pbs_dask_cluster.py +207 -0
  163. cars/orchestrator/cluster/sequential_cluster.py +139 -0
  164. cars/orchestrator/cluster/slurm_dask_cluster.py +234 -0
  165. cars/orchestrator/memory_tools.py +47 -0
  166. cars/orchestrator/orchestrator.py +755 -0
  167. cars/orchestrator/orchestrator_constants.py +29 -0
  168. cars/orchestrator/registry/__init__.py +23 -0
  169. cars/orchestrator/registry/abstract_registry.py +143 -0
  170. cars/orchestrator/registry/compute_registry.py +106 -0
  171. cars/orchestrator/registry/id_generator.py +116 -0
  172. cars/orchestrator/registry/replacer_registry.py +213 -0
  173. cars/orchestrator/registry/saver_registry.py +363 -0
  174. cars/orchestrator/registry/unseen_registry.py +118 -0
  175. cars/orchestrator/tiles_profiler.py +279 -0
  176. cars/pipelines/__init__.py +26 -0
  177. cars/pipelines/conf_resolution/conf_final_resolution.yaml +5 -0
  178. cars/pipelines/conf_resolution/conf_first_resolution.yaml +4 -0
  179. cars/pipelines/conf_resolution/conf_intermediate_resolution.yaml +2 -0
  180. cars/pipelines/default/__init__.py +26 -0
  181. cars/pipelines/default/default_pipeline.py +1095 -0
  182. cars/pipelines/filling/__init__.py +26 -0
  183. cars/pipelines/filling/filling.py +981 -0
  184. cars/pipelines/formatting/__init__.py +26 -0
  185. cars/pipelines/formatting/formatting.py +190 -0
  186. cars/pipelines/merging/__init__.py +26 -0
  187. cars/pipelines/merging/merging.py +439 -0
  188. cars/pipelines/parameters/__init__.py +0 -0
  189. cars/pipelines/parameters/advanced_parameters.py +256 -0
  190. cars/pipelines/parameters/advanced_parameters_constants.py +68 -0
  191. cars/pipelines/parameters/application_parameters.py +72 -0
  192. cars/pipelines/parameters/depth_map_inputs.py +0 -0
  193. cars/pipelines/parameters/dsm_inputs.py +349 -0
  194. cars/pipelines/parameters/dsm_inputs_constants.py +25 -0
  195. cars/pipelines/parameters/output_constants.py +52 -0
  196. cars/pipelines/parameters/output_parameters.py +435 -0
  197. cars/pipelines/parameters/sensor_inputs.py +859 -0
  198. cars/pipelines/parameters/sensor_inputs_constants.py +51 -0
  199. cars/pipelines/parameters/sensor_loaders/__init__.py +29 -0
  200. cars/pipelines/parameters/sensor_loaders/basic_classif_loader.py +86 -0
  201. cars/pipelines/parameters/sensor_loaders/basic_image_loader.py +98 -0
  202. cars/pipelines/parameters/sensor_loaders/pivot_classif_loader.py +90 -0
  203. cars/pipelines/parameters/sensor_loaders/pivot_image_loader.py +105 -0
  204. cars/pipelines/parameters/sensor_loaders/sensor_loader.py +93 -0
  205. cars/pipelines/parameters/sensor_loaders/sensor_loader_template.py +71 -0
  206. cars/pipelines/parameters/sensor_loaders/slurp_classif_loader.py +86 -0
  207. cars/pipelines/pipeline.py +119 -0
  208. cars/pipelines/pipeline_constants.py +38 -0
  209. cars/pipelines/pipeline_template.py +135 -0
  210. cars/pipelines/subsampling/__init__.py +26 -0
  211. cars/pipelines/subsampling/subsampling.py +358 -0
  212. cars/pipelines/surface_modeling/__init__.py +26 -0
  213. cars/pipelines/surface_modeling/surface_modeling.py +2098 -0
  214. cars/pipelines/tie_points/__init__.py +26 -0
  215. cars/pipelines/tie_points/tie_points.py +536 -0
  216. cars/starter.py +167 -0
  217. cars-1.0.0rc3.dist-info/METADATA +289 -0
  218. cars-1.0.0rc3.dist-info/RECORD +220 -0
  219. cars-1.0.0rc3.dist-info/WHEEL +6 -0
  220. cars-1.0.0rc3.dist-info/entry_points.txt +8 -0
cars/cars.py ADDED
@@ -0,0 +1,179 @@
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("pipeline", "default")
124
+
125
+ if not isinstance(pipeline_name, str):
126
+ pipeline_name = "default"
127
+
128
+ # Logging configuration with args Loglevel
129
+ loglevel = getattr(args, "loglevel", "PROGRESS").upper()
130
+ out_dir = config["output"]["directory"]
131
+
132
+ cars_logging.setup_logging(
133
+ loglevel,
134
+ out_dir=os.path.join(out_dir, "logs"),
135
+ pipeline=pipeline_name,
136
+ )
137
+
138
+ logging.debug("Show argparse arguments: {}".format(args))
139
+
140
+ # Generate pipeline and check conf
141
+ cars_logging.add_progress_message("Check configuration...")
142
+ used_pipeline = Pipeline(pipeline_name, config, config_dir)
143
+ cars_logging.add_progress_message("CARS pipeline is started.")
144
+ if not dry_run:
145
+ # run pipeline
146
+ used_pipeline.run(args)
147
+
148
+ # Generate summary of tasks
149
+ if pipeline_name != "default":
150
+ log_wrapper.generate_summary(
151
+ os.path.join(out_dir, "logs"),
152
+ used_pipeline.used_conf,
153
+ config["pipeline"],
154
+ clean_worker_logs=True,
155
+ )
156
+
157
+ cars_logging.add_progress_message(
158
+ "CARS has successfully completed the pipeline."
159
+ )
160
+
161
+ except BaseException:
162
+ # Catch all exceptions, show debug traceback and exit
163
+ logging.exception("CARS terminated with following error")
164
+ sys.exit(1)
165
+
166
+
167
+ def main():
168
+ """
169
+ Main initial cars cli entry point
170
+ Configure and launch parser before main_cli function
171
+ """
172
+ # CARS parser
173
+ parser = cars_parser()
174
+ args = parser.parse_args(args=None if sys.argv[1:] else ["--help"])
175
+ main_cli(args)
176
+
177
+
178
+ if __name__ == "__main__":
179
+ 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
+ """