Problème de connexion BDUNI/BDTOPO - Optimisation des bâtiments
KlatbahII opened this issue · comments
Bonjour,
j'ai posté une issue #72 - Classification des toits plats sur Myria3D, et @CharlesGaydon m'a demandé d'ouvrir une issue sur lidar-prod
, ce que je fais ici.
J'ai prédit des dalles avec myria3d
et j'ai ensuite voulu essayer lidar-prod
pour améliorer les résultats de la classification.
En effet, comme précisé dans l'issue que j'ai créé sur le repo de Myria3D, il y avait un problème de toits plats classifié comme SOL.
En essayant de lancer lidar-prod
j'ai eu un problème au niveau des requêtes vers la BD UNI.
Voici le message d'erreur que j'ai obtenu en essayant de lancer la task optimize_building
.
je simplifie les PATH utilisés pour clarifier
docker run \
-v /path/inputs:/inputs/ \
-v /path/output:/outputs/ \
lidar_prod \
python lidar_prod/run.py \
++task=optimize_building \
building_validation.optimization.todo='prepare+optimize+evaluate+update' \
building_validation.optimization.paths.input_las_dir=/inputs/ \
building_validation.optimization.paths.results_output_dir=/outputs/
Voici le message d'erreur renvoyé ("subprocess.CalledProcessError: Command 'returned non-zero exit status 1"
)
Error executing job with overrides: ['++task=optimize_building', 'building_validation.optimization.todo=prepare+optimize+evaluate+update', 'building_validation.optimization.paths.input_las_dir=/inputs/', 'building_validation.optimization.paths.results_output_dir=/outputs/']
Traceback (most recent call last):
File "/lidar/lidar_prod/run.py", line 64, in main
optimize_building(config)
File "/lidar/lidar_prod/commons/commons.py", line 61, in timed
result = function(*args, **kwargs)
File "/lidar/lidar_prod/optimization.py", line 33, in optimize_building
bvo.run()
File "/lidar/lidar_prod/tasks/building_validation_optimization.py", line 84, in run
self.prepare()
File "/lidar/lidar_prod/tasks/building_validation_optimization.py", line 143, in prepare
self.bv.prepare(src_las_path, prepared_las_path, True)
File "/lidar/lidar_prod/tasks/building_validation.py", line 192, in prepare
buildings_in_bd_topo = request_bd_uni_for_building_shapefile(
File "/lidar/lidar_prod/tasks/utils.py", line 205, in request_bd_uni_for_building_shapefile
raise e
File "/lidar/lidar_prod/tasks/utils.py", line 192, in request_bd_uni_for_building_shapefile
subprocess.check_output(cmd, stderr=subprocess.STDOUT, timeout=120)
File "/opt/conda/envs/lidar_prod/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/opt/conda/envs/lidar_prod/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError:
Command '
[
'pgsql2shp',
'-f',
'/tmp/tmp0crat0nr/temp.shp',
'-h',
'serveurbdudiff.ign.fr',
'-u',
'invite',
'-P',
'28de#',
'bduni_france_consultation',
"SELECT
st_setsrid(batiment.geometrie,2154) AS geometry,
1 as presence FROM batiment
WHERE batiment.geometrie && ST_MakeEnvelope(1573200, 2268700, 1573550, 2269050, 2154)
AND not gcms_detruit
UNION SELECT st_setsrid(reservoir.geometrie,2154) AS geometry, 1 as presence
FROM reservoir
WHERE reservoir.geometrie && ST_MakeEnvelope(1573200, 2268700, 1573550, 2269050, 2154)
AND (reservoir.nature = 'Château d''eau' OR reservoir.nature = 'Réservoir industriel')
AND NOT gcms_detruit"]' returned non-zero exit status 1.
Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.
J'ai essayé d'accéder à cette base de données avec PgAdmin ou QGIS en utilisant les informations de connexion présentes dans le fichier de config Default Configuration dans la variable bd_uni_connection_params
et la connexion est impossible.
A la place j'ai utilisé un shapefile issu de la BD_TOPO en rajoutant un champ PRESENCE avec une valeur de 1, comme précisé dans le code.
Ce shapefile est situé dans le dossier inputs
qui contient également les .las.
J'ai lancé lidar-prod
depuis Docker avec cette ligne de commande(je simplifie les PATH utilisé pour clarifier ).
docker run \
-v /home/path/input:/inputs/ \
-v /home/path/outputs:/outputs/ \
lidar_prod \
python lidar_prod/run.py \
paths.src_las=/inputs \
building_validation.application.shp_path=/inputs \
paths.output_dir = /outputs/
Après cette première commande qui correspond à la tâche(task) apply_on_building
, les bâtiments sont regroupés dans un ScalarField appellé Group
mais la classification n'a pas été modifiée.
De plus le ScalarField qui contenait la classification/prédiction a été supprimé.
Voici l'affichage du ScalarField building
obtenu avec myria3d
.
Voici l'affichage du ScalarField PredictedClassification
, vu que j'ai vu qu'il y avait eu 2 noms différents(confidence
et PredictedClassification
pour le ScalarField qui contient les résultats de la classification de myria3d
), dans cet essai il s'appelle PredictedClassification
Et voici le ScalarField généré par lidar-prod
appellé Group. On obtient 26 groupes correspondants à 1 groupe par cluster de bâtiment.
En me basant sur cette image comprise dans la documentation de lidar-prod
, je pensais que lidar-prod
modifierait la classification et créerait seulement 2 groupes : 0 et 1.
.
Les résultats que l'on a obtenu sont-ils la dernière étape de lidar-prod
ou devait-on obtenir quelque chose de différent ?
Par rapport à mon issue sur myria3d
, peut on attendre une amélioration de la classification des bâtiments aux toits plats avec lidar-prod
?
Cf. ma réponse sous IGNF/myria3d#72 pour la deuxième partie de ta question sur l'usage et les sorties de lidar-prod. Je la cite par practicité :
Pour lidar-prod : les groupes créés correspondent au résultat de la partie Building Identification. Les autres tâches peuvent modifier une classification déjà existante du bâti. On appelle ça les "candidats bâti" (le code de classification est paramétrable dans la config ici) Typiquement une classification basée sur des règles qui aurait détecté les surfaces planes, etc. Et qu'on veut améliorer/corriger avec le modèle d'IA.
Les groupes que tu observes sont donc les bâtiments suggérés dans l'illustration :
Pour la partie de gauche il faut au préalable des "candidats bati", dont on souhaite qu'ils soient le plus exhaustifs possibles quitte à "surclassifier" (faux positifs).
Pour le reste (credentials & BDUni) je passe le relai à @leavauchier répondre. Il y a par ailleurs la PR #91 par @MichelDaab pour cacher les credentials (qui sont public mais se veulent discrets) de la BDUni.
Décision : pour l'instant n'est pas prioritaire. PR Bienvenues.