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.
- cars/__init__.py +74 -0
- cars/applications/__init__.py +40 -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 +105 -0
- cars/applications/auxiliary_filling/auxiliary_filling_algo.py +475 -0
- cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +632 -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 +46 -0
- cars/applications/dem_generation/bulldozer_dem_app.py +641 -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 +1461 -0
- cars/applications/dense_matching/cpp/__init__.py +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.cpython-313-x86_64-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 +597 -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 +278 -0
- cars/applications/dsm_filling/bulldozer_config/base_config.yaml +44 -0
- cars/applications/dsm_filling/bulldozer_filling_app.py +288 -0
- cars/applications/dsm_filling/exogenous_filling_app.py +341 -0
- cars/applications/dsm_merging/__init__.py +28 -0
- cars/applications/dsm_merging/abstract_dsm_merging_app.py +101 -0
- cars/applications/dsm_merging/weighted_fusion_app.py +639 -0
- cars/applications/grid_correction/__init__.py +30 -0
- cars/applications/grid_correction/abstract_grid_correction_app.py +103 -0
- cars/applications/grid_correction/grid_correction_app.py +557 -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_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 +522 -0
- cars/applications/point_cloud_outlier_removal/statistical_app.py +528 -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 +639 -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 +760 -0
- cars/applications/resampling/resampling_algo.py +590 -0
- cars/applications/resampling/resampling_constants.py +36 -0
- cars/applications/resampling/resampling_wrappers.py +309 -0
- cars/applications/sensors_subsampling/__init__.py +32 -0
- cars/applications/sensors_subsampling/abstract_subsampling_app.py +109 -0
- cars/applications/sensors_subsampling/rasterio_subsampling_app.py +420 -0
- cars/applications/sensors_subsampling/subsampling_algo.py +108 -0
- cars/applications/sparse_matching/__init__.py +30 -0
- cars/applications/sparse_matching/abstract_sparse_matching_app.py +599 -0
- cars/applications/sparse_matching/sift_app.py +724 -0
- cars/applications/sparse_matching/sparse_matching_algo.py +360 -0
- cars/applications/sparse_matching/sparse_matching_constants.py +66 -0
- cars/applications/sparse_matching/sparse_matching_wrappers.py +282 -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 +750 -0
- cars/cars.py +179 -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 +1130 -0
- cars/core/geometry/shareloc_geometry.py +604 -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 +1544 -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 +250 -0
- cars/orchestrator/cluster/abstract_dask_cluster.py +381 -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 +728 -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 +986 -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/memory_tools.py +47 -0
- cars/orchestrator/orchestrator.py +755 -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 +4 -0
- cars/pipelines/conf_resolution/conf_intermediate_resolution.yaml +2 -0
- cars/pipelines/default/__init__.py +26 -0
- cars/pipelines/default/default_pipeline.py +1095 -0
- cars/pipelines/filling/__init__.py +26 -0
- cars/pipelines/filling/filling.py +981 -0
- cars/pipelines/formatting/__init__.py +26 -0
- cars/pipelines/formatting/formatting.py +190 -0
- cars/pipelines/merging/__init__.py +26 -0
- cars/pipelines/merging/merging.py +439 -0
- cars/pipelines/parameters/__init__.py +0 -0
- cars/pipelines/parameters/advanced_parameters.py +256 -0
- cars/pipelines/parameters/advanced_parameters_constants.py +68 -0
- cars/pipelines/parameters/application_parameters.py +72 -0
- cars/pipelines/parameters/depth_map_inputs.py +0 -0
- cars/pipelines/parameters/dsm_inputs.py +349 -0
- cars/pipelines/parameters/dsm_inputs_constants.py +25 -0
- cars/pipelines/parameters/output_constants.py +52 -0
- cars/pipelines/parameters/output_parameters.py +435 -0
- cars/pipelines/parameters/sensor_inputs.py +859 -0
- cars/pipelines/parameters/sensor_inputs_constants.py +51 -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 +38 -0
- cars/pipelines/pipeline_template.py +135 -0
- cars/pipelines/subsampling/__init__.py +26 -0
- cars/pipelines/subsampling/subsampling.py +358 -0
- cars/pipelines/surface_modeling/__init__.py +26 -0
- cars/pipelines/surface_modeling/surface_modeling.py +2098 -0
- cars/pipelines/tie_points/__init__.py +26 -0
- cars/pipelines/tie_points/tie_points.py +536 -0
- cars/starter.py +167 -0
- cars-1.0.0rc3.dist-info/METADATA +289 -0
- cars-1.0.0rc3.dist-info/RECORD +220 -0
- cars-1.0.0rc3.dist-info/WHEEL +6 -0
- cars-1.0.0rc3.dist-info/entry_points.txt +8 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# !/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2024 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 module contains the ClassifSensorLoader class.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from json_checker import Checker
|
|
26
|
+
|
|
27
|
+
from cars.core import inputs
|
|
28
|
+
from cars.core.utils import make_relative_path_absolute
|
|
29
|
+
from cars.pipelines.parameters import sensor_inputs_constants as sens_cst
|
|
30
|
+
from cars.pipelines.parameters.sensor_loaders.pivot_classif_loader import (
|
|
31
|
+
PivotClassifSensorLoader,
|
|
32
|
+
)
|
|
33
|
+
from cars.pipelines.parameters.sensor_loaders.sensor_loader import SensorLoader
|
|
34
|
+
from cars.pipelines.parameters.sensor_loaders.sensor_loader_template import (
|
|
35
|
+
SensorLoaderTemplate,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@SensorLoader.register("slurp_classification")
|
|
40
|
+
class SlurpClassifSensorLoader(SensorLoaderTemplate):
|
|
41
|
+
"""
|
|
42
|
+
SLURP sensor loader
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def check_conf(self, conf):
|
|
46
|
+
"""
|
|
47
|
+
Check configuration
|
|
48
|
+
|
|
49
|
+
:param conf: configuration to check
|
|
50
|
+
|
|
51
|
+
:return: overloaded configuration
|
|
52
|
+
:rtype: dict
|
|
53
|
+
"""
|
|
54
|
+
if isinstance(conf, str):
|
|
55
|
+
overloaded_conf = {}
|
|
56
|
+
image_path = make_relative_path_absolute(conf, self.config_dir)
|
|
57
|
+
overloaded_conf[sens_cst.INPUT_PATH] = image_path
|
|
58
|
+
else:
|
|
59
|
+
raise TypeError(f"Input {conf} is not a string")
|
|
60
|
+
|
|
61
|
+
sensor_schema = {
|
|
62
|
+
sens_cst.INPUT_PATH: str,
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# Check conf
|
|
66
|
+
checker = Checker(sensor_schema)
|
|
67
|
+
checker.validate(overloaded_conf)
|
|
68
|
+
|
|
69
|
+
return overloaded_conf
|
|
70
|
+
|
|
71
|
+
def set_pivot_format(self):
|
|
72
|
+
"""
|
|
73
|
+
Transform input configuration to pivot format and store it
|
|
74
|
+
"""
|
|
75
|
+
pivot_config = {
|
|
76
|
+
sens_cst.INPUT_PATH: self.used_config[sens_cst.INPUT_PATH],
|
|
77
|
+
}
|
|
78
|
+
pivot_config["values"] = inputs.rasterio_get_classif_values(
|
|
79
|
+
self.used_config[sens_cst.INPUT_PATH]
|
|
80
|
+
)
|
|
81
|
+
# Remove value 0 because it corresponds to unclassified data
|
|
82
|
+
pivot_config["values"].remove(0)
|
|
83
|
+
pivot_sensor_loader = PivotClassifSensorLoader(
|
|
84
|
+
pivot_config, self.config_dir
|
|
85
|
+
)
|
|
86
|
+
self.pivot_format = pivot_sensor_loader.get_pivot_format()
|
|
@@ -0,0 +1,119 @@
|
|
|
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
|
+
"""
|
|
23
|
+
This module contains class pipeline factory.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
import logging
|
|
27
|
+
from typing import Dict, Union
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class Pipeline:
|
|
31
|
+
"""
|
|
32
|
+
Pipeline factory:
|
|
33
|
+
A class designed for registered all available Cars Pipeline and
|
|
34
|
+
instantiate when needed.
|
|
35
|
+
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
# Dict (pipeline_name:str, class: object) containing registered
|
|
39
|
+
# pipelines
|
|
40
|
+
available_pipeline = {}
|
|
41
|
+
|
|
42
|
+
def __new__(
|
|
43
|
+
cls,
|
|
44
|
+
pipeline_name: str,
|
|
45
|
+
cfg: Dict[str, Union[str, int]],
|
|
46
|
+
config_dir,
|
|
47
|
+
):
|
|
48
|
+
"""
|
|
49
|
+
Return the instance of pipeline associated with the pipeline
|
|
50
|
+
name given as parameter
|
|
51
|
+
|
|
52
|
+
:param pipeline_name: name of the pipeline.
|
|
53
|
+
:type pipeline_name: str
|
|
54
|
+
:param cfg: configuration {'matching_cost_method': value}
|
|
55
|
+
:type cfg: dictionary
|
|
56
|
+
:param config_dir: path to dir containing json or yaml file
|
|
57
|
+
:type config_dir: str
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
return cls.create_pipeline(pipeline_name, cfg, config_dir)
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def create_pipeline(
|
|
64
|
+
cls, name: str, cfg: Dict[str, Union[str, int]], config_dir
|
|
65
|
+
):
|
|
66
|
+
"""Factory command to create the pipeline
|
|
67
|
+
Return the instance of pipeline associated with the pipeline
|
|
68
|
+
name given as parameter
|
|
69
|
+
|
|
70
|
+
:param pipeline_name: name of the pipeline.
|
|
71
|
+
:type pipeline_name: str
|
|
72
|
+
:param cfg: cars input configuration
|
|
73
|
+
:type cfg: dictionary
|
|
74
|
+
:param config_dir: path to dir containing json
|
|
75
|
+
:type config_dir: str
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
pipeline = None
|
|
79
|
+
try:
|
|
80
|
+
pipeline_class = cls.available_pipeline[name]
|
|
81
|
+
|
|
82
|
+
except KeyError as kerr:
|
|
83
|
+
logging.error("No pipeline named {0} supported".format(name))
|
|
84
|
+
raise NameError(
|
|
85
|
+
"No pipeline named {0} supported".format(name)
|
|
86
|
+
) from kerr
|
|
87
|
+
|
|
88
|
+
pipeline = pipeline_class(cfg, config_dir)
|
|
89
|
+
|
|
90
|
+
return pipeline
|
|
91
|
+
|
|
92
|
+
@classmethod
|
|
93
|
+
def print_available_pipelines(cls):
|
|
94
|
+
"""
|
|
95
|
+
Print all registered pipelines
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
for pipeline_name in cls.available_pipeline:
|
|
99
|
+
print(pipeline_name)
|
|
100
|
+
|
|
101
|
+
@classmethod
|
|
102
|
+
def register(cls, *pipeline_names: str):
|
|
103
|
+
"""
|
|
104
|
+
Allows to register the pipeline with its name
|
|
105
|
+
:param pipeline_name: the pipelines to be registered
|
|
106
|
+
:type pipeline_name: string
|
|
107
|
+
"""
|
|
108
|
+
|
|
109
|
+
def decorator(app):
|
|
110
|
+
"""
|
|
111
|
+
Registers the class in the available methods
|
|
112
|
+
:param app: the app class to be registered
|
|
113
|
+
:type app: object
|
|
114
|
+
"""
|
|
115
|
+
for pipeline_name in pipeline_names:
|
|
116
|
+
cls.available_pipeline[pipeline_name] = app
|
|
117
|
+
return app
|
|
118
|
+
|
|
119
|
+
return decorator
|
|
@@ -0,0 +1,38 @@
|
|
|
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 module contains the constants used for all pipelines
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
# Sensor input
|
|
26
|
+
|
|
27
|
+
INPUT = "input"
|
|
28
|
+
OUTPUT = "output"
|
|
29
|
+
APPLICATIONS = "applications"
|
|
30
|
+
ADVANCED = "advanced"
|
|
31
|
+
ORCHESTRATOR = "orchestrator"
|
|
32
|
+
FILLING = "filling"
|
|
33
|
+
PIPELINE = "pipeline"
|
|
34
|
+
SUBSAMPLING = "subsampling"
|
|
35
|
+
TIE_POINTS = "tie_points"
|
|
36
|
+
MERGING = "merging"
|
|
37
|
+
SURFACE_MODELING = "surface_modeling"
|
|
38
|
+
FORMATTING = "formatting"
|
|
@@ -0,0 +1,135 @@
|
|
|
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 module contains class pipeline template for
|
|
23
|
+
templating the pipeline concept.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from abc import ABCMeta, abstractmethod
|
|
27
|
+
|
|
28
|
+
from json_checker import Checker, OptionalKey, Or
|
|
29
|
+
|
|
30
|
+
# CARS imports
|
|
31
|
+
from cars.orchestrator import orchestrator
|
|
32
|
+
from cars.pipelines import pipeline_constants
|
|
33
|
+
from cars.pipelines.pipeline import Pipeline
|
|
34
|
+
|
|
35
|
+
# Disable pylint error: too few public method
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class PipelineTemplate(metaclass=ABCMeta): # pylint: disable=R0903
|
|
39
|
+
"""
|
|
40
|
+
Class for general specification of an pipeline
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
def check_orchestrator(self, conf):
|
|
44
|
+
"""
|
|
45
|
+
Check the configuration of orchestrator
|
|
46
|
+
|
|
47
|
+
:param conf: configuration of orchestrator
|
|
48
|
+
:type conf: dict
|
|
49
|
+
:return: overloaded orchestrator conf
|
|
50
|
+
:rtype: dict
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
with orchestrator.Orchestrator(
|
|
54
|
+
orchestrator_conf=conf, out_dir=None, launch_worker=False
|
|
55
|
+
) as orchestrator_obj:
|
|
56
|
+
conf = orchestrator_obj.get_conf()
|
|
57
|
+
return conf
|
|
58
|
+
|
|
59
|
+
def check_global_schema(self, conf):
|
|
60
|
+
"""
|
|
61
|
+
Check the given global configuration
|
|
62
|
+
|
|
63
|
+
:param conf: configuration
|
|
64
|
+
:type conf: dict
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
# Validate inputs
|
|
68
|
+
global_schema = {
|
|
69
|
+
pipeline_constants.INPUT: dict,
|
|
70
|
+
pipeline_constants.OUTPUT: dict,
|
|
71
|
+
OptionalKey(pipeline_constants.ORCHESTRATOR): dict,
|
|
72
|
+
OptionalKey(pipeline_constants.PIPELINE): Or(str, list, dict),
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
for pipeline_name in Pipeline.available_pipeline:
|
|
76
|
+
global_schema = global_schema | {
|
|
77
|
+
OptionalKey(pipeline_name): Or(None, dict)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
checker_inputs = Checker(global_schema)
|
|
81
|
+
checker_inputs.validate(conf)
|
|
82
|
+
|
|
83
|
+
@abstractmethod
|
|
84
|
+
def check_inputs(self, conf, config_json_dir=None):
|
|
85
|
+
"""
|
|
86
|
+
Check the inputs given
|
|
87
|
+
|
|
88
|
+
:param conf: configuration of inputs
|
|
89
|
+
:type conf: dict
|
|
90
|
+
:param config_json_dir: directory of used json, if
|
|
91
|
+
user filled paths with relative paths
|
|
92
|
+
:type config_json_dir: str
|
|
93
|
+
|
|
94
|
+
:return: overloader inputs
|
|
95
|
+
:rtype: dict
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
@abstractmethod
|
|
99
|
+
def check_output(self, conf):
|
|
100
|
+
"""
|
|
101
|
+
Check the output given
|
|
102
|
+
|
|
103
|
+
:param conf: configuration of output
|
|
104
|
+
:type conf: dict
|
|
105
|
+
|
|
106
|
+
:return overloader output
|
|
107
|
+
:rtype : dict
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
@abstractmethod
|
|
111
|
+
def run(self):
|
|
112
|
+
"""
|
|
113
|
+
Run pipeline
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _merge_resolution_conf_rec(conf1, conf2):
|
|
118
|
+
"""
|
|
119
|
+
Merge secondary configuration on primary one
|
|
120
|
+
|
|
121
|
+
:param conf1: configuration
|
|
122
|
+
:type conf1: dict
|
|
123
|
+
:param conf2: configuration
|
|
124
|
+
:type conf2: dict
|
|
125
|
+
|
|
126
|
+
:return: merged conf
|
|
127
|
+
:rtype: dict
|
|
128
|
+
|
|
129
|
+
"""
|
|
130
|
+
for key in conf2.keys():
|
|
131
|
+
if key in conf1:
|
|
132
|
+
if isinstance(conf1[key], dict) and isinstance(conf2[key], dict):
|
|
133
|
+
_merge_resolution_conf_rec(conf1[key], conf2[key])
|
|
134
|
+
else:
|
|
135
|
+
conf1[key] = conf2[key]
|
|
@@ -0,0 +1,26 @@
|
|
|
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 subsampling pipeline module init file
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
# Cars imports
|
|
26
|
+
from cars.pipelines.subsampling import subsampling # noqa: F401
|