Aller au contenu
Table des matières

WearSurfacesDatasets

WearSurfacesDatasets publie les textures de surface capturées pendant des essais d’usure contrôlés, classées par matériau, grain abrasif, charge et distance de glissement. C’est le jeu de données public de la recherche de maîtrise à l’ÉTS sur l’usure dans l’espace texture, où il sert à comparer les motifs d’usure simulés à la microgéométrie mesurée. Il est publié sous ETSim pour les chercheurs en rendu et en tribologie qui ont besoin de vraies progressions d’usure.

Jeu de donnéesAPI
PythonParquetWebDatasetGit LFSOpenCVFastAPIWebGPU
  • Mis à jour

1. Aperçu

Chaque état mesuré correspond à une feuille Parquet :

data/parquet/<matériau>/<forme>/<direction>/S<grain>/<charge>g/<distance>mm/data.parquet

Par exemple data/parquet/Cartboard/Raw/Normal/S60/200g/800mm/data.parquet. Chaque ligne stocke une carte en octets JPEG dans image_data, étiquetée par map_type ; metadata.json liste les cartes d’occlusion ambiante, de bump, de déplacement, de hauteur, d’ombrage (hillshade) et de normales. Les mêmes enregistrements existent aussi en archives WebDataset, de data/shards/shard-0000.tar à shard-0839.tar.

data/parquet/sequences.json répertorie 20 chronologies d’usure : carton sous cinq charges (10 à 200 g, grain S60), mousse, MDF (trajets en cercle et en ligne), PLA à plusieurs grains en direction linéaire et non linéaire, bois tendre, et des références de papier abrasif non usé de S40 à S240.

Par-dessus les données, le dépôt ajoute trois couches d’outils :

  • generate_datasets.py, read_datasets.py et generate_metadata.py (CLI Typer) construisent le Parquet et les shards à partir d’un dossier wear/ de cartes PNG, les réextraient et écrivent les métadonnées par feuille et l’index.
  • alignment/ recale chaque séquence par une méthode SIFT/ECC en deux passes (align.py), recadre la zone valide commune, ajoute des points milieux Catmull-Rom dans le temps (interpolate.py) et extrapole les normal maps futures avec un modèle FFT et SLERP (extrapolate.py). bake.py enchaîne le tout pour une séquence ou pour toutes, et peut réempaqueter les résultats.
  • docs/index.html est une visionneuse de matériaux WebGPU qui lit le Parquet dans le navigateur avec parquet-wasm. docs/serve_local.py est un serveur FastAPI qui sert la visionneuse et les données et expose /api/datasets, /api/sequences et /api/align/sequence.

2. Cas d’utilisation

Séquences de cartes de surfaces usées (matériau, grain, charge, distance) avec outils Python et visionneuse WebGPU.

Diagramme de cas d’utilisation de WearSurfacesDatasets : Télécharger les séquences; Parcourir une usure; Aligner une séquence; Interpoler et extrapoler; Empaqueter Parquet et shards; Extraire les cartes en PNGWearSurfacesDatasetsTélécharger les séquencesParcourir une usureAligner une séquenceInterpoler et extrapolerEmpaqueter Parquet et shardsExtraire les cartes en PNGChercheur en rendu«système»Stockage Git LFS«système»Navigateur WebGPU
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
Télécharger les séquences
Chercheur en renduStockage Git LFS

Les feuilles Parquet et les shards WebDataset sont des objets Git LFS : git lfs pull remplace les pointeurs dans data/parquet et data/shards.

Parcourir une usure
Chercheur en renduNavigateur WebGPU

docs/serve_local.py sert docs/index.html, qui lit le Parquet avec parquet-wasm et affiche les cartes en WebGPU pendant qu'on fait défiler la distance ou qu'on lance la lecture.

Aligner une séquence
Chercheur en renduNavigateur WebGPU

POST /api/align/sequence lance un recalage SIFT/ECC en deux passes des normal maps sur la première image, recadre la zone commune et met les PNG en cache dans data/aligned.

Interpoler et extrapoler
Chercheur en rendu

python -m alignment.bake ajoute des points milieux Catmull-Rom et des normal maps extrapolées par FFT et SLERP après la dernière mesure.

Empaqueter Parquet et shards
Chercheur en rendu

generate_datasets.py parquet et webdataset transforment un arbre wear/ de cartes PNG en feuilles Parquet imbriquées et en fichiers shard-*.tar.

Extraire les cartes en PNG
Chercheur en rendu

read_datasets.py decompress et generate_datasets.py extract réécrivent en fichiers image les octets JPEG stockés par map_type.

2.1. Scénario : Examiner l'usure d'un carton sous 200 g

  1. Cloner le dépôt, lancer git lfs pull et pip install -r requirements.txt.
  2. Démarrer python docs/serve_local.py et ouvrir http://127.0.0.1:8080/docs/index.html.
  3. Choisir Cartboard / Raw / Normal · S60 · 200 g et cliquer sur Load sequence.
  4. Cliquer sur Align sequence, puis faire défiler la distance de 0 mm à 2400 mm ou lancer Play.
  5. Lancer python -m alignment.bake --sequence-id cartboard-raw-normal-s60-200g --pack pour ajouter les étapes interpolées et extrapolées.

Fichiers consultésREADME.md.gitattributesrequirements.txtmetadata.jsondata/parquet/README.mddata/parquet/sequences.jsondocs/README.mddocs/index.htmldocs/serve_local.pyalignment/align.pyalignment/pipeline.pyalignment/bake.pyalignment/interpolate.pyalignment/extrapolate.pygenerate_datasets.pyread_datasets.py

3. Démarrage

D’après le README :

git clone https://github.com/ETSim/WearSurfacesDatasets
cd WearSurfacesDatasets
git lfs pull
pip install -r requirements.txt
python docs/serve_local.py
# ouvrir http://127.0.0.1:8080/docs/index.html

Dans la visionneuse, on choisit une séquence, on clique sur Load sequence, au besoin sur Align sequence, puis on fait défiler la distance ou on lance Play. Pour calculer les étapes interpolées et extrapolées :

python -m alignment.bake --sequence-id cartboard-raw-normal-s60-200g --pack
python -m alignment.bake --all --pack

Pour reconstruire le jeu de données à partir des PNG ou extraire les images :

python generate_datasets.py parquet --input-dir wear --output-dir data/parquet
python generate_datasets.py webdataset --input-dir wear --output-dir data/shards
python read_datasets.py decompress --shards-dir data/shards --output-dir data/images --workers 4

4. Guide du dépôt

  • data/parquet/ : feuilles Parquet, sequences.json et metadata.parquet.
  • data/shards/ : shards WebDataset .tar.
  • metadata.json : matériaux, grains, charges, distances, montage de capture et types de cartes.
  • alignment/ : recalage, déformation, interpolation, extrapolation, calcul et empaquetage.
  • docs/index.html, docs/serve_local.py et docs/serve_app.py : la visionneuse et ses serveurs locaux. docs/prepare_viewer_parquets.py reconstruit sequences.json.
  • docs/package/ : la version de parquet-wasm embarquée pour la visionneuse.
  • examples/Wear/powerpoint/ : une présentation PowerPoint par série d’essais (carton, mousse, MDF, PLA, papier abrasif, bois tendre).

5. Fonctionnalités

  • Séquences d’usure indexées par matériau, forme du trajet, direction, grain, charge et distance de glissement.
  • Deux formats de stockage : Parquet imbriqué pour la consultation et shards WebDataset pour la lecture en flux.
  • Visionneuse dans le navigateur avec défilement de la distance, lecture et préchargement des étapes voisines.
  • Alignement SIFT/ECC côté serveur, avec résultats en cache et téléchargement d’un atlas à plat.
  • Interpolation Catmull-Rom et extrapolation FFT et SLERP des normal maps.
  • Outils en ligne de commande pour reconstruire, extraire et décrire le jeu de données.

6. Limites

  • Les fichiers Parquet et les shards sont des objets Git LFS : un simple clone ne contient que des pointeurs tant que git lfs pull n’a pas été lancé.
  • L’arbre PNG source wear/ utilisé par generate_datasets.py n’est pas dans le dépôt, et data/aligned/ et data/wear_extrapolated/ sont ignorés par Git.
  • Le README et metadata.json citent Alu et Resin, mais le sequences.json versionné ne contient aucune séquence Alu ni Resin.
  • Les images extrapolées sont produites par un modèle, ce ne sont pas des mesures.
  • Plusieurs séquences sont courtes (deux étapes pour certaines séries PLA et MDF), et un dossier de mousse s’appelle 4000000mm.
  • docs/README.md et metadata.json donnent des valeurs de capture différentes (résolution, nombre de DEL, température) ; mieux vaut les lire comme descriptives.
  • Sur un hébergement statique, la visionneuse charge toujours les images, mais l’alignement est désactivé parce qu’il exige le serveur Python.
  • Aucun test automatisé.

7. Sources

8. Pipeline CI/CD

Aucun pipeline CI/CD dans le dépôt. Le code se construit et se lance à la main, comme décrit plus haut.

Généré à partir du code au commit 6841dff.

9. Schéma de déploiement

Mermaid Schéma de déploiement
flowchart LR
  repo[("Dépôt GitHub")]
  local["Poste local<br/>Python"]
  repo -->|"cloner et lancer"| local

Le dépôt ne contient ni Dockerfile, ni fichier Compose, ni configuration d’hébergement : le code s’exécute sur le poste qui le clone.

10. Dépendances externes

10 paquets déclarés (10 à l’exécution, 0 pour le développement) dans requirements.txt.

Tableau des paquets 10
Dépendances externes
PaquetVersionUsageRôleRegistre
pandas—exécutionAnalyse de donnéespypi.org
pyarrow—exécutionAnalyse de donnéespypi.org
numpy—exécutionAnalyse de donnéespypi.org
pillow—exécutionGraphisme, image et 3Dpypi.org
matplotlib—exécutionGraphiquespypi.org
rich—exécutionLigne de commandepypi.org
typer—exécutionLigne de commandepypi.org
fastapi—exécutionCadriciel webpypi.org
uvicorn—exécutionServeur d’applicationpypi.org
opencv-python-headless—exécutionGraphisme, image et 3Dpypi.org

11. Glossaire

Dépôt

Les fichiers source, la configuration et l’historique versionné d’un projet.

README

Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.

Dépendance

Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.

API

Une interface par laquelle des composants logiciels échangent des requêtes et des résultats. Une API n’utilise pas nécessairement HTTP.

HTTP

Un protocole de requête et réponse utilisé par les navigateurs et services web. Une requête comprend une méthode, un chemin, des en-têtes et parfois un corps.

Volume et montage de dossier

Un volume est un stockage géré par la plateforme de conteneurs ; un montage de dossier expose un chemin de l’hôte dans un conteneur.

Interface en ligne de commande

Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.

GPU

Un processeur conçu pour les calculs parallèles, dont le rendu graphique et de nombreuses opérations numériques.

Maillage

Une surface représentée par des sommets et des éléments reliés, souvent des triangles. Sa géométrie est distincte de son matériau ou de sa texture.

Backend

Une implémentation derrière une interface commune. Selon le contexte, il peut s’agir d’un service côté serveur ou d’une implémentation graphique, d’entrée ou de stockage.

12. Références

  1. ETSim. (2026, 5 novembre). [Web page] github.com.
  2. ETSim. (2026, 5 novembre). WearSurfacesDatasets. [Software repository] github.com.
  3. ETSim. (2026, 5 novembre). README. [Source file or documentation] github.com.
  4. ETSim. (2026, 5 novembre). data/parquet/sequences.json. [Source file or documentation] github.com.
  5. ETSim. (2026, 5 novembre). alignment/align.py. [Source file or documentation] github.com.
  6. ETSim. (2026, 5 novembre). alignment/extrapolate.py. [Source file or documentation] github.com.
  7. ETSim. (2026, 5 novembre). docs/serve_local.py. [Source file or documentation] github.com.

Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.