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,402 @@
|
|
|
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
|
+
cCars logging module:
|
|
24
|
+
contains cars logging setup logger for main thread
|
|
25
|
+
and workers
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
import logging
|
|
29
|
+
import logging.config
|
|
30
|
+
import os
|
|
31
|
+
import platform
|
|
32
|
+
|
|
33
|
+
# Standard imports
|
|
34
|
+
from datetime import datetime
|
|
35
|
+
from functools import wraps
|
|
36
|
+
|
|
37
|
+
SYS_PLATFORM = platform.system().lower()
|
|
38
|
+
IS_WIN = "windows" == SYS_PLATFORM
|
|
39
|
+
|
|
40
|
+
if IS_WIN:
|
|
41
|
+
import msvcrt # pylint: disable=E0401
|
|
42
|
+
|
|
43
|
+
def lock(file):
|
|
44
|
+
"""Lock file for safe writing (Windows version)"""
|
|
45
|
+
msvcrt.locking(file.fileno(), msvcrt.LK_LOCK, 0)
|
|
46
|
+
|
|
47
|
+
def unlock(file):
|
|
48
|
+
"""Unlock file for safe writing (Windows version)"""
|
|
49
|
+
msvcrt.locking(file.fileno(), msvcrt.LK_UNLCK, 0)
|
|
50
|
+
|
|
51
|
+
else:
|
|
52
|
+
import fcntl
|
|
53
|
+
|
|
54
|
+
def lock(file):
|
|
55
|
+
"""Lock file for safe writing (Unix version)"""
|
|
56
|
+
fcntl.flock(file, fcntl.LOCK_EX)
|
|
57
|
+
|
|
58
|
+
def unlock(file):
|
|
59
|
+
"""Unlock file for safe writing (Unix version)"""
|
|
60
|
+
fcntl.flock(file, fcntl.LOCK_UN)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
PROGRESS = 21
|
|
64
|
+
logging.addLevelName(PROGRESS, "PROGRESS")
|
|
65
|
+
PROFILING_LOG = 15
|
|
66
|
+
logging.addLevelName(PROFILING_LOG, "PROFILING_LOG")
|
|
67
|
+
|
|
68
|
+
profiling_logger = logging.getLogger("profiling_logger")
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class ProfilingFilter(logging.Filter): # pylint: disable=R0903
|
|
72
|
+
"""
|
|
73
|
+
ProfilingFilter
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
def filter(self, record):
|
|
77
|
+
"""
|
|
78
|
+
Filter message
|
|
79
|
+
"""
|
|
80
|
+
return "PROFILING_LOG" not in record.msg
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class ProfilinglHandler(logging.FileHandler): # pylint: disable=R0903
|
|
84
|
+
"""
|
|
85
|
+
Profiling
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
def __init__(self, filename, mode="a", encoding=None, delay=False):
|
|
89
|
+
"""
|
|
90
|
+
Init
|
|
91
|
+
"""
|
|
92
|
+
super().__init__(filename, mode, encoding, delay)
|
|
93
|
+
self.sender = LogSender(filename)
|
|
94
|
+
|
|
95
|
+
def emit(self, record):
|
|
96
|
+
"""
|
|
97
|
+
Emit
|
|
98
|
+
"""
|
|
99
|
+
if "PROFILING" in record.levelname:
|
|
100
|
+
self.sender.write_log(self.format(record) + "\n")
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class WorkerHandler(logging.FileHandler): # pylint: disable=R0903
|
|
104
|
+
"""
|
|
105
|
+
Profiling
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
def __init__(self, filename, mode="a", encoding=None, delay=False):
|
|
109
|
+
"""
|
|
110
|
+
Init
|
|
111
|
+
"""
|
|
112
|
+
super().__init__(filename, mode, encoding, delay)
|
|
113
|
+
self.sender = LogSender(filename)
|
|
114
|
+
|
|
115
|
+
def emit(self, record):
|
|
116
|
+
"""
|
|
117
|
+
Emit
|
|
118
|
+
"""
|
|
119
|
+
if "PROFILING" not in record.levelname:
|
|
120
|
+
self.sender.write_log(self.format(record) + "\n")
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
class LogSender: # pylint: disable=R0903
|
|
124
|
+
"""
|
|
125
|
+
LogSender
|
|
126
|
+
"""
|
|
127
|
+
|
|
128
|
+
def __init__(self, log_file):
|
|
129
|
+
"""
|
|
130
|
+
Init
|
|
131
|
+
"""
|
|
132
|
+
self.log_file = log_file
|
|
133
|
+
|
|
134
|
+
def write_log(self, msg) -> None:
|
|
135
|
+
"""
|
|
136
|
+
Write log
|
|
137
|
+
"""
|
|
138
|
+
with open(self.log_file, "a", encoding="utf-8") as file:
|
|
139
|
+
lock(file)
|
|
140
|
+
file.write(msg)
|
|
141
|
+
unlock(file)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def setup_logging( # pylint: disable=too-many-positional-arguments
|
|
145
|
+
loglevel="PROGRESS",
|
|
146
|
+
out_dir=None,
|
|
147
|
+
log_dir=None,
|
|
148
|
+
pipeline="",
|
|
149
|
+
in_worker=False,
|
|
150
|
+
global_log_file=None,
|
|
151
|
+
):
|
|
152
|
+
"""
|
|
153
|
+
Setup the CARS logging configuration
|
|
154
|
+
|
|
155
|
+
:param loglevel: log level default WARNING
|
|
156
|
+
"""
|
|
157
|
+
# logging
|
|
158
|
+
if loglevel == "PROGRESS":
|
|
159
|
+
numeric_level = PROGRESS
|
|
160
|
+
else:
|
|
161
|
+
if isinstance(loglevel, int):
|
|
162
|
+
numeric_level = loglevel
|
|
163
|
+
else:
|
|
164
|
+
numeric_level = getattr(logging, loglevel, None)
|
|
165
|
+
|
|
166
|
+
if not isinstance(numeric_level, int):
|
|
167
|
+
raise ValueError("Invalid log level: %s" % loglevel)
|
|
168
|
+
|
|
169
|
+
def add_handler_name(config, handler_name, filtered_logger=None):
|
|
170
|
+
"""
|
|
171
|
+
add handler name in known handlers of loggers
|
|
172
|
+
"""
|
|
173
|
+
for key in config["loggers"].keys():
|
|
174
|
+
if filtered_logger is not None:
|
|
175
|
+
if key in filtered_logger:
|
|
176
|
+
config["loggers"][key]["handlers"].append(handler_name)
|
|
177
|
+
else:
|
|
178
|
+
config["loggers"][key]["handlers"].append(handler_name)
|
|
179
|
+
|
|
180
|
+
logging_config = {
|
|
181
|
+
"version": 1,
|
|
182
|
+
"disable_existing_loggers": True,
|
|
183
|
+
"formatters": {
|
|
184
|
+
"standard": {
|
|
185
|
+
"format": "%(asctime)s :: %(levelname)s :: %(message)s"
|
|
186
|
+
},
|
|
187
|
+
"workers": {
|
|
188
|
+
"format": (
|
|
189
|
+
"%(asctime)s :: %(levelname)s "
|
|
190
|
+
+ ":: %(thread)d :: %(process)d :: %(message)s"
|
|
191
|
+
)
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
"handlers": {
|
|
195
|
+
"stdout": {
|
|
196
|
+
"level": numeric_level,
|
|
197
|
+
"formatter": "standard",
|
|
198
|
+
"class": "logging.StreamHandler",
|
|
199
|
+
"stream": "ext://sys.stdout",
|
|
200
|
+
"filters": ["no_profiling"],
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
"filters": {"no_profiling": {"()": ProfilingFilter}},
|
|
204
|
+
"loggers": {
|
|
205
|
+
"": { # root logger
|
|
206
|
+
"handlers": [],
|
|
207
|
+
"level": min(numeric_level, PROFILING_LOG),
|
|
208
|
+
"propagate": False,
|
|
209
|
+
},
|
|
210
|
+
"cars": {
|
|
211
|
+
"handlers": [],
|
|
212
|
+
"level": min(numeric_level, PROFILING_LOG),
|
|
213
|
+
"propagate": False,
|
|
214
|
+
},
|
|
215
|
+
"__main__": { # if __name__ == '__main__'
|
|
216
|
+
"handlers": [],
|
|
217
|
+
"level": min(numeric_level, PROFILING_LOG),
|
|
218
|
+
"propagate": False,
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
# add global log file
|
|
224
|
+
if global_log_file is not None:
|
|
225
|
+
os.makedirs(os.path.dirname(global_log_file), exist_ok=True)
|
|
226
|
+
|
|
227
|
+
handler_global_main = "file_global_main"
|
|
228
|
+
logging_config["handlers"][handler_global_main] = {
|
|
229
|
+
"class": "logging.FileHandler",
|
|
230
|
+
"filename": global_log_file,
|
|
231
|
+
"level": min(numeric_level, logging.INFO),
|
|
232
|
+
"mode": "a",
|
|
233
|
+
"formatter": "standard",
|
|
234
|
+
"filters": ["no_profiling"],
|
|
235
|
+
}
|
|
236
|
+
add_handler_name(logging_config, handler_global_main)
|
|
237
|
+
|
|
238
|
+
# add file formaters:
|
|
239
|
+
if out_dir is not None:
|
|
240
|
+
log_file = os.path.join(
|
|
241
|
+
out_dir,
|
|
242
|
+
"{}_{}.log".format(
|
|
243
|
+
datetime.now().strftime("%y-%m-%d_%Hh%Mm"), pipeline
|
|
244
|
+
),
|
|
245
|
+
)
|
|
246
|
+
os.makedirs(os.path.dirname(log_file), exist_ok=True)
|
|
247
|
+
handler_main = "file_main"
|
|
248
|
+
logging_config["handlers"][handler_main] = {
|
|
249
|
+
"class": "logging.FileHandler",
|
|
250
|
+
"filename": log_file,
|
|
251
|
+
"level": min(numeric_level, logging.INFO),
|
|
252
|
+
"mode": "a",
|
|
253
|
+
"formatter": "standard",
|
|
254
|
+
"filters": ["no_profiling"],
|
|
255
|
+
}
|
|
256
|
+
add_handler_name(logging_config, handler_main)
|
|
257
|
+
|
|
258
|
+
# profiling for main
|
|
259
|
+
profiling_dir = os.path.join(out_dir, "profiling")
|
|
260
|
+
if not os.path.exists(profiling_dir):
|
|
261
|
+
os.makedirs(profiling_dir)
|
|
262
|
+
profiling_file = os.path.join(profiling_dir, "profiling.log")
|
|
263
|
+
|
|
264
|
+
handler_main_profiling = "file_main_profiling"
|
|
265
|
+
logging_config["handlers"][handler_main_profiling] = {
|
|
266
|
+
"class": "logging.FileHandler",
|
|
267
|
+
"filename": profiling_file,
|
|
268
|
+
"level": PROFILING_LOG,
|
|
269
|
+
"mode": "a",
|
|
270
|
+
"formatter": "standard",
|
|
271
|
+
}
|
|
272
|
+
add_handler_name(logging_config, handler_main_profiling)
|
|
273
|
+
|
|
274
|
+
if not in_worker:
|
|
275
|
+
add_handler_name(logging_config, "stdout")
|
|
276
|
+
else:
|
|
277
|
+
# remove stdout as handler
|
|
278
|
+
del logging_config["handlers"]["stdout"]
|
|
279
|
+
|
|
280
|
+
# add file handlers
|
|
281
|
+
|
|
282
|
+
# change level of root logger in workerss
|
|
283
|
+
handler_workers = "file_workers"
|
|
284
|
+
handler_workers_profiling = "file_workers_profiling"
|
|
285
|
+
logging_config["loggers"]["profiling_logger"] = {
|
|
286
|
+
"handlers": [],
|
|
287
|
+
"level": PROFILING_LOG,
|
|
288
|
+
"propagate": False,
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
# sett handlers
|
|
292
|
+
log_file_workers = os.path.join(
|
|
293
|
+
log_dir,
|
|
294
|
+
"workers.log",
|
|
295
|
+
)
|
|
296
|
+
os.makedirs(os.path.dirname(log_file_workers), exist_ok=True)
|
|
297
|
+
|
|
298
|
+
logging_config["handlers"][handler_workers] = {
|
|
299
|
+
"class": "cars.core.cars_logging.WorkerHandler",
|
|
300
|
+
"filename": log_file_workers,
|
|
301
|
+
"level": min(numeric_level, logging.INFO),
|
|
302
|
+
"formatter": "workers",
|
|
303
|
+
}
|
|
304
|
+
add_handler_name(logging_config, handler_workers)
|
|
305
|
+
|
|
306
|
+
# profiling
|
|
307
|
+
log_file_workers_profiling = os.path.join(
|
|
308
|
+
log_dir,
|
|
309
|
+
"profiling.log",
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
logging_config["handlers"][handler_workers_profiling] = {
|
|
313
|
+
"class": "cars.core.cars_logging.ProfilinglHandler",
|
|
314
|
+
"filename": log_file_workers_profiling,
|
|
315
|
+
"level": PROFILING_LOG,
|
|
316
|
+
"formatter": "workers",
|
|
317
|
+
}
|
|
318
|
+
add_handler_name(logging_config, handler_workers_profiling)
|
|
319
|
+
|
|
320
|
+
# Create config
|
|
321
|
+
logging.config.dictConfig(logging_config)
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
def add_progress_message(message):
|
|
325
|
+
"""
|
|
326
|
+
Add enforced message with INFO level
|
|
327
|
+
to stdout and logging file
|
|
328
|
+
|
|
329
|
+
:param message: logging message
|
|
330
|
+
"""
|
|
331
|
+
logging.log(PROGRESS, message)
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def add_profiling_message(message):
|
|
335
|
+
"""
|
|
336
|
+
Add enforced message with PROFILING_LOG level
|
|
337
|
+
to stdout and logging file
|
|
338
|
+
|
|
339
|
+
:param message: logging message
|
|
340
|
+
"""
|
|
341
|
+
logging.log(PROFILING_LOG, message)
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
def wrap_logger(func, log_dir, log_level):
|
|
345
|
+
"""
|
|
346
|
+
Wrapper logger function to wrap worker func
|
|
347
|
+
and setup the worker logger
|
|
348
|
+
:param func: wrapped function
|
|
349
|
+
:param log_dir: output directory of worker logs
|
|
350
|
+
:param log_level: logging level of the worker logs
|
|
351
|
+
"""
|
|
352
|
+
|
|
353
|
+
@wraps(func)
|
|
354
|
+
def wrapper_builder(*args, **kwargs):
|
|
355
|
+
"""
|
|
356
|
+
Wrapper function
|
|
357
|
+
|
|
358
|
+
:param argv: args of func
|
|
359
|
+
:param kwargs: kwargs of func
|
|
360
|
+
"""
|
|
361
|
+
# init logger
|
|
362
|
+
try:
|
|
363
|
+
setup_logging(loglevel=log_level, log_dir=log_dir, in_worker=True)
|
|
364
|
+
res = func(*args, **kwargs)
|
|
365
|
+
except Exception as worker_error:
|
|
366
|
+
logging.exception(worker_error, exc_info=True)
|
|
367
|
+
raise worker_error
|
|
368
|
+
return res
|
|
369
|
+
|
|
370
|
+
return wrapper_builder
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
def logger_func(*args, **kwargs):
|
|
374
|
+
"""
|
|
375
|
+
Logger function to wrap worker func (with non local method)
|
|
376
|
+
and setup the worker logger
|
|
377
|
+
|
|
378
|
+
:param argv: args of func
|
|
379
|
+
:param kwargs: kwargs of func
|
|
380
|
+
"""
|
|
381
|
+
# Get function to wrap and id_list
|
|
382
|
+
try:
|
|
383
|
+
log_dir = kwargs["log_dir"]
|
|
384
|
+
log_level = kwargs["log_level"]
|
|
385
|
+
func = kwargs["log_fun"]
|
|
386
|
+
kwargs.pop("log_dir")
|
|
387
|
+
kwargs.pop("log_level")
|
|
388
|
+
kwargs.pop("log_fun")
|
|
389
|
+
except Exception as exc: # pylint: disable=W0702 # noqa: B001, E722
|
|
390
|
+
raise RuntimeError(
|
|
391
|
+
"Failed in unwrapping. \n Args: {}, \n Kwargs: {}\n".format(
|
|
392
|
+
args, kwargs
|
|
393
|
+
)
|
|
394
|
+
) from exc
|
|
395
|
+
# init logger
|
|
396
|
+
try:
|
|
397
|
+
setup_logging(loglevel=log_level, log_dir=log_dir, in_worker=True)
|
|
398
|
+
res = func(*args, **kwargs)
|
|
399
|
+
except Exception as worker_error:
|
|
400
|
+
logging.exception(worker_error, exc_info=True)
|
|
401
|
+
raise worker_error
|
|
402
|
+
return res
|
cars/core/constants.py
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
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 Constants module
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
# general
|
|
26
|
+
ROW = "row" # cannot be changed because of PANDORA input format
|
|
27
|
+
COL = "col" # cannot be changed because of PANDORA input format
|
|
28
|
+
BAND = "band"
|
|
29
|
+
BAND_IM = "band_im"
|
|
30
|
+
BAND_CLASSIF = "band_classif"
|
|
31
|
+
BAND_PERFORMANCE_MAP = "band_performance_map"
|
|
32
|
+
BAND_LAYER_INF = "band_inf_layer"
|
|
33
|
+
BAND_LAYER_SUP = "band_sup_layer"
|
|
34
|
+
BAND_FILLING = "filling_type"
|
|
35
|
+
BAND_SOURCE_PC = "source_point_cloud"
|
|
36
|
+
RIO_TAG_PERFORMANCE_MAP_CLASSES = "rio_tag_performance_map_classes"
|
|
37
|
+
X = "x"
|
|
38
|
+
Y = "y"
|
|
39
|
+
Z = "z"
|
|
40
|
+
TEXTURE = "texture"
|
|
41
|
+
PERFORMANCE_MAP_FROM_RISK = "risk_performance_map"
|
|
42
|
+
PERFORMANCE_MAP_FROM_INTERVALS = "intervals_performance_map"
|
|
43
|
+
RESOLUTION = "resolution"
|
|
44
|
+
EPI_FULL_SIZE = "full_epipolar_size"
|
|
45
|
+
ROI = "roi"
|
|
46
|
+
ROI_WITH_MARGINS = "roi_with_margins"
|
|
47
|
+
EPSG = "epsg"
|
|
48
|
+
DISPARITY = "disparity"
|
|
49
|
+
PC_EPSG = "point_cloud_epsg"
|
|
50
|
+
|
|
51
|
+
BAND_NAMES = "band_names"
|
|
52
|
+
IMAGE_TYPE = "image_type"
|
|
53
|
+
NBITS = "nbits"
|
|
54
|
+
EPSG_WSG84 = 4326
|
|
55
|
+
# stereo keys
|
|
56
|
+
STEREO_REF = "ref"
|
|
57
|
+
STEREO_SEC = "sec"
|
|
58
|
+
|
|
59
|
+
CROPPED_DISPARITY_RANGE = "cropped_disparity_range"
|
|
60
|
+
|
|
61
|
+
# epipolar image dataset
|
|
62
|
+
EPI_IMAGE = "im" # has to be synchronized with the PANDORA input format
|
|
63
|
+
EPI_MSK = "msk" # has to be synchronized with the PANDORA input format
|
|
64
|
+
EPI_TEXTURE = "texture"
|
|
65
|
+
EPI_CLASSIFICATION = "classif"
|
|
66
|
+
EPI_FILLING = "filling"
|
|
67
|
+
EPI_CONFIDENCE_KEY_ROOT = "confidence"
|
|
68
|
+
EPI_PERFORMANCE_MAP = "performance_map"
|
|
69
|
+
# used in re entrance
|
|
70
|
+
EPI_Z_SUP = "z_sup"
|
|
71
|
+
EPI_Z_INF = "z_inf"
|
|
72
|
+
EPI_AMBIGUITY = "ambiguity"
|
|
73
|
+
EPI_DENOISING_INFO_KEY_ROOT = "denoising"
|
|
74
|
+
EPI_MARGINS = "margins"
|
|
75
|
+
EPI_DISP_MIN = "disp_min"
|
|
76
|
+
EPI_DISP_MAX = "disp_max"
|
|
77
|
+
EPI_VALID_PIXELS = "valid_pixels"
|
|
78
|
+
EPI_NO_DATA_MASK = "no_data_mask"
|
|
79
|
+
EPI_NO_DATA_IMG = "no_data_img"
|
|
80
|
+
EPI_TRANSFORM = "transform"
|
|
81
|
+
EPI_CRS = "crs"
|
|
82
|
+
EPI_GROUND_TRUTH = "epi_ground_truth"
|
|
83
|
+
SENSOR_GROUND_TRUTH = "sensor_ground_truth"
|
|
84
|
+
|
|
85
|
+
# points cloud fields (xarray Dataset and pandas Dataframe)
|
|
86
|
+
POINT_CLOUD_CORR_MSK = "corr_msk"
|
|
87
|
+
POINT_CLOUD_MSK = "mask"
|
|
88
|
+
POINT_CLOUD_CLR_KEY_ROOT = "texture"
|
|
89
|
+
# base name used to parse
|
|
90
|
+
POINT_CLOUD_PERFORMANCE_MAP_ROOT = "performance_map"
|
|
91
|
+
POINT_CLOUD_PERFORMANCE_MAP_FROM_RISK = (
|
|
92
|
+
POINT_CLOUD_PERFORMANCE_MAP_ROOT + "_from_risk"
|
|
93
|
+
)
|
|
94
|
+
POINT_CLOUD_PERFORMANCE_MAP_FROM_INTERVALS = (
|
|
95
|
+
POINT_CLOUD_PERFORMANCE_MAP_ROOT + "_from_intervals"
|
|
96
|
+
)
|
|
97
|
+
POINT_CLOUD_CONFIDENCE_KEY_ROOT = "confidence"
|
|
98
|
+
POINT_CLOUD_AMBIGUITY_KEY_ROOT = "ambiguity"
|
|
99
|
+
POINT_CLOUD_INTERVALS_KEY_ROOT = "intervals"
|
|
100
|
+
# base name used to parse
|
|
101
|
+
POINT_CLOUD_LAYER_SUP_OR_INF_ROOT = "layer_border_z"
|
|
102
|
+
POINT_CLOUD_LAYER_SUP = POINT_CLOUD_LAYER_SUP_OR_INF_ROOT + "_sup"
|
|
103
|
+
POINT_CLOUD_LAYER_INF = POINT_CLOUD_LAYER_SUP_OR_INF_ROOT + "_inf"
|
|
104
|
+
POINT_CLOUD_LAYER_SUP_FROM_RISK = POINT_CLOUD_LAYER_SUP + "_from_risk"
|
|
105
|
+
POINT_CLOUD_LAYER_INF_FROM_RISK = POINT_CLOUD_LAYER_INF + "_from_risk"
|
|
106
|
+
POINT_CLOUD_LAYER_SUP_FROM_INTERVALS = POINT_CLOUD_LAYER_SUP + "_from_intervals"
|
|
107
|
+
POINT_CLOUD_LAYER_INF_FROM_INTERVALS = POINT_CLOUD_LAYER_INF + "_from_intervals"
|
|
108
|
+
POINT_CLOUD_CLASSIF_KEY_ROOT = "classif"
|
|
109
|
+
POINT_CLOUD_FILLING_KEY_ROOT = "filling"
|
|
110
|
+
POINT_CLOUD_SOURCE_KEY_ROOT = "source_pc"
|
|
111
|
+
POINT_CLOUD_COORD_EPI_GEOM_I = "coord_epi_geom_i"
|
|
112
|
+
POINT_CLOUD_COORD_EPI_GEOM_J = "coord_epi_geom_j"
|
|
113
|
+
POINT_CLOUD_ID_IM_EPI = "id_im_epi"
|
|
114
|
+
POINT_CLOUD_MATCHES = "point_cloud_matches"
|
|
115
|
+
|
|
116
|
+
# raster fields (xarray Dataset)
|
|
117
|
+
RASTER_HGT = "hgt"
|
|
118
|
+
RASTER_HGT_INF = "hgt_inf"
|
|
119
|
+
RASTER_HGT_SUP = "hgt_sup"
|
|
120
|
+
RASTER_WEIGHTS_SUM = "weights_sum"
|
|
121
|
+
RASTER_COLOR_IMG = "img"
|
|
122
|
+
RASTER_MSK = "raster_msk"
|
|
123
|
+
RASTER_CLASSIF = "raster_classif"
|
|
124
|
+
RASTER_NB_PTS = "n_pts"
|
|
125
|
+
RASTER_NB_PTS_IN_CELL = "pts_in_cell"
|
|
126
|
+
RASTER_HGT_MEAN = "hgt_mean"
|
|
127
|
+
RASTER_HGT_STD_DEV = "hgt_stdev"
|
|
128
|
+
RASTER_HGT_INF_MEAN = "hgt_inf_mean"
|
|
129
|
+
RASTER_HGT_INF_STD_DEV = "hgt_inf_stdev"
|
|
130
|
+
RASTER_HGT_SUP_MEAN = "hgt_sup_mean"
|
|
131
|
+
RASTER_HGT_SUP_STD_DEV = "hgt_sup_stdev"
|
|
132
|
+
RASTER_BAND_MEAN = "band_mean"
|
|
133
|
+
RASTER_BAND_STD_DEV = "band_stdev"
|
|
134
|
+
RASTER_CONFIDENCE = "confidence"
|
|
135
|
+
RASTER_PERFORMANCE_MAP = "performance_map"
|
|
136
|
+
RASTER_AMBIGUITY = "ambiguity"
|
|
137
|
+
RASTER_PERFORMANCE_MAP_RAW = "performance_map_raw"
|
|
138
|
+
RASTER_SOURCE_PC = "source_pc"
|
|
139
|
+
RASTER_FILLING = "filling"
|
|
140
|
+
# Geometry constants
|
|
141
|
+
DISP_MODE = "disp"
|
|
142
|
+
MATCHES_MODE = "matches"
|
|
143
|
+
|
|
144
|
+
# DSM index
|
|
145
|
+
INDEX_DSM_ALT = "dsm"
|
|
146
|
+
INDEX_DSM_WEIGHTS = "weights"
|
|
147
|
+
INDEX_DSM_COLOR = "image"
|
|
148
|
+
INDEX_DSM_MASK = "mask"
|
|
149
|
+
INDEX_DSM_CLASSIFICATION = "classification"
|
|
150
|
+
INDEX_DSM_PERFORMANCE_MAP = "performance_map"
|
|
151
|
+
INDEX_DSM_AMBIGUITY = "ambiguity"
|
|
152
|
+
INDEX_DSM_CONTRIBUTING_PAIR = "contributing_pair"
|
|
153
|
+
INDEX_DSM_FILLING = "filling"
|
|
154
|
+
INDEX_DEM_MIN = "dem_min"
|
|
155
|
+
INDEX_DEM_MAX = "dem_max"
|
|
156
|
+
INDEX_DEM_MEDIAN = "dem_median"
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
# depth map index
|
|
160
|
+
INDEX_DEPTH_MAP_X = "x"
|
|
161
|
+
INDEX_DEPTH_MAP_Y = "y"
|
|
162
|
+
INDEX_DEPTH_MAP_Z = "z"
|
|
163
|
+
INDEX_DEPTH_MAP_COLOR = "image"
|
|
164
|
+
INDEX_DEPTH_MAP_MASK = "mask"
|
|
165
|
+
INDEX_DEPTH_MAP_CLASSIFICATION = "classification"
|
|
166
|
+
INDEX_DEPTH_MAP_PERFORMANCE_MAP = "performance_map"
|
|
167
|
+
INDEX_DEPTH_MAP_AMBIGUITY = "ambiguity"
|
|
168
|
+
INDEX_DEPTH_MAP_FILLING = "filling"
|
|
169
|
+
INDEX_DEPTH_MAP_EPSG = "epsg"
|
|
170
|
+
|
|
171
|
+
# dsms inputs index
|
|
172
|
+
DSM_CLASSIF = "merging_classification"
|
|
173
|
+
DSM_ALT = "dsm"
|
|
174
|
+
DSM_ALT_INF = "dsm_inf"
|
|
175
|
+
DSM_ALT_SUP = "dsm_sup"
|
|
176
|
+
DSM_WEIGHTS_SUM = "weights"
|
|
177
|
+
DSM_MSK = "mask"
|
|
178
|
+
DSM_NB_PTS = "dsm_n_pts"
|
|
179
|
+
DSM_NB_PTS_IN_CELL = "dsm_pts_in_cell"
|
|
180
|
+
DSM_MEAN = "dsm_mean"
|
|
181
|
+
DSM_STD_DEV = "dsm_std"
|
|
182
|
+
DSM_INF_MEAN = "dsm_inf_mean"
|
|
183
|
+
DSM_INF_STD = "dsm_inf_std"
|
|
184
|
+
DSM_SUP_MEAN = "dsm_sup_mean"
|
|
185
|
+
DSM_SUP_STD = "dsm_sup_std"
|
|
186
|
+
DSM_AMBIGUITY = "ambiguity"
|
|
187
|
+
DSM_CONFIDENCE = "confidence"
|
|
188
|
+
DSM_PERFORMANCE_MAP = "performance_map"
|
|
189
|
+
DSM_SOURCE_PC = "contributing_pair"
|
|
190
|
+
DSM_FILLING = "merging_filling"
|
|
191
|
+
DSM_COLOR = "image"
|
|
@@ -0,0 +1,50 @@
|
|
|
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 Disparity Constants module
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
# disparity map
|
|
26
|
+
MAP = "disp"
|
|
27
|
+
CONFIDENCE = "confidence"
|
|
28
|
+
CONFIDENCE_KEY = "cost_volume_confidence"
|
|
29
|
+
INTERVAL = "interval_bounds"
|
|
30
|
+
INTERVAL_INF = "confidence_from_interval_bounds_inf"
|
|
31
|
+
INTERVAL_SUP = "confidence_from_interval_bounds_sup"
|
|
32
|
+
EPI_DISP_MIN_GRID = "disp_min_grid"
|
|
33
|
+
EPI_DISP_MAX_GRID = "disp_max_grid"
|
|
34
|
+
|
|
35
|
+
# disparity mask
|
|
36
|
+
VALID = "disp_msk"
|
|
37
|
+
FILLING = "filling"
|
|
38
|
+
INVALID_REF = "msk_invalid_ref"
|
|
39
|
+
INVALID_SEC = "msk_invalid_sec"
|
|
40
|
+
MASKED_REF = "msk_masked_ref"
|
|
41
|
+
MASKED_SEC = "msk_masked_sec"
|
|
42
|
+
OCCLUSION = "msk_occlusion"
|
|
43
|
+
FALSE_MATCH = "msk_false_match"
|
|
44
|
+
INCOMPLETE_DISP = "msk_incomplete_disp"
|
|
45
|
+
STOPPED_INTERP = "msk_stopped_interp"
|
|
46
|
+
FILLED_OCCLUSION = "msk_filled_occlusion"
|
|
47
|
+
FILLED_FALSE_MATCH = "msk_filled_false_match"
|
|
48
|
+
INSIDE_SEC_ROI = "msk_inside_sec_roi"
|
|
49
|
+
DISP_TO_0 = "msk_disp_to_0"
|
|
50
|
+
INCOMPLETE_VARIABLE_DISP = "msk_incomplete_variable_disp"
|