cars 1.0.0rc1__cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.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 +74 -0
- cars/applications/__init__.py +37 -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 +104 -0
- cars/applications/auxiliary_filling/auxiliary_filling_algo.py +475 -0
- cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +630 -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 +655 -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 +1460 -0
- cars/applications/dense_matching/cpp/__init__.py +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.cpython-312-i386-linux-gnu.so +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.py +94 -0
- cars/applications/dense_matching/cpp/includes/dense_matching.hpp +58 -0
- cars/applications/dense_matching/cpp/meson.build +9 -0
- cars/applications/dense_matching/cpp/src/bindings.cpp +13 -0
- cars/applications/dense_matching/cpp/src/dense_matching.cpp +207 -0
- cars/applications/dense_matching/dense_matching_algo.py +401 -0
- cars/applications/dense_matching/dense_matching_constants.py +89 -0
- cars/applications/dense_matching/dense_matching_wrappers.py +951 -0
- cars/applications/dense_matching/disparity_grid_algo.py +588 -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 +270 -0
- cars/applications/dsm_filling/bulldozer_config/base_config.yaml +44 -0
- cars/applications/dsm_filling/bulldozer_filling_app.py +279 -0
- cars/applications/dsm_filling/exogenous_filling_app.py +333 -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_correction_app.py +496 -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 +527 -0
- cars/applications/point_cloud_outlier_removal/statistical_app.py +531 -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 +634 -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 +762 -0
- cars/applications/resampling/resampling_algo.py +614 -0
- cars/applications/resampling/resampling_constants.py +36 -0
- cars/applications/resampling/resampling_wrappers.py +309 -0
- cars/applications/sparse_matching/__init__.py +30 -0
- cars/applications/sparse_matching/abstract_sparse_matching_app.py +498 -0
- cars/applications/sparse_matching/sift_app.py +735 -0
- cars/applications/sparse_matching/sparse_matching_algo.py +360 -0
- cars/applications/sparse_matching/sparse_matching_constants.py +68 -0
- cars/applications/sparse_matching/sparse_matching_wrappers.py +238 -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 +757 -0
- cars/cars.py +177 -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 +1541 -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 +244 -0
- cars/orchestrator/cluster/abstract_dask_cluster.py +375 -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 +1075 -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 +873 -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/orchestrator.py +905 -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 +2 -0
- cars/pipelines/conf_resolution/conf_intermediate_resolution.yaml +2 -0
- cars/pipelines/default/__init__.py +26 -0
- cars/pipelines/default/default_pipeline.py +786 -0
- cars/pipelines/parameters/__init__.py +0 -0
- cars/pipelines/parameters/advanced_parameters.py +417 -0
- cars/pipelines/parameters/advanced_parameters_constants.py +69 -0
- cars/pipelines/parameters/application_parameters.py +71 -0
- cars/pipelines/parameters/depth_map_inputs.py +0 -0
- cars/pipelines/parameters/dsm_inputs.py +918 -0
- cars/pipelines/parameters/dsm_inputs_constants.py +25 -0
- cars/pipelines/parameters/output_constants.py +52 -0
- cars/pipelines/parameters/output_parameters.py +454 -0
- cars/pipelines/parameters/sensor_inputs.py +842 -0
- cars/pipelines/parameters/sensor_inputs_constants.py +49 -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 +31 -0
- cars/pipelines/pipeline_template.py +139 -0
- cars/pipelines/unit/__init__.py +26 -0
- cars/pipelines/unit/unit_pipeline.py +2850 -0
- cars/starter.py +167 -0
- cars-1.0.0rc1.dist-info/METADATA +292 -0
- cars-1.0.0rc1.dist-info/RECORD +200 -0
- cars-1.0.0rc1.dist-info/WHEEL +6 -0
- cars-1.0.0rc1.dist-info/entry_points.txt +8 -0
cars/starter.py
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
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-starter: helper to create configuration file
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
# pylint: disable=import-outside-toplevel
|
|
26
|
+
# standard imports
|
|
27
|
+
import argparse
|
|
28
|
+
import json
|
|
29
|
+
import os
|
|
30
|
+
|
|
31
|
+
import yaml
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def inputfilename_to_sensor(inputfilename):
|
|
35
|
+
"""
|
|
36
|
+
Fill sensor dictionary according to an input filename
|
|
37
|
+
"""
|
|
38
|
+
sensor = {}
|
|
39
|
+
|
|
40
|
+
absfilename = os.path.abspath(inputfilename)
|
|
41
|
+
dirname = os.path.dirname(absfilename)
|
|
42
|
+
basename = os.path.basename(absfilename)
|
|
43
|
+
|
|
44
|
+
if basename.startswith("DIM") and basename.endswith("XML"):
|
|
45
|
+
geomodel = os.path.join(dirname, "RPC" + basename[3:])
|
|
46
|
+
if os.path.exists(geomodel) is False:
|
|
47
|
+
geomodel = None
|
|
48
|
+
|
|
49
|
+
elif basename.endswith(".tif"):
|
|
50
|
+
geomodel = os.path.splitext(absfilename)[0] + ".geom"
|
|
51
|
+
if os.path.exists(geomodel) is False:
|
|
52
|
+
geomodel = None
|
|
53
|
+
else:
|
|
54
|
+
raise ValueError(absfilename + " not supported")
|
|
55
|
+
|
|
56
|
+
sensor["image"] = absfilename
|
|
57
|
+
if geomodel is not None:
|
|
58
|
+
sensor["geomodel"] = geomodel
|
|
59
|
+
|
|
60
|
+
return sensor
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def cars_starter(cli_params: dict = None, **kwargs) -> None:
|
|
64
|
+
"""
|
|
65
|
+
Main fonction. Expects a dictionary from the CLI (cli_params)
|
|
66
|
+
or directly the input parameters.
|
|
67
|
+
"""
|
|
68
|
+
if cli_params and isinstance(cli_params, dict):
|
|
69
|
+
config = cli_params
|
|
70
|
+
else:
|
|
71
|
+
params_name = set(kwargs.keys())
|
|
72
|
+
required_params = {"il", "out"}
|
|
73
|
+
missing_params = required_params - params_name
|
|
74
|
+
if len(missing_params) > 0:
|
|
75
|
+
raise ValueError(
|
|
76
|
+
"The following parameters are required: {}".format(
|
|
77
|
+
", ".join(list(missing_params))
|
|
78
|
+
)
|
|
79
|
+
)
|
|
80
|
+
config = kwargs
|
|
81
|
+
|
|
82
|
+
cars_config = {"input": {"sensors": {}}, "output": {}}
|
|
83
|
+
pipeline_name = "default"
|
|
84
|
+
|
|
85
|
+
for idx, inputfilename in enumerate(config["il"]):
|
|
86
|
+
cars_config["input"]["sensors"][str(idx)] = inputfilename_to_sensor(
|
|
87
|
+
inputfilename
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
# pairing with first image as reference
|
|
91
|
+
pairing = list(
|
|
92
|
+
zip( # noqa: B905
|
|
93
|
+
["0"] * (len(config["il"]) - 1),
|
|
94
|
+
map(str, range(1, len(config["il"]))),
|
|
95
|
+
)
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
cars_config["input"]["pairing"] = pairing
|
|
99
|
+
cars_config["output"]["directory"] = config["out"]
|
|
100
|
+
|
|
101
|
+
check = config["check"] if "check" in config.keys() else False
|
|
102
|
+
full = config["full"] if "full" in config.keys() else False
|
|
103
|
+
|
|
104
|
+
if check or full:
|
|
105
|
+
# cars imports
|
|
106
|
+
from cars.pipelines.pipeline import Pipeline
|
|
107
|
+
|
|
108
|
+
used_pipeline = Pipeline(pipeline_name, cars_config, None)
|
|
109
|
+
if full:
|
|
110
|
+
cars_config = used_pipeline.used_conf
|
|
111
|
+
|
|
112
|
+
# output format handling
|
|
113
|
+
output_format = config.get("format", "yaml")
|
|
114
|
+
if output_format == "yaml":
|
|
115
|
+
print(yaml.safe_dump(cars_config, sort_keys=False))
|
|
116
|
+
elif output_format == "json":
|
|
117
|
+
print(json.dumps(cars_config, indent=2))
|
|
118
|
+
else:
|
|
119
|
+
raise ValueError(
|
|
120
|
+
"Invalid format: {}. Use 'json' or 'yaml'.".format(output_format)
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def cli():
|
|
125
|
+
"""
|
|
126
|
+
Main cars-starter entrypoint (Command Line Interface)
|
|
127
|
+
"""
|
|
128
|
+
parser = argparse.ArgumentParser(
|
|
129
|
+
"cars-starter", description="Helper to create configuration file"
|
|
130
|
+
)
|
|
131
|
+
parser.add_argument(
|
|
132
|
+
"-il",
|
|
133
|
+
type=str,
|
|
134
|
+
nargs="*",
|
|
135
|
+
metavar="input.{tif,XML}",
|
|
136
|
+
help="Input sensor list",
|
|
137
|
+
required=True,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
parser.add_argument(
|
|
141
|
+
"-out",
|
|
142
|
+
type=str,
|
|
143
|
+
metavar="out_dir",
|
|
144
|
+
help="Output directory",
|
|
145
|
+
required=True,
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
parser.add_argument(
|
|
149
|
+
"--full", action="store_true", help="Fill all default values"
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
parser.add_argument("--check", action="store_true", help="Check input")
|
|
153
|
+
|
|
154
|
+
parser.add_argument(
|
|
155
|
+
"--format",
|
|
156
|
+
type=str,
|
|
157
|
+
default="yaml",
|
|
158
|
+
choices=["json", "yaml"],
|
|
159
|
+
help="Output format (json or yaml). Default: yaml",
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
args = parser.parse_args()
|
|
163
|
+
cars_starter(vars(args))
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
if __name__ == "__main__":
|
|
167
|
+
cli()
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: cars
|
|
3
|
+
Version: 1.0.0rc1
|
|
4
|
+
Summary: A satellite multi view stereo pipeline
|
|
5
|
+
Keywords: cars,3D,DEM,pandora,photogrammetry
|
|
6
|
+
Author-Email: CNES <cars@cnes.fr>
|
|
7
|
+
Classifier: Development Status :: 4 - Beta
|
|
8
|
+
Classifier: Intended Audience :: Developers
|
|
9
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
13
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Project-URL: Documentation, https://cars.readthedocs.io/en/latest/
|
|
18
|
+
Project-URL: Repository, https://github.com/CNES/cars
|
|
19
|
+
Requires-Python: >=3.9
|
|
20
|
+
Requires-Dist: numpy>=1.17.0
|
|
21
|
+
Requires-Dist: scipy!=1.10.0,>=1.7.1
|
|
22
|
+
Requires-Dist: matplotlib
|
|
23
|
+
Requires-Dist: affine
|
|
24
|
+
Requires-Dist: rasterio>=1.3.0
|
|
25
|
+
Requires-Dist: dask>=2021.10.0
|
|
26
|
+
Requires-Dist: distributed>=2021.10.0
|
|
27
|
+
Requires-Dist: dask-jobqueue>=0.7.3
|
|
28
|
+
Requires-Dist: json-checker
|
|
29
|
+
Requires-Dist: pyyaml
|
|
30
|
+
Requires-Dist: xarray
|
|
31
|
+
Requires-Dist: tqdm
|
|
32
|
+
Requires-Dist: netCDF4>=1.5.3
|
|
33
|
+
Requires-Dist: Shapely
|
|
34
|
+
Requires-Dist: Fiona
|
|
35
|
+
Requires-Dist: pyproj
|
|
36
|
+
Requires-Dist: utm
|
|
37
|
+
Requires-Dist: pandas
|
|
38
|
+
Requires-Dist: urllib3<2.0,>=1.21.1
|
|
39
|
+
Requires-Dist: laspy[laszip]
|
|
40
|
+
Requires-Dist: tbb==2020.3.254
|
|
41
|
+
Requires-Dist: numba
|
|
42
|
+
Requires-Dist: pandora[sgm]==1.7.2
|
|
43
|
+
Requires-Dist: cars-rasterize==0.2.*
|
|
44
|
+
Requires-Dist: cars-resample==0.1.*
|
|
45
|
+
Requires-Dist: cars-filter==0.2.*
|
|
46
|
+
Requires-Dist: vlsift==0.1.*
|
|
47
|
+
Requires-Dist: shareloc==0.2.11
|
|
48
|
+
Requires-Dist: bulldozer-dtm==1.1.*
|
|
49
|
+
Requires-Dist: xdem==0.1.*
|
|
50
|
+
Requires-Dist: geopandas<=1.0.1
|
|
51
|
+
Provides-Extra: dev
|
|
52
|
+
Requires-Dist: pytest; extra == "dev"
|
|
53
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
54
|
+
Requires-Dist: pytest-check; extra == "dev"
|
|
55
|
+
Requires-Dist: pre-commit; extra == "dev"
|
|
56
|
+
Requires-Dist: isort>=5.8.0; extra == "dev"
|
|
57
|
+
Requires-Dist: black>=24.1a1; extra == "dev"
|
|
58
|
+
Requires-Dist: flake8>=3.9.1; extra == "dev"
|
|
59
|
+
Requires-Dist: flake8-pyproject; extra == "dev"
|
|
60
|
+
Requires-Dist: flake8-comprehensions>=3.4.0; extra == "dev"
|
|
61
|
+
Requires-Dist: flake8-bugbear<24.0.0,>=21.4.3; extra == "dev"
|
|
62
|
+
Requires-Dist: jupyter_contrib_nbextensions; extra == "dev"
|
|
63
|
+
Requires-Dist: pylint<4.0.0,>=2.8.12; extra == "dev"
|
|
64
|
+
Requires-Dist: setuptools_scm; extra == "dev"
|
|
65
|
+
Requires-Dist: virtualenv; extra == "dev"
|
|
66
|
+
Requires-Dist: configupdater; extra == "dev"
|
|
67
|
+
Requires-Dist: twine; extra == "dev"
|
|
68
|
+
Requires-Dist: notebook<7.0.0; extra == "dev"
|
|
69
|
+
Requires-Dist: bokeh==2.4.3; extra == "dev"
|
|
70
|
+
Requires-Dist: sphinx; extra == "dev"
|
|
71
|
+
Requires-Dist: sphinx-rtd-theme; extra == "dev"
|
|
72
|
+
Requires-Dist: graphviz; extra == "dev"
|
|
73
|
+
Requires-Dist: memory_profiler; extra == "dev"
|
|
74
|
+
Requires-Dist: memray; extra == "dev"
|
|
75
|
+
Requires-Dist: dash; extra == "dev"
|
|
76
|
+
Requires-Dist: plotly; extra == "dev"
|
|
77
|
+
Requires-Dist: build; extra == "dev"
|
|
78
|
+
Provides-Extra: docs
|
|
79
|
+
Requires-Dist: astroid<4.0.0; extra == "docs"
|
|
80
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
81
|
+
Requires-Dist: sphinx-rtd-theme; extra == "docs"
|
|
82
|
+
Requires-Dist: sphinx_autoapi; extra == "docs"
|
|
83
|
+
Requires-Dist: graphviz; extra == "docs"
|
|
84
|
+
Requires-Dist: sphinx_tabs; extra == "docs"
|
|
85
|
+
Requires-Dist: sphinx-copybutton; extra == "docs"
|
|
86
|
+
Provides-Extra: notebook
|
|
87
|
+
Requires-Dist: notebook; extra == "notebook"
|
|
88
|
+
Requires-Dist: bokeh; extra == "notebook"
|
|
89
|
+
Requires-Dist: rise; extra == "notebook"
|
|
90
|
+
Provides-Extra: pandora-mccnn
|
|
91
|
+
Requires-Dist: pandora_plugin_mccnn==1.3.5; extra == "pandora-mccnn"
|
|
92
|
+
Provides-Extra: bundleadjustment
|
|
93
|
+
Requires-Dist: rpcfit; extra == "bundleadjustment"
|
|
94
|
+
Description-Content-Type: text/markdown
|
|
95
|
+
|
|
96
|
+
<div align="center">
|
|
97
|
+
<a target="_blank" href="https://github.com/CNES/cars">
|
|
98
|
+
<picture>
|
|
99
|
+
<img
|
|
100
|
+
src="https://raw.githubusercontent.com/CNES/cars/master/docs/source/images/cars_picto.svg"
|
|
101
|
+
alt="CARS"
|
|
102
|
+
width="50%"
|
|
103
|
+
/>
|
|
104
|
+
</picture>
|
|
105
|
+
</a>
|
|
106
|
+
|
|
107
|
+
<h4>CARS, a satellite multi view stereo framework </h4>
|
|
108
|
+
|
|
109
|
+
[](https://www.python.org/downloads/release/python-390/)
|
|
110
|
+
[](CONTRIBUTING.md)
|
|
111
|
+
[](https://opensource.org/licenses/Apache-2.0/)
|
|
112
|
+
[](https://cars.readthedocs.io/?badge=latest)
|
|
113
|
+
[](https://github.com/CNES/cars/actions)
|
|
114
|
+
[](https://pypi.org/project/cars/)
|
|
115
|
+
[](https://hub.docker.com/r/cnes/cars)
|
|
116
|
+
[](https://doi.org/10.5281/zenodo.17406459)
|
|
117
|
+
|
|
118
|
+
<p>
|
|
119
|
+
<a href="#overview">Overview</a> •
|
|
120
|
+
<a href="#quick-start">Quick Start</a> •
|
|
121
|
+
<a href="#documentation">Documentation</a> •
|
|
122
|
+
<a href="#license">License</a> •
|
|
123
|
+
<a href="#contribution">Contribution</a> •
|
|
124
|
+
<a href="#help">Help</a> •
|
|
125
|
+
<a href="#credits">Credits</a> •
|
|
126
|
+
<a href="#contact">Contact</a> •
|
|
127
|
+
<a href="#references">References</a>
|
|
128
|
+
</p>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
# 🌐 **Overview**
|
|
132
|
+
|
|
133
|
+
<div align="center">
|
|
134
|
+
<table style="display: inline-block;">
|
|
135
|
+
<tr>
|
|
136
|
+
<td align="center">
|
|
137
|
+
<div style="font-size:2em; margin-bottom:10px;"><strong>🎞️ From Stereo Images</strong></div><br>
|
|
138
|
+
<img src="https://raw.githubusercontent.com/CNES/cars/master/docs/source/images/animation_sat.gif"
|
|
139
|
+
alt="Stereo images animation" width="95%"><br>
|
|
140
|
+
<em>Input stereo image pairs</em>
|
|
141
|
+
</td>
|
|
142
|
+
<td align="center">
|
|
143
|
+
<div style="font-size:2em; margin-bottom:10px;"><strong>🌍 To Digital Surface Model (DSM)</strong></div><br>
|
|
144
|
+
<img src="https://raw.githubusercontent.com/CNES/cars/master/docs/source/images/overview_dsm_3d.gif"
|
|
145
|
+
alt="DSM overview" width="95%"><br>
|
|
146
|
+
<em>Output 3D surface reconstruction</em>
|
|
147
|
+
</td>
|
|
148
|
+
</tr>
|
|
149
|
+
</table>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
**CARS** is an open source 3D tool dedicated to produce **Digital Surface Models** from satellite imaging by photogrammetry.
|
|
153
|
+
This Multiview Stereo framework is intended for massive DSM production with a robust, performant and modular design.
|
|
154
|
+
|
|
155
|
+
**CARS** is currently under active development and integrated into various projects & missions:
|
|
156
|
+
|
|
157
|
+
<div align="center">
|
|
158
|
+
<p align="center">
|
|
159
|
+
<a href="https://co3d.cnes.fr/en/co3d-0" target="_blank">
|
|
160
|
+
<img src="https://raw.githubusercontent.com/CNES/cars/master/docs/source/images/logo_co3D_cnes.png"
|
|
161
|
+
alt="CO3D project" height="70">
|
|
162
|
+
</a>
|
|
163
|
+
|
|
164
|
+
<a href="https://www.ai4geo.eu" target="_blank">
|
|
165
|
+
<img src="https://raw.githubusercontent.com/CNES/cars/master/docs/source/images/logo-ai4geo.png"
|
|
166
|
+
alt="AI4GEO project" height="75">
|
|
167
|
+
</a>
|
|
168
|
+
|
|
169
|
+
<a href="https://www.evo-land.eu" target="_blank">
|
|
170
|
+
<img src="https://raw.githubusercontent.com/CNES/cars/master/docs/source/images/logo-evoland.png"
|
|
171
|
+
alt="Evoland project" height="60">
|
|
172
|
+
</a>
|
|
173
|
+
</p>
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
<br>
|
|
177
|
+
|
|
178
|
+
Its roadmap and implemented functionalities are evolving regularly depending on specific project requirements.
|
|
179
|
+
|
|
180
|
+
# 🚀 **Quick start**
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
### △ On the way to the Pyramids...
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
You want to build the pyramids by yourself?
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
<div align="center">
|
|
190
|
+
<table style="display: inline-block;">
|
|
191
|
+
<tr>
|
|
192
|
+
<td align="center">
|
|
193
|
+
<img src="https://raw.githubusercontent.com/CNES/cars/master/docs/source/images/dsm.png"
|
|
194
|
+
alt="Dsm" width="400"><br>
|
|
195
|
+
</td>
|
|
196
|
+
<td align="center">
|
|
197
|
+
<img src="https://raw.githubusercontent.com/CNES/cars/master/docs/source/images/clr.png"
|
|
198
|
+
alt="Color" width="400"><br>
|
|
199
|
+
</td>
|
|
200
|
+
<td align="center">
|
|
201
|
+
<img src="https://raw.githubusercontent.com/CNES/cars/master/docs/source/images/dsm_clr.png"
|
|
202
|
+
alt="Color" width="400"><br>
|
|
203
|
+
</td>
|
|
204
|
+
</tr>
|
|
205
|
+
</table>
|
|
206
|
+
</div>
|
|
207
|
+
|
|
208
|
+
Download our [open licence](https://www.etalab.gouv.fr/licence-ouverte-open-licence) Pleiades [data sample](https://raw.githubusercontent.com/CNES/cars/master/tutorials/data_gizeh.tar.bz2) to give CARS a try!
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
### 🐋 with Docker
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
#### 🛠 Installation
|
|
215
|
+
|
|
216
|
+
CARS is available on Docker Hub and can be downloaded by:
|
|
217
|
+
``` bash
|
|
218
|
+
docker pull cnes/cars
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
#### ⚙ Run CARS
|
|
222
|
+
|
|
223
|
+
You only need to launch one command:
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
docker run -w /data -v "$(pwd)"/data_gizeh:/data cnes/cars /data/configfile.yaml
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 🐍 with pip
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
#### 🛠 Installation
|
|
233
|
+
|
|
234
|
+
CARS can also be downloaded using the pip install command:
|
|
235
|
+
|
|
236
|
+
``` bash
|
|
237
|
+
pip install cars
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
#### ⚙ Run CARS
|
|
241
|
+
|
|
242
|
+
Once you moved to the data_gizeh directory:
|
|
243
|
+
|
|
244
|
+
``` bash
|
|
245
|
+
cars configfile.yaml
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
# 📚 **Documentation**
|
|
249
|
+
|
|
250
|
+
Go to [CARS Main Documentation](https://cars.readthedocs.io/?badge=latest).
|
|
251
|
+
|
|
252
|
+
# 📜 **License**
|
|
253
|
+
|
|
254
|
+
CARS is licensed under [Apache License v2.0](https://www.apache.org/licenses/LICENSE-2.0). Please refer to the [LICENSE](https://gitlab.cnes.fr/dali/cars-park/cars/-/blob/1214-mise-a-jour-du-readme-pour-la-nouvelle-version-1-0-0/LICENSE) file for more details.
|
|
255
|
+
|
|
256
|
+
# 🤝 **Contribution**
|
|
257
|
+
|
|
258
|
+
To do a contribution, see the [Contribution Guide](https://github.com/CNES/cars/blob/master/CONTRIBUTING.md). For project evolution, see [Changelog](https://github.com/CNES/cars/blob/master/CHANGELOG.md).
|
|
259
|
+
|
|
260
|
+
# 🆘 **Help**
|
|
261
|
+
|
|
262
|
+
For issues, questions, or feature requests, please open an issue on our [GitHub Issues](https://github.com/CNES/cars/issues) page or check the [documentation](https://cars.readthedocs.io/en/stable/index.html) for additional resources.
|
|
263
|
+
|
|
264
|
+
You can also ask your questions on the corresponding [slack](https://join.slack.com/t/cars-community/shared_invite/zt-2uw6usog1-~TT~m8BxO9faMXpP7tpz2Q).
|
|
265
|
+
|
|
266
|
+
# ✒️ **Credits**
|
|
267
|
+
|
|
268
|
+
If you use CARS in your research, please cite the following paper:
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
@INPROCEEDINGS{9324020,
|
|
272
|
+
author={Youssefi, David and Michel, Julien and Sarrazin, Emmanuelle and Buffe, Fabrice and Cournet, Myriam and Delvit, Jean-Marc and L'Helguen, Céline and Melet, Olivier and Emilien, Aurélie and Bosman, Julien},
|
|
273
|
+
booktitle={IGARSS 2020 - 2020 IEEE International Geoscience and Remote Sensing Symposium},
|
|
274
|
+
title={CARS: A Photogrammetry Pipeline Using Dask Graphs to Construct A Global 3D Model},
|
|
275
|
+
year={2020},
|
|
276
|
+
volume={},
|
|
277
|
+
number={},
|
|
278
|
+
pages={453-456},
|
|
279
|
+
keywords={Automobiles;Geometry;Three-dimensional displays;Computational modeling;Estimation;Stereo image processing;Task analysis;Image processing;Photogrammetry;Stereovision;Digital Surface Model;High Performance Computing;Cloud Computing;Dask},
|
|
280
|
+
doi={10.1109/IGARSS39084.2020.9324020}}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
See [Authors file](https://github.com/CNES/cars/blob/master/AUTHORS.md)
|
|
284
|
+
|
|
285
|
+
# ✉️ **Contact**
|
|
286
|
+
|
|
287
|
+
You can contact us on the following mail adress: cars@cnes.fr
|
|
288
|
+
|
|
289
|
+
# 🔗 **References**
|
|
290
|
+
|
|
291
|
+
- [Youssefi D., Michel, J., Sarrazin, E., Buffe, F., Cournet, M., Delvit, J., L’Helguen, C., Melet, O., Emilien, A., Bosman, J., 2020. Cars: A photogrammetry pipeline using dask graphs to construct a global 3d model. IGARSS - IEEE International Geoscience and Remote Sensing Symposium.](https://ieeexplore.ieee.org/document/9324020)
|
|
292
|
+
- [Michel, J., Sarrazin, E., Youssefi, D., Cournet, M., Buffe, F., Delvit, J., Emilien, A., Bosman, J., Melet, O., L’Helguen, C., 2020. A new satellite imagery stereo pipeline designed for scalability, robustness and performance. ISPRS - International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences.](https://www.isprs-ann-photogramm-remote-sens-spatial-inf-sci.net/V-2-2020/171/2020/)
|