cars 1.0.0rc2__cp312-cp312-win_amd64.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 +86 -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 +42 -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.cp312-win_amd64.dll.a +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.cp312-win_amd64.pyd +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 +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 +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 +1088 -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 +186 -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 +438 -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.0rc2.dist-info/DELVEWHEEL +2 -0
- cars-1.0.0rc2.dist-info/METADATA +289 -0
- cars-1.0.0rc2.dist-info/RECORD +225 -0
- cars-1.0.0rc2.dist-info/WHEEL +4 -0
- cars-1.0.0rc2.dist-info/entry_points.txt +8 -0
- cars.libs/libgcc_s_seh-1-b2494fcbd4d80cf2c98fdd5261f6d850.dll +0 -0
- cars.libs/libstdc++-6-e9b0d12ae0e9555bbae55e8dfd08c3f7.dll +0 -0
- cars.libs/libwinpthread-1-7882d1b093714ccdfaf4e0789a817792.dll +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
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 in sensor_to_full_resolution
|
|
23
|
+
pipeline.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
# Sensor input
|
|
27
|
+
|
|
28
|
+
SENSORS = "sensors"
|
|
29
|
+
PAIRING = "pairing"
|
|
30
|
+
RECTIFICATION_GRIDS = "rectification_grids"
|
|
31
|
+
|
|
32
|
+
INITIAL_ELEVATION = "initial_elevation"
|
|
33
|
+
LOW_RES_DSM = "low_res_dsm"
|
|
34
|
+
|
|
35
|
+
ROI = "roi"
|
|
36
|
+
GEOID = "geoid"
|
|
37
|
+
DEM_PATH = "dem"
|
|
38
|
+
LOADERS = "loaders"
|
|
39
|
+
FILLING = "filling"
|
|
40
|
+
|
|
41
|
+
INPUT_IMG = "image"
|
|
42
|
+
INPUT_MSK = "mask"
|
|
43
|
+
INPUT_CLASSIFICATION = "classification"
|
|
44
|
+
INPUT_GEO_MODEL = "geomodel"
|
|
45
|
+
INPUT_GEO_MODEL_TYPE = "geomodel_type"
|
|
46
|
+
INPUT_GEO_MODEL_FILTER = "geomodel_filters"
|
|
47
|
+
INPUT_NODATA = "no_data"
|
|
48
|
+
INPUT_PATH = "path"
|
|
49
|
+
INPUT_VALUES = "values"
|
|
50
|
+
|
|
51
|
+
CARS_DEFAULT_ALT = 0 # Default altitude used in cars pipelines
|
|
@@ -0,0 +1,29 @@
|
|
|
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 application module init file
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from .basic_classif_loader import BasicClassifSensorLoader # noqa: F401
|
|
26
|
+
from .basic_image_loader import BasicImageSensorLoader # noqa: F401
|
|
27
|
+
from .pivot_classif_loader import PivotClassifSensorLoader # noqa: F401
|
|
28
|
+
from .pivot_image_loader import PivotImageSensorLoader # noqa: F401
|
|
29
|
+
from .slurp_classif_loader import SlurpClassifSensorLoader # noqa: F401
|
|
@@ -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("basic_classification")
|
|
40
|
+
class BasicClassifSensorLoader(SensorLoaderTemplate):
|
|
41
|
+
"""
|
|
42
|
+
Default sensor loader (used when no sensor loader is specified)
|
|
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,98 @@
|
|
|
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 BasicImageSensorLoader class.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from json_checker import Checker, Or
|
|
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_image_loader import (
|
|
31
|
+
PivotImageSensorLoader,
|
|
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("basic_image")
|
|
40
|
+
class BasicImageSensorLoader(SensorLoaderTemplate):
|
|
41
|
+
"""
|
|
42
|
+
Default sensor loader for image (used when no sensor loader is specified)
|
|
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
|
+
overloaded_conf[sens_cst.INPUT_NODATA] = 0
|
|
59
|
+
elif isinstance(conf, dict):
|
|
60
|
+
overloaded_conf = conf.copy()
|
|
61
|
+
image_path = make_relative_path_absolute(
|
|
62
|
+
conf[sens_cst.INPUT_PATH], self.config_dir
|
|
63
|
+
)
|
|
64
|
+
overloaded_conf[sens_cst.INPUT_PATH] = image_path
|
|
65
|
+
overloaded_conf[sens_cst.INPUT_NODATA] = conf.get(
|
|
66
|
+
sens_cst.INPUT_NODATA, 0
|
|
67
|
+
)
|
|
68
|
+
else:
|
|
69
|
+
raise TypeError(f"Input {conf} is not a string ot dict")
|
|
70
|
+
|
|
71
|
+
sensor_schema = {
|
|
72
|
+
sens_cst.INPUT_PATH: str,
|
|
73
|
+
sens_cst.INPUT_NODATA: Or(None, int),
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
# Check conf
|
|
77
|
+
checker = Checker(sensor_schema)
|
|
78
|
+
checker.validate(overloaded_conf)
|
|
79
|
+
|
|
80
|
+
return overloaded_conf
|
|
81
|
+
|
|
82
|
+
def set_pivot_format(self):
|
|
83
|
+
"""
|
|
84
|
+
Transform input configuration to pivot format and store it
|
|
85
|
+
"""
|
|
86
|
+
pivot_config = {"bands": {}}
|
|
87
|
+
for band_id in range(
|
|
88
|
+
inputs.rasterio_get_nb_bands(self.used_config[sens_cst.INPUT_PATH])
|
|
89
|
+
):
|
|
90
|
+
band_name = "b" + str(band_id)
|
|
91
|
+
pivot_config["bands"][band_name] = {
|
|
92
|
+
sens_cst.INPUT_PATH: self.used_config[sens_cst.INPUT_PATH],
|
|
93
|
+
"band": band_id,
|
|
94
|
+
}
|
|
95
|
+
pivot_sensor_loader = PivotImageSensorLoader(
|
|
96
|
+
pivot_config, self.config_dir
|
|
97
|
+
)
|
|
98
|
+
self.pivot_format = pivot_sensor_loader.get_pivot_format()
|
|
@@ -0,0 +1,90 @@
|
|
|
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 PivotImageSensorLoader 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.sensor_loader import SensorLoader
|
|
31
|
+
from cars.pipelines.parameters.sensor_loaders.sensor_loader_template import (
|
|
32
|
+
SensorLoaderTemplate,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@SensorLoader.register("pivot_classification")
|
|
37
|
+
class PivotClassifSensorLoader(SensorLoaderTemplate):
|
|
38
|
+
"""
|
|
39
|
+
Pivot image sensor loader : used by CARS to read inputs
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
def check_conf(self, conf):
|
|
43
|
+
"""
|
|
44
|
+
Check configuration
|
|
45
|
+
|
|
46
|
+
:param conf: configuration to check
|
|
47
|
+
|
|
48
|
+
:return: overloaded configuration
|
|
49
|
+
:rtype: dict
|
|
50
|
+
"""
|
|
51
|
+
overloaded_conf = conf.copy()
|
|
52
|
+
# Make relative path absolute
|
|
53
|
+
overloaded_conf["path"] = make_relative_path_absolute(
|
|
54
|
+
overloaded_conf["path"], self.config_dir
|
|
55
|
+
)
|
|
56
|
+
overloaded_conf[sens_cst.INPUT_VALUES] = conf.get(
|
|
57
|
+
sens_cst.INPUT_VALUES, []
|
|
58
|
+
)
|
|
59
|
+
# Check dtype and number of bands
|
|
60
|
+
classif_file = overloaded_conf["path"]
|
|
61
|
+
classif_dtype = inputs.rasterio_get_dtype(classif_file)
|
|
62
|
+
if classif_dtype != "uint8":
|
|
63
|
+
raise TypeError(
|
|
64
|
+
"Classification file {} has type {} which is not supported "
|
|
65
|
+
"for classification : type must be uint8".format(
|
|
66
|
+
classif_file, classif_dtype
|
|
67
|
+
)
|
|
68
|
+
)
|
|
69
|
+
classif_nb_bands = inputs.rasterio_get_nb_bands(classif_file)
|
|
70
|
+
if classif_nb_bands != 1:
|
|
71
|
+
raise TypeError(
|
|
72
|
+
"Classification file {} has {} bands but only mono-band "
|
|
73
|
+
"classification is allowed".format(
|
|
74
|
+
classif_file, classif_nb_bands
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
sensor_schema = {
|
|
79
|
+
sens_cst.INPUT_PATH: str,
|
|
80
|
+
sens_cst.INPUT_VALUES: list,
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
# Check conf
|
|
84
|
+
checker = Checker(sensor_schema)
|
|
85
|
+
checker.validate(overloaded_conf)
|
|
86
|
+
|
|
87
|
+
return overloaded_conf
|
|
88
|
+
|
|
89
|
+
def set_pivot_format(self):
|
|
90
|
+
self.pivot_format = self.used_config
|
|
@@ -0,0 +1,105 @@
|
|
|
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 PivotImageSensorLoader class.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from json_checker import Checker, Or
|
|
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.sensor_loader import SensorLoader
|
|
31
|
+
from cars.pipelines.parameters.sensor_loaders.sensor_loader_template import (
|
|
32
|
+
SensorLoaderTemplate,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@SensorLoader.register("pivot_image")
|
|
37
|
+
class PivotImageSensorLoader(SensorLoaderTemplate):
|
|
38
|
+
"""
|
|
39
|
+
Pivot image sensor loader : used by CARS to read inputs
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
def check_conf(self, conf):
|
|
43
|
+
"""
|
|
44
|
+
Check configuration
|
|
45
|
+
|
|
46
|
+
:param conf: configuration to check
|
|
47
|
+
|
|
48
|
+
:return: overloaded configuration
|
|
49
|
+
:rtype: dict
|
|
50
|
+
"""
|
|
51
|
+
overloaded_conf = conf.copy()
|
|
52
|
+
# Make relative paths absolutes
|
|
53
|
+
for band in overloaded_conf["bands"]:
|
|
54
|
+
overloaded_conf["bands"][band]["path"] = (
|
|
55
|
+
make_relative_path_absolute(
|
|
56
|
+
overloaded_conf["bands"][band]["path"], self.config_dir
|
|
57
|
+
)
|
|
58
|
+
)
|
|
59
|
+
# Check consistency between files
|
|
60
|
+
b0_path = overloaded_conf["bands"]["b0"]["path"]
|
|
61
|
+
b0_size = inputs.rasterio_get_size(b0_path)
|
|
62
|
+
b0_transform = inputs.rasterio_get_transform(b0_path)
|
|
63
|
+
for band in overloaded_conf["bands"]:
|
|
64
|
+
band_path = overloaded_conf["bands"][band]["path"]
|
|
65
|
+
band_id = overloaded_conf["bands"][band]["band"]
|
|
66
|
+
nb_bands = inputs.rasterio_get_nb_bands(band_path)
|
|
67
|
+
if band_id >= nb_bands:
|
|
68
|
+
raise RuntimeError(
|
|
69
|
+
"Band id {} is not valid for sensor which "
|
|
70
|
+
"has only {} bands".format(band_id, nb_bands)
|
|
71
|
+
)
|
|
72
|
+
if band_path != b0_path:
|
|
73
|
+
band_size = inputs.rasterio_get_size(band_path)
|
|
74
|
+
band_transform = inputs.rasterio_get_transform(band_path)
|
|
75
|
+
if b0_size != band_size:
|
|
76
|
+
raise RuntimeError(
|
|
77
|
+
"The files {} and {} do not have the same size "
|
|
78
|
+
"but are in the same image".format(b0_path, band_path)
|
|
79
|
+
)
|
|
80
|
+
if b0_transform != band_transform:
|
|
81
|
+
raise RuntimeError(
|
|
82
|
+
"The files {} and {} do not have the same transform "
|
|
83
|
+
"but are in the same image".format(
|
|
84
|
+
b0_path,
|
|
85
|
+
band_path,
|
|
86
|
+
)
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
overloaded_conf[sens_cst.INPUT_NODATA] = conf.get(
|
|
90
|
+
sens_cst.INPUT_NODATA, 0
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
sensor_schema = {
|
|
94
|
+
"bands": dict,
|
|
95
|
+
sens_cst.INPUT_NODATA: Or(None, int),
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
# Check conf
|
|
99
|
+
checker = Checker(sensor_schema)
|
|
100
|
+
checker.validate(overloaded_conf)
|
|
101
|
+
|
|
102
|
+
return overloaded_conf
|
|
103
|
+
|
|
104
|
+
def set_pivot_format(self):
|
|
105
|
+
self.pivot_format = self.used_config
|
|
@@ -0,0 +1,93 @@
|
|
|
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 sensor loader factory.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
import logging
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class SensorLoader:
|
|
30
|
+
"""
|
|
31
|
+
SensorLoader factory:
|
|
32
|
+
A class designed for registered all available Cars sensor loader and
|
|
33
|
+
instantiate when needed.
|
|
34
|
+
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
# Dict (loader_name:str, class: object) containing registered
|
|
38
|
+
# sensor loaders
|
|
39
|
+
available_loaders = {}
|
|
40
|
+
|
|
41
|
+
def __new__(cls, app_name: str, cfg: dict, config_dir: str):
|
|
42
|
+
"""
|
|
43
|
+
Return the instance of sensor loader associated with the sensor loader
|
|
44
|
+
name given as parameter
|
|
45
|
+
|
|
46
|
+
:param app_name: name of the sensor loader.
|
|
47
|
+
:type app_name: str
|
|
48
|
+
:param cfg: configuration {'matching_cost_method': value}
|
|
49
|
+
:type cfg: dictionary
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
return cls.create_app(app_name, cfg, config_dir)
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def create_app(cls, name: str, cfg: dict, config_dir: str):
|
|
56
|
+
"""
|
|
57
|
+
Factory command to create the sensor loader
|
|
58
|
+
Return the instance of sensor loader associated with the sensor loader
|
|
59
|
+
name given as parameter
|
|
60
|
+
|
|
61
|
+
:param app_name: name of the sensor loader.
|
|
62
|
+
:type app_name: str
|
|
63
|
+
:param cfg: sensor loader configuration
|
|
64
|
+
:type cfg: dictionary
|
|
65
|
+
"""
|
|
66
|
+
loader = None
|
|
67
|
+
|
|
68
|
+
try:
|
|
69
|
+
loader_class = cls.available_loaders[name]
|
|
70
|
+
except KeyError:
|
|
71
|
+
logging.error("No sensor loader named {0} supported".format(name))
|
|
72
|
+
return None
|
|
73
|
+
loader = loader_class(cfg, config_dir)
|
|
74
|
+
return loader
|
|
75
|
+
|
|
76
|
+
@classmethod
|
|
77
|
+
def register(cls, app_name: str):
|
|
78
|
+
"""
|
|
79
|
+
Allows to register the sensor loader with its name
|
|
80
|
+
:param app_name: the sensor loader to be registered
|
|
81
|
+
:type app_name: string
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
def decorator(app):
|
|
85
|
+
"""
|
|
86
|
+
Registers the class in the available methods
|
|
87
|
+
:param app: the app class to be registered
|
|
88
|
+
:type app: object
|
|
89
|
+
"""
|
|
90
|
+
cls.available_loaders[app_name] = app
|
|
91
|
+
return app
|
|
92
|
+
|
|
93
|
+
return decorator
|
|
@@ -0,0 +1,71 @@
|
|
|
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 AbstractSensorLoader class.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from abc import abstractmethod
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class SensorLoaderTemplate:
|
|
29
|
+
"""
|
|
30
|
+
Class for general specification of a sensor loader
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
def __init__(self, conf, config_dir):
|
|
34
|
+
"""
|
|
35
|
+
Init function of SensorLoaderTemplate
|
|
36
|
+
|
|
37
|
+
:param conf: configuration for sensor loader
|
|
38
|
+
"""
|
|
39
|
+
self.config_dir = config_dir
|
|
40
|
+
self.used_config = self.check_conf(conf)
|
|
41
|
+
|
|
42
|
+
self.pivot_format = None
|
|
43
|
+
|
|
44
|
+
@abstractmethod
|
|
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
|
+
|
|
55
|
+
def get_pivot_format(self):
|
|
56
|
+
"""
|
|
57
|
+
Return sensor configuration as pivot format
|
|
58
|
+
|
|
59
|
+
:return: pivot format configuration
|
|
60
|
+
:rtype: dict
|
|
61
|
+
"""
|
|
62
|
+
if self.pivot_format is None:
|
|
63
|
+
self.set_pivot_format()
|
|
64
|
+
|
|
65
|
+
return self.pivot_format
|
|
66
|
+
|
|
67
|
+
@abstractmethod
|
|
68
|
+
def set_pivot_format(self):
|
|
69
|
+
"""
|
|
70
|
+
Transform input configuration to pivot format and store it
|
|
71
|
+
"""
|