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,279 @@
|
|
|
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 tile profiler class
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
import argparse
|
|
26
|
+
import logging
|
|
27
|
+
import os
|
|
28
|
+
import pickle
|
|
29
|
+
|
|
30
|
+
import numpy as np
|
|
31
|
+
import xarray as xr
|
|
32
|
+
|
|
33
|
+
COMPUTED = [0, 255, 0]
|
|
34
|
+
NONE_TILE = [255, 0, 0]
|
|
35
|
+
UNKNOWN = [0, 0, 255]
|
|
36
|
+
|
|
37
|
+
COLOR = "color"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class TileProfiler: # pylint: disable=too-few-public-methods
|
|
41
|
+
"""
|
|
42
|
+
TileProfiler
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def __init__(self, folder, saver_registry, replacer_registry):
|
|
46
|
+
"""
|
|
47
|
+
Init function of TileProfiler
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
self.folder = folder
|
|
51
|
+
self.saver_registry = saver_registry
|
|
52
|
+
self.replacer_registry = replacer_registry
|
|
53
|
+
|
|
54
|
+
self.cars_ds_ids = []
|
|
55
|
+
self.monitored_cars_ds = []
|
|
56
|
+
self.file_names = []
|
|
57
|
+
self.arrays = []
|
|
58
|
+
|
|
59
|
+
def add_tile(self, tile_object):
|
|
60
|
+
"""
|
|
61
|
+
Add tile to profiling
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
self._add_tile(tile_object)
|
|
66
|
+
except Exception:
|
|
67
|
+
logging.debug("Error in TileProfiler.add_tile ")
|
|
68
|
+
|
|
69
|
+
def _add_tile(self, tile_object):
|
|
70
|
+
"""
|
|
71
|
+
Add tile to profiling
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
# Get Cars Dastaset id
|
|
75
|
+
cars_ds_id = self.saver_registry.get_future_cars_dataset_id(tile_object)
|
|
76
|
+
|
|
77
|
+
if cars_ds_id not in self.cars_ds_ids:
|
|
78
|
+
self.cars_ds_ids.append(cars_ds_id)
|
|
79
|
+
|
|
80
|
+
# Get cars_ds
|
|
81
|
+
cars_ds = self.saver_registry.get_cars_ds(tile_object)
|
|
82
|
+
if cars_ds is None:
|
|
83
|
+
cars_ds = self.replacer_registry.get_cars_ds(tile_object)
|
|
84
|
+
if cars_ds is None:
|
|
85
|
+
raise RuntimeError("CARS Dataset is None")
|
|
86
|
+
self.monitored_cars_ds.append(cars_ds)
|
|
87
|
+
|
|
88
|
+
# Create array
|
|
89
|
+
new_arr = np.zeros((*cars_ds.shape, 3), dtype=int)
|
|
90
|
+
# Update None tiles
|
|
91
|
+
for tile_row in range(cars_ds.shape[0]):
|
|
92
|
+
for tile_col in range(cars_ds.shape[1]):
|
|
93
|
+
if cars_ds[tile_row, tile_col] is None:
|
|
94
|
+
new_arr[tile_row, tile_col, :] = NONE_TILE
|
|
95
|
+
else:
|
|
96
|
+
new_arr[tile_row, tile_col, :] = UNKNOWN
|
|
97
|
+
|
|
98
|
+
# Create Dataset
|
|
99
|
+
tiling_grid = cars_ds.tiling_grid
|
|
100
|
+
rows = (tiling_grid[:, 0, 0] + tiling_grid[:, 0, 1]) / 2
|
|
101
|
+
cols = (tiling_grid[0, :, 2] + tiling_grid[0, :, 3]) / 2
|
|
102
|
+
|
|
103
|
+
progress = ["None", "Computed", "In progress"]
|
|
104
|
+
dataset = xr.Dataset(
|
|
105
|
+
data_vars={
|
|
106
|
+
"color": (["row", "col", "progress"], new_arr),
|
|
107
|
+
},
|
|
108
|
+
coords={"progress": progress, "row": rows, "col": cols},
|
|
109
|
+
attrs={
|
|
110
|
+
"x0": tiling_grid[0, 0, 0],
|
|
111
|
+
"y0": tiling_grid[0, 0, 2],
|
|
112
|
+
"dx": tiling_grid[0, 0, 3] - tiling_grid[0, 0, 2],
|
|
113
|
+
"dy": tiling_grid[0, 0, 1] - tiling_grid[0, 0, 0],
|
|
114
|
+
},
|
|
115
|
+
)
|
|
116
|
+
self.arrays.append(dataset)
|
|
117
|
+
|
|
118
|
+
# Create file name
|
|
119
|
+
application_name = cars_ds.name
|
|
120
|
+
file_name = None
|
|
121
|
+
if os.path.exists(self.folder):
|
|
122
|
+
file_name = os.path.join(self.folder, application_name)
|
|
123
|
+
|
|
124
|
+
self.file_names.append(file_name)
|
|
125
|
+
|
|
126
|
+
# Get index
|
|
127
|
+
index = self.cars_ds_ids.index(cars_ds_id)
|
|
128
|
+
|
|
129
|
+
# Get position
|
|
130
|
+
row, col = self.saver_registry.get_future_cars_dataset_position(
|
|
131
|
+
tile_object
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
# Fill corresponding array
|
|
135
|
+
self.arrays[index][COLOR].values[row, col, :] = COMPUTED
|
|
136
|
+
|
|
137
|
+
# Save
|
|
138
|
+
save_pickle(self.arrays[index], self.file_names[index])
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def save_pickle(dataset, file_name):
|
|
142
|
+
"""
|
|
143
|
+
Save pickle
|
|
144
|
+
"""
|
|
145
|
+
|
|
146
|
+
try:
|
|
147
|
+
if file_name is not None:
|
|
148
|
+
|
|
149
|
+
with open(file_name, "wb") as desc: # open a text file
|
|
150
|
+
pickle.dump(dataset, desc)
|
|
151
|
+
except FileNotFoundError:
|
|
152
|
+
logging.error("{} could not be opened".format(file_name))
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def load_pickle(file_name):
|
|
156
|
+
"""
|
|
157
|
+
Load pickle
|
|
158
|
+
"""
|
|
159
|
+
with open(file_name, "rb") as desc:
|
|
160
|
+
dataset = pickle.load(desc)
|
|
161
|
+
|
|
162
|
+
return dataset
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def main():
|
|
166
|
+
"""
|
|
167
|
+
Main
|
|
168
|
+
"""
|
|
169
|
+
|
|
170
|
+
parser = argparse.ArgumentParser(
|
|
171
|
+
"cars-dashboard",
|
|
172
|
+
description="Helper to monitor tiles progress",
|
|
173
|
+
)
|
|
174
|
+
parser.add_argument(
|
|
175
|
+
"-out",
|
|
176
|
+
type=str,
|
|
177
|
+
help="CARS output folder to monitor",
|
|
178
|
+
required=True,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
args = parser.parse_args()
|
|
182
|
+
cars_output = os.path.abspath(args.out)
|
|
183
|
+
|
|
184
|
+
try:
|
|
185
|
+
import plotly.graph_objects as go # pylint: disable=import-error,C0415
|
|
186
|
+
from dash import ( # pylint: disable=import-error, C0415
|
|
187
|
+
Dash,
|
|
188
|
+
Input,
|
|
189
|
+
Output,
|
|
190
|
+
callback,
|
|
191
|
+
dcc,
|
|
192
|
+
html,
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
except ModuleNotFoundError as exc:
|
|
196
|
+
message = "dash / plotly not found, install cars with dev packages"
|
|
197
|
+
logging.error(message)
|
|
198
|
+
raise RuntimeError(message) from exc
|
|
199
|
+
|
|
200
|
+
app = Dash(__name__, title="CARS tiles progress")
|
|
201
|
+
|
|
202
|
+
app.layout = html.Div(
|
|
203
|
+
children=[
|
|
204
|
+
html.H3(
|
|
205
|
+
"\n CARS output to monitor: {}".format(cars_output),
|
|
206
|
+
style={
|
|
207
|
+
"marginTop": "20px",
|
|
208
|
+
"marginBottom": "20px",
|
|
209
|
+
"textAlign": "center",
|
|
210
|
+
"color": "#01172E",
|
|
211
|
+
},
|
|
212
|
+
),
|
|
213
|
+
html.H1(
|
|
214
|
+
"\n \n OnGoing Tiles \n \n",
|
|
215
|
+
style={
|
|
216
|
+
"marginTop": "20px",
|
|
217
|
+
"marginBottom": "20px",
|
|
218
|
+
"textAlign": "center",
|
|
219
|
+
"color": "#01172E",
|
|
220
|
+
},
|
|
221
|
+
),
|
|
222
|
+
html.Div(
|
|
223
|
+
id="tiles-output",
|
|
224
|
+
style={
|
|
225
|
+
"marginTop": "20px",
|
|
226
|
+
"marginBottom": "20px",
|
|
227
|
+
"textAlign": "center",
|
|
228
|
+
"color": "#01172E",
|
|
229
|
+
},
|
|
230
|
+
),
|
|
231
|
+
dcc.Interval(
|
|
232
|
+
id="interval-component",
|
|
233
|
+
interval=2 * 1000, # in milliseconds
|
|
234
|
+
n_intervals=0,
|
|
235
|
+
),
|
|
236
|
+
]
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
@callback(
|
|
240
|
+
Output("tiles-output", "children"),
|
|
241
|
+
Input("interval-component", "n_intervals"),
|
|
242
|
+
)
|
|
243
|
+
def update_figures(__):
|
|
244
|
+
"""
|
|
245
|
+
Update figures
|
|
246
|
+
"""
|
|
247
|
+
|
|
248
|
+
tiles_folder = os.path.join(cars_output, "dump_dir", "tile_processing")
|
|
249
|
+
if not os.path.exists(tiles_folder):
|
|
250
|
+
return None
|
|
251
|
+
seen_paths = []
|
|
252
|
+
tiles = []
|
|
253
|
+
|
|
254
|
+
for name in os.listdir(tiles_folder):
|
|
255
|
+
current_path = os.path.join(tiles_folder, name)
|
|
256
|
+
if current_path not in seen_paths:
|
|
257
|
+
|
|
258
|
+
dataset = load_pickle(current_path)
|
|
259
|
+
|
|
260
|
+
tiles.append(html.H3(name))
|
|
261
|
+
fig = go.Figure(
|
|
262
|
+
data=go.Image(
|
|
263
|
+
x0=dataset.attrs["x0"] + dataset.attrs["dx"] / 2,
|
|
264
|
+
y0=dataset.attrs["y0"] + dataset.attrs["dy"] / 2,
|
|
265
|
+
dx=dataset.attrs["dx"],
|
|
266
|
+
dy=dataset.attrs["dy"],
|
|
267
|
+
z=dataset["color"].values,
|
|
268
|
+
)
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
tiles.append(dcc.Graph(figure=fig))
|
|
272
|
+
|
|
273
|
+
return html.Div(tiles)
|
|
274
|
+
|
|
275
|
+
app.run(debug=True)
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
if __name__ == "__main__":
|
|
279
|
+
main()
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
|
|
5
|
+
#
|
|
6
|
+
# This file is part of CARS
|
|
7
|
+
# (see https://github.com/CNES/cars).
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
"""
|
|
22
|
+
CARS pipelines module init file
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
# Imports needed in order to register pipeline for Pipeline factory
|
|
26
|
+
from . import default # noqa: F401
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
|
|
5
|
+
#
|
|
6
|
+
# This file is part of CARS
|
|
7
|
+
# (see https://github.com/CNES/cars).
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
"""
|
|
22
|
+
CARS default pipeline module init file
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
# Cars imports
|
|
26
|
+
from cars.pipelines.default import default_pipeline # noqa: F401
|