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
cars/__init__.py
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
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 module init file
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# start delvewheel patch
|
|
27
|
+
def _delvewheel_patch_1_11_2():
|
|
28
|
+
import os
|
|
29
|
+
if os.path.isdir(libs_dir := os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, 'cars.libs'))):
|
|
30
|
+
os.add_dll_directory(libs_dir)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
_delvewheel_patch_1_11_2()
|
|
34
|
+
del _delvewheel_patch_1_11_2
|
|
35
|
+
# end delvewheel patch
|
|
36
|
+
|
|
37
|
+
import os
|
|
38
|
+
import sys
|
|
39
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
40
|
+
|
|
41
|
+
try:
|
|
42
|
+
__version__ = version("cars")
|
|
43
|
+
except PackageNotFoundError:
|
|
44
|
+
# package is not installed
|
|
45
|
+
__version__ = "unknown"
|
|
46
|
+
|
|
47
|
+
# Standard imports
|
|
48
|
+
if sys.version_info < (3, 10):
|
|
49
|
+
from importlib_metadata import entry_points
|
|
50
|
+
else:
|
|
51
|
+
from importlib.metadata import entry_points
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
__author__ = "CNES"
|
|
55
|
+
__email__ = "cars@cnes.fr"
|
|
56
|
+
|
|
57
|
+
# Force the use of CARS dask configuration
|
|
58
|
+
dask_config_path = os.path.join(
|
|
59
|
+
os.path.dirname(__file__), "orchestrator", "cluster", "dask_config"
|
|
60
|
+
)
|
|
61
|
+
if not os.path.isdir(dask_config_path):
|
|
62
|
+
raise NotADirectoryError("Wrong dask config path")
|
|
63
|
+
os.environ["DASK_CONFIG"] = str(dask_config_path)
|
|
64
|
+
|
|
65
|
+
# Force monothread for child workers
|
|
66
|
+
os.environ["PANDORA_NUMBA_PARALLEL"] = str(False)
|
|
67
|
+
os.environ["PANDORA_NUMBA_CACHE"] = str(False)
|
|
68
|
+
os.environ["SHARELOC_NUMBA_PARALLEL"] = str(False)
|
|
69
|
+
os.environ["OMP_NUM_THREADS"] = "1"
|
|
70
|
+
os.environ["MKL_NUM_THREADS"] = "1"
|
|
71
|
+
os.environ["GDAL_NUM_THREADS"] = "1"
|
|
72
|
+
|
|
73
|
+
# Limit GDAL cache per worker to 500MB
|
|
74
|
+
os.environ["GDAL_CACHEMAX"] = "500"
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def import_plugins() -> None:
|
|
78
|
+
"""
|
|
79
|
+
Load all the registered entry points
|
|
80
|
+
:return: None
|
|
81
|
+
"""
|
|
82
|
+
for entry_point in entry_points(group="cars.plugins"):
|
|
83
|
+
entry_point.load()
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
import_plugins()
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
# Imports needed in order to register application for Application factory
|
|
26
|
+
from . import auxiliary_filling # noqa: F401
|
|
27
|
+
from . import dem_generation # noqa: F401
|
|
28
|
+
from . import dense_match_filling # noqa: F401
|
|
29
|
+
from . import dense_matching # noqa: F401
|
|
30
|
+
from . import dsm_filling # noqa: F401
|
|
31
|
+
from . import dsm_merging # noqa: F401
|
|
32
|
+
from . import grid_correction # noqa: F401
|
|
33
|
+
from . import grid_generation # noqa: F401
|
|
34
|
+
from . import ground_truth_reprojection # noqa: F401
|
|
35
|
+
from . import point_cloud_outlier_removal # noqa: F401
|
|
36
|
+
from . import rasterization # noqa: F401
|
|
37
|
+
from . import resampling # noqa: F401
|
|
38
|
+
from . import sensors_subsampling # noqa: F401
|
|
39
|
+
from . import sparse_matching # noqa: F401
|
|
40
|
+
from . import triangulation # noqa: F401
|
|
@@ -0,0 +1,117 @@
|
|
|
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 application factory.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
# Standard imports
|
|
27
|
+
import logging
|
|
28
|
+
|
|
29
|
+
from cars.applications.application_template import ScalingApplicationTemplate
|
|
30
|
+
|
|
31
|
+
# CARS imports
|
|
32
|
+
from cars.conf.input_parameters import ConfigType
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Application:
|
|
36
|
+
"""
|
|
37
|
+
Application factory:
|
|
38
|
+
A class designed for registered all available Cars application and
|
|
39
|
+
instantiate when needed.
|
|
40
|
+
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
# Dict (application_name:str, class: object) containing registered
|
|
44
|
+
# applications
|
|
45
|
+
available_applications = {}
|
|
46
|
+
|
|
47
|
+
def __new__(
|
|
48
|
+
cls,
|
|
49
|
+
app_name: str,
|
|
50
|
+
cfg: ConfigType = None,
|
|
51
|
+
scaling_coeff: float = 1,
|
|
52
|
+
):
|
|
53
|
+
"""
|
|
54
|
+
Return the instance of application associated with the application
|
|
55
|
+
name given as parameter
|
|
56
|
+
|
|
57
|
+
:param app_name: name of the application.
|
|
58
|
+
:type app_name: str
|
|
59
|
+
:param cfg: configuration {'matching_cost_method': value}
|
|
60
|
+
:type cfg: dictionary
|
|
61
|
+
:param scaling_coeff: scaling factor for resolution
|
|
62
|
+
:type scaling_coeff: float
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
return cls.create_app(app_name, cfg, scaling_coeff)
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def create_app(cls, name: str, cfg: ConfigType, scaling_coeff: float = 1):
|
|
69
|
+
"""Factory command to create the application
|
|
70
|
+
Return the instance of application associated with the application
|
|
71
|
+
name given as parameter
|
|
72
|
+
|
|
73
|
+
:param app_name: name of the application.
|
|
74
|
+
:type app_name: str
|
|
75
|
+
:param cfg: configuration {'matching_cost_method': value}
|
|
76
|
+
:type cfg: dictionary
|
|
77
|
+
:param scaling_coeff: scaling factor for resolution
|
|
78
|
+
:type scaling_coeff: float
|
|
79
|
+
"""
|
|
80
|
+
try:
|
|
81
|
+
app_class = cls.available_applications[name]
|
|
82
|
+
except KeyError:
|
|
83
|
+
logging.error("No application named {0} supported".format(name))
|
|
84
|
+
return None
|
|
85
|
+
|
|
86
|
+
if issubclass(app_class, ScalingApplicationTemplate):
|
|
87
|
+
return app_class(scaling_coeff=scaling_coeff, conf=cfg)
|
|
88
|
+
|
|
89
|
+
return app_class(conf=cfg)
|
|
90
|
+
|
|
91
|
+
@classmethod
|
|
92
|
+
def print_applications(cls):
|
|
93
|
+
"""
|
|
94
|
+
Print all registered applications
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
for app_name in cls.available_applications:
|
|
98
|
+
print(app_name)
|
|
99
|
+
|
|
100
|
+
@classmethod
|
|
101
|
+
def register(cls, app_name: str):
|
|
102
|
+
"""
|
|
103
|
+
Allows to register the application with its name
|
|
104
|
+
:param app_name: the application to be registered
|
|
105
|
+
:type app_name: string
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
def decorator(app):
|
|
109
|
+
"""
|
|
110
|
+
Registers the class in the available methods
|
|
111
|
+
:param app: the app class to be registered
|
|
112
|
+
:type app: object
|
|
113
|
+
"""
|
|
114
|
+
cls.available_applications[app_name] = app
|
|
115
|
+
return app
|
|
116
|
+
|
|
117
|
+
return decorator
|
|
@@ -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
|
+
application_constants contains constants used in application module
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
APPLICATION_TAG = "applications"
|
|
27
|
+
|
|
28
|
+
# common parameters
|
|
29
|
+
SAVE_INTERMEDIATE_DATA = "save_intermediate_data"
|
|
@@ -0,0 +1,146 @@
|
|
|
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 application template for
|
|
24
|
+
templating the application concept.
|
|
25
|
+
Useful for shared parameters and functions in all applications
|
|
26
|
+
Beware: argument-differ is activated in pylintrc for run parameters different
|
|
27
|
+
in sub application classes
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
# Standard imports
|
|
31
|
+
import logging
|
|
32
|
+
import os
|
|
33
|
+
import pprint
|
|
34
|
+
from abc import ABCMeta, abstractmethod
|
|
35
|
+
|
|
36
|
+
# CARS imports
|
|
37
|
+
from cars.conf.input_parameters import ConfigType
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class ApplicationTemplate(metaclass=ABCMeta):
|
|
41
|
+
"""
|
|
42
|
+
Class for general specification of an application
|
|
43
|
+
Empty for the moment because there is no any common method or function
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
# Define abstract attributes
|
|
47
|
+
used_config: ConfigType
|
|
48
|
+
|
|
49
|
+
@abstractmethod
|
|
50
|
+
def run(self, *args, **kwargs):
|
|
51
|
+
"""
|
|
52
|
+
Generic run() function to be defined in subclasses
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
def __init__(self, conf=None): # pylint: disable=W0613
|
|
56
|
+
"""
|
|
57
|
+
Init function of ApplicationTemplate
|
|
58
|
+
|
|
59
|
+
:param conf: configuration for application
|
|
60
|
+
|
|
61
|
+
"""
|
|
62
|
+
# Check conf
|
|
63
|
+
try:
|
|
64
|
+
self.used_config = self.check_conf(conf)
|
|
65
|
+
except Exception:
|
|
66
|
+
logging.error(
|
|
67
|
+
"The {} application checking has been failed!".format(
|
|
68
|
+
self.__class__.__bases__[0].__name__
|
|
69
|
+
)
|
|
70
|
+
)
|
|
71
|
+
raise
|
|
72
|
+
|
|
73
|
+
@abstractmethod
|
|
74
|
+
def check_conf(self, conf):
|
|
75
|
+
"""
|
|
76
|
+
Check configuration
|
|
77
|
+
|
|
78
|
+
:param conf: configuration to check
|
|
79
|
+
:type conf: dict
|
|
80
|
+
|
|
81
|
+
:return: overloaded configuration
|
|
82
|
+
:rtype: dict
|
|
83
|
+
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
def print_config(self):
|
|
87
|
+
"""
|
|
88
|
+
Print used application configuration
|
|
89
|
+
|
|
90
|
+
"""
|
|
91
|
+
pretty_printer = pprint.PrettyPrinter(indent=4)
|
|
92
|
+
|
|
93
|
+
try:
|
|
94
|
+
pretty_printer.pprint(self.used_config)
|
|
95
|
+
except Exception:
|
|
96
|
+
logging.error("self.used_config not filled by application")
|
|
97
|
+
|
|
98
|
+
def get_conf(self):
|
|
99
|
+
"""
|
|
100
|
+
Get used conf
|
|
101
|
+
|
|
102
|
+
:return: used conf
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
return self.used_config
|
|
106
|
+
|
|
107
|
+
def generate_unknown_dump_dir(self, orchestrator):
|
|
108
|
+
"""
|
|
109
|
+
Generate dump dir from orchestrator
|
|
110
|
+
|
|
111
|
+
:param orchestrator: orchestrator
|
|
112
|
+
|
|
113
|
+
:return: dump dir
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
dump_dir = None
|
|
117
|
+
if orchestrator is not None:
|
|
118
|
+
orch_out_dir = orchestrator.out_dir
|
|
119
|
+
dump_dir = os.path.join(
|
|
120
|
+
orch_out_dir,
|
|
121
|
+
"unknown_dump",
|
|
122
|
+
self.__class__.__bases__[0].__name__,
|
|
123
|
+
)
|
|
124
|
+
return dump_dir
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class ScalingApplicationTemplate(ApplicationTemplate, metaclass=ABCMeta):
|
|
128
|
+
"""
|
|
129
|
+
Template for applications requiring resolution scaling.
|
|
130
|
+
|
|
131
|
+
Inherits from ApplicationTemplate and adds the scaling coefficient
|
|
132
|
+
as a required argument.
|
|
133
|
+
"""
|
|
134
|
+
|
|
135
|
+
def __init__(self, scaling_coeff, conf=None):
|
|
136
|
+
"""
|
|
137
|
+
Init function of ScalingApplicationTemplate
|
|
138
|
+
|
|
139
|
+
:param scaling_coeff: scaling factor for resolution
|
|
140
|
+
:type scaling_coeff: float
|
|
141
|
+
|
|
142
|
+
:param conf: configuration for application
|
|
143
|
+
:type conf: dict
|
|
144
|
+
"""
|
|
145
|
+
self.scaling_coeff = scaling_coeff
|
|
146
|
+
super().__init__(conf=conf)
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
CARS auxiliary filling module init file
|
|
23
|
+
"""
|
|
24
|
+
# flake8: noqa: F401
|
|
25
|
+
|
|
26
|
+
import cars.applications.auxiliary_filling.abstract_auxiliary_filling_app
|
|
27
|
+
from cars.applications.auxiliary_filling.auxiliary_filling_from_sensors_app import ( # pylint: disable=C0301
|
|
28
|
+
AuxiliaryFilling,
|
|
29
|
+
)
|
|
@@ -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 abstract AuxiliaryFilling application class.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
import logging
|
|
26
|
+
from abc import ABCMeta, abstractmethod
|
|
27
|
+
from typing import Dict
|
|
28
|
+
|
|
29
|
+
from cars.applications.application import Application
|
|
30
|
+
from cars.applications.application_template import ApplicationTemplate
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@Application.register("auxiliary_filling")
|
|
34
|
+
class AuxiliaryFilling(ApplicationTemplate, metaclass=ABCMeta):
|
|
35
|
+
"""
|
|
36
|
+
AuxiliaryFilling abstract class
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
available_applications: Dict = {}
|
|
40
|
+
default_application = "auxiliary_filling_from_sensors"
|
|
41
|
+
|
|
42
|
+
def __new__(cls, conf=None): # pylint: disable=W0613
|
|
43
|
+
"""
|
|
44
|
+
Return the required application
|
|
45
|
+
:raises:
|
|
46
|
+
- KeyError when the required application is not registered
|
|
47
|
+
|
|
48
|
+
:param conf: configuration for auxiliary_filling
|
|
49
|
+
:return: an application_to_use object
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
auxiliary_filling_method = cls.default_application
|
|
53
|
+
|
|
54
|
+
if bool(conf) is False or "method" not in conf:
|
|
55
|
+
logging.info(
|
|
56
|
+
"Auxiliary filling method not specified, "
|
|
57
|
+
"default {} is used".format(auxiliary_filling_method)
|
|
58
|
+
)
|
|
59
|
+
else:
|
|
60
|
+
auxiliary_filling_method = conf["method"]
|
|
61
|
+
|
|
62
|
+
if auxiliary_filling_method not in cls.available_applications:
|
|
63
|
+
logging.error(
|
|
64
|
+
"No auxiliary_filling application named {} registered".format(
|
|
65
|
+
auxiliary_filling_method
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
raise KeyError(
|
|
69
|
+
"No auxiliary_filling application named {} registered".format(
|
|
70
|
+
auxiliary_filling_method
|
|
71
|
+
)
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
logging.info(
|
|
75
|
+
"The AuxiliaryFilling({}) application will be used".format(
|
|
76
|
+
auxiliary_filling_method
|
|
77
|
+
)
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
return super(AuxiliaryFilling, cls).__new__(
|
|
81
|
+
cls.available_applications[auxiliary_filling_method]
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def __init_subclass__(cls, short_name, **kwargs): # pylint: disable=E0302
|
|
85
|
+
super().__init_subclass__(**kwargs)
|
|
86
|
+
cls.available_applications[short_name] = cls
|
|
87
|
+
|
|
88
|
+
@abstractmethod
|
|
89
|
+
def run( # pylint: disable=too-many-positional-arguments
|
|
90
|
+
self,
|
|
91
|
+
dsm_file,
|
|
92
|
+
color_file,
|
|
93
|
+
classif_file,
|
|
94
|
+
dump_dir,
|
|
95
|
+
sensor_inputs,
|
|
96
|
+
pairing,
|
|
97
|
+
geom_plugin,
|
|
98
|
+
texture_bands,
|
|
99
|
+
output_geoid,
|
|
100
|
+
orchestrator=None,
|
|
101
|
+
dsm_dir=None,
|
|
102
|
+
):
|
|
103
|
+
"""
|
|
104
|
+
Run Auxiliary filling
|
|
105
|
+
"""
|