Table des matières
TrueMapData
TrueMapData est une bibliothèque Python et une CLI tmd-process pour les cartes de hauteur TrueMap et GelSight, maintenue sous ETSim. Elle lit les captures de surface comme des tableaux NumPy et fournit analyse et export graphique. Les faits ci-dessous viennent du README et des guides du dépôt, lus pour l’article associé.
1. Aperçu
Pourquoi il existe. Une même représentation de surface qui sert à la métrologie et aux ressources graphiques comme les cartes de déplacement ou les maillages.
Cas d’usage. Inspecter des surfaces mesurées, comparer des captures dans le temps (usure) et exporter cartes de normales, cartes de déplacement ou maillages en conservant l’échelle physique.
2. Cas d’utilisation
Bibliothèque Python et CLI tmd-process pour les cartes de hauteur .tmd TrueMap et GelSight : métrologie, usure, 3D.
- Charger une carte .tmd
- Chercheur tribologieTrueMap / GelSight
TMD.load("fichier.tmd") dans tmd/core/tmd.py décode les en-têtes v1 ou v2 et renvoie height_map, un tableau float32 (hauteur, largeur), avec un dictionnaire metadata.
- Exporter des cartes de texture
- Chercheur tribologie
tmd-process maps all|normal|ao|bump|hillshade|displacement écrit des cartes PNG via les générateurs de tmd/image/maps/, et maps batch traite un dossier entier.
- Exporter un maillage 3D
- Chercheur tribologie
tmd-process mesh generate exporte en STL, OBJ, PLY, glTF ou USD avec une triangulation adaptative ou quadtree ; mesh apply pose les cartes sur un gabarit OBJ/MTL comme tmd/fixtures/templates/plane.
- Mesurer la rugosité ISO 25178
- Chercheur tribologieSurfalize (ISO 25178)
tmd-process roughness file <chemin> --quick calcule les paramètres surfaciques via l'extra optionnel truemapdata[roughness], qui installe Surfalize sous GPL-3.0.
- Suivre l'usure entre scans
- Chercheur tribologieTrueMap / GelSight
tmd-wear (équivalent de tmd-process wear) calcule courbes de portance, séries de volume d'usure, axe de glissement et évolution des rayures sur des séquences alignées, via tmd/sequence/wear_analysis.py.
- Tracer surfaces et profils
- Chercheur tribologie
tmd-process visualize basic <fichier> trace cartes de chaleur 2D, surfaces 3D et profils X/Y avec les traceurs matplotlib, plotly, seaborn ou Polyscope (optionnel) ; tribology plot produit un tableau de bord PNG.
2.1. Scénario : Comparer deux captures GelSight d'un échantillon usé
- Installer le paquet avec pip install truemapdata, ou pip install -e . depuis un clone.
- Lancer tmd-wear bearing curve examples/gelsight/circle_0mm_100g_heightmap_linear_detrend.tmd --json pour obtenir la courbe d'Abbott de la première capture.
- Lancer tmd-wear volume-series avec ce fichier et tests/fixtures/gelsight_wear_volume_second_frame.tmd pour mesurer le volume perdu entre les deux images.
- Exporter les textures avec tmd-process maps all <fichier> -o ./maps_out.
- Construire un maillage avec tmd-process mesh generate <fichier> --format stl --method adaptive --quality high pour voir la zone usée en 3D.
Fichiers consultésREADME.mdpyproject.tomldocs/reference/cli.mddocs/user-guide/getting-started.mdtmd/core/tmd.pytmd/cli/main.pytmd/sequence/wear_analysis.py
3. Démarrage
Paquet. TrueMapData est publié sur PyPI sous le nom truemapdata (licence MIT, Python 3.8 ou plus récent). La dernière version sur PyPI est la 1.0.5 ; le pyproject.toml du dépôt en est déjà à 1.0.6. Il n’existe pas de paquet .NET ni NuGet : la bibliothèque est uniquement en Python, et le nom d’import est tmd.
pip install truemapdata
Les extras ajoutent des fonctions optionnelles. Chacun est déclaré dans pyproject.toml :
| Extra | Ajoute | Pour |
|---|---|---|
viz | PyVista, ipywidgets, Kaleido | Vues 3D et export Plotly statique |
mesh | trimesh, pygltflib, numpy-stl | Export STL, OBJ, PLY et glTF |
advanced | Polyscope, scikit-image, Open3D | Visionneuse interactive et traitement d’image |
roughness | Surfalize (GPL-3.0, Python 3.10+) | Rugosité surfacique ISO 25178 ; tenu hors de full à cause de sa licence |
full | dev, docs, viz, mesh et advanced, plus pandas et nbformat | Travailler sur la bibliothèque elle-même |
pip install "truemapdata[mesh,viz]"
pip install "truemapdata[roughness]"
Le paquet installe deux commandes, tmd-process (la boîte à outils complète) et tmd-wear (le sous-ensemble consacré à l’usure).
Un premier script. Cet exemple suit tests/core/test_tmd.py et fonctionne donc sans fichier de capture : il construit une carte de hauteurs en mémoire, l’enregistre au format TMD v2, la relit et l’examine.
import numpy as np
from tmd import TMD
# Une grille de 200 x 200 hauteurs, 0,05 mm entre deux points
y, x = np.mgrid[0:200, 0:200]
heights = (np.sin(x / 25) * np.cos(y / 30)).astype(np.float32)
surface = TMD(heights, {"comment": "synthetic", "resolution_x": 0.05, "resolution_y": 0.05})
path = surface.save("synthetic.tmd") # version 2 par défaut, renvoie le chemin .tmd
loaded = TMD.load(path)
print(loaded.shape) # (200, 200)
print(loaded.dimensions) # largeur et hauteur physiques : 10,0 x 10,0
print(loaded.stats["min"], loaded.stats["max"]) # calculées au premier accès
patch = loaded.crop(50, 50, 64, 64) # x_start, y_start, largeur, hauteur
small = loaded.resize(100, 100)
TMD.load lève FileNotFoundError ou TMDProcessingError si le fichier manque, et dimensions multiplie la taille de la grille par resolution_x et resolution_y tirés des métadonnées (1,0 s’ils sont absents). Avec une vraie capture, remplacez la grille synthétique par TMD.load("capture.tmd"). Le dépôt suit des captures d’exemple pour cela : des fichiers TrueMap dans examples/v1/ et examples/v2/ (une pièce de dix cents, une marche, des pièces de monnaie, du papier et, en v2, un marquage laser et une empreinte Vickers) et trois captures GelSight dans examples/gelsight/, prises après 0, 150 et 300 mm de glissement sous 100 g.
En ligne de commande. Les exemples d’usure du README tournent sur ces fichiers :
tmd-process visualize basic examples/v2/Dime.tmd
tmd-wear bearing curve examples/gelsight/circle_0mm_100g_heightmap_linear_detrend.tmd --json
tmd-wear volume-series examples/gelsight/circle_0mm_100g_heightmap_linear_detrend.tmd \
tests/fixtures/gelsight_wear_volume_second_frame.tmd --json
La première commande d’usure affiche la courbe de portance (Abbott–Firestone) d’une capture ; la seconde compare des captures de même grille et donne la perte par rapport à la première (z_ref - z_i, positive là où la surface a baissé).


4. Fonctions et composants
| Domaine | Contenu |
|---|---|
| Format de fichier | En-tête .tmd, métadonnées spatiales et grille de hauteurs float32 en ordre ligne ; formats v1 (ancien) et v2 de type TrueMap v6, avec vérification des en-têtes v2 alternatifs |
| Visualisation | Carte de chaleur 2D, surface 3D, profils ligne et colonne, contours, comparaison de fichiers ; Matplotlib, HTML Plotly, Polyscope en option |
| Cartes dérivées | Cartes de normales, cartes de déplacement, application sur maillage avec un gabarit OBJ/MTL utilisant les bornes du gabarit, mm_per_pixel et les dimensions de la capture pour le tuilage |
| Métrologie | Rugosité surfacique ISO 25178 via Surfalize (optionnel) |
| Usure | Commandes tmd-wear : séries de volume, évolution des rayures, heuristiques d’axe de glissement, trajectoires de rugosité ; alignement par translation et recalage OpenCV/SIFT, y compris guidé par les normales |
| Outils de pipeline | Filtres, détection de défauts, export de séquences, compression |
5. Architecture
flowchart TB
Capture["Capture TrueMap ou GelSight"] --> Read["Grille de hauteurs et métadonnées spatiales"]
Read --> Inspect["Carte de chaleur, profil ou surface 3D"]
Inspect --> Metrics["Rugosité et métriques de surface"]
Inspect --> Maps["Cartes de normales et de déplacement"]
Inspect --> Mesh["Export de maillage et texturage de gabarit"]
6. Limites et points à vérifier
- La rugosité décrit une capture ; l’usure compare des captures dans le temps et exige la même grille et la même région dans le plan avant de soustraire les hauteurs.
- Convention de perte :
hauteur de référence − hauteur courante; une perte positive signifie une surface courante plus basse. Le volume physique demande aussi l’espacement des pixels dans les deux directions. - Des erreurs de recalage ou des unités de hauteur incohérentes changent les résultats d’usure.
- Les figures du README sont des exemples du dépôt avec des hauteurs normalisées, pas des mesures du mémoire.
7. Liens
- Dépôt
- Paquet PyPI
truemapdata tests/core/test_tmd.py, source de l’exemple d’utilisation- Documentation
- Guide du format binaire · Analyse séquentielle de l’usure
- MistubaVideo rend les champs de surface enregistrés que cet outillage mesure
8. Pipeline CI/CD
7 workflows GitHub Actions, 9 tâches. Chaque boîte est une tâche ; les boîtes à double bord publient ou déploient, et les flèches suivent les dépendances needs.
Mermaid Déroulement du pipeline
flowchart LR
subgraph wf0["Build"]
direction LR
wf0_build["build<br/>ubuntu-latest"]
end
subgraph wf1["Dependabot Auto-Merge"]
direction LR
wf1_dependabot["dependabot<br/>ubuntu-latest"]
end
subgraph wf2["Dependency submission"]
direction LR
wf2_dependency_submission["dependency-submission<br/>ubuntu-latest"]
end
subgraph wf3["Documentation"]
direction LR
wf3_build[["build<br/>ubuntu-latest"]]
wf3_deploy[["deploy<br/>ubuntu-latest"]]
end
subgraph wf4["Release and publish"]
direction LR
wf4_test[["test<br/>ubuntu-latest"]]
wf4_release_and_pypi[["release-and-pypi<br/>ubuntu-latest"]]
end
subgraph wf5["Ruff"]
direction LR
wf5_ruff["ruff<br/>ubuntu-latest"]
end
t0(["push · demande de fusion"])
t1(["demande de fusion"])
t2(["push · demande de fusion · lancement manuel"])
t3(["lancement manuel"])
d0[("GitHub Pages")]
d1[("PyPI")]
d2[("Versions GitHub")]
t0 --> wf0_build
t1 --> wf1_dependabot
t2 --> wf2_dependency_submission
t0 --> wf3_build
wf3_build --> wf3_deploy
wf3_deploy -.-> d0
t3 --> wf4_test
wf4_test --> wf4_release_and_pypi
wf4_release_and_pypi -.-> d1
wf4_release_and_pypi -.-> d2
t0 --> wf5_ruff
| Workflow | Déclencheurs | Tâches | Publie vers |
|---|---|---|---|
Build.github/workflows/build.yml | push, demande de fusion |
| — |
Dependabot Auto-Merge.github/workflows/dependabot-auto-merge.yml | demande de fusion |
| — |
Dependency submission.github/workflows/dependency-submission.yml | push, demande de fusion, lancement manuel |
| — |
Documentation.github/workflows/docs.yml | push, demande de fusion |
| GitHub Pages |
Release and publish.github/workflows/publish.yml | lancement manuel |
| PyPI, Versions GitHub |
Ruff.github/workflows/ruff.yml | push, demande de fusion |
| — |
Test.github/workflows/test.yml | push, demande de fusion |
| — |
Généré à partir du code au commit 8e44bd4.
9. Schéma de déploiement
Mermaid Schéma de déploiement
flowchart LR
repo[("Dépôt GitHub")]
ci[["GitHub Actions<br/>7 workflows"]]
pub_GitHub_Pages[("GitHub Pages")]
pub_PyPI[("PyPI")]
pub_GitHub_Releases[("Versions GitHub")]
host_MkDocs_site("Site de documentation (MkDocs)<br/>mkdocs.yml")
repo -->|"push ou demande de fusion"| ci
ci -->|"publie"| pub_GitHub_Pages
ci -->|"publie"| pub_PyPI
ci -->|"publie"| pub_GitHub_Releases
ci -.->|"configuré"| host_MkDocs_site
10. Dépendances externes
44 paquets déclarés (19 à l’exécution, 25 pour le développement) dans pyproject.toml, requirements.txt.
Tableau des paquets 44
| Paquet | Version | Usage | Rôle | Registre |
|---|---|---|---|---|
numpy | >=1.20.0 | exécution | Analyse de données | pypi.org |
matplotlib | >=3.5.0 | exécution | Graphiques | pypi.org |
pillow | >=9.0.0 | exécution | Graphisme, image et 3D | pypi.org |
scipy | >=1.8.0 | exécution | Analyse de données | pypi.org |
opencv-python | >=4.5.0 | exécution | Graphisme, image et 3D | pypi.org |
rich | >=12.0.0 | exécution | Ligne de commande | pypi.org |
typer | >=0.7.0 | exécution | Ligne de commande | pypi.org |
plotly | >=5.10.0 | exécution | Graphiques | pypi.org |
seaborn | >=0.12.0 | exécution | Graphiques | pypi.org |
meshio | >=5.0.0 | exécution | Graphisme, image et 3D | pypi.org |
psutil | >=5.8.0 | exécution | Cross-platform lib for process and system monitoring. | pypi.org |
noise | >=1.2.2 | exécution | Perlin noise for Python | pypi.org |
pytest | >=7.0.0 | développement | Tests | pypi.org |
pytest-cov | >=4.0.0 | développement | Tests | pypi.org |
black | >=23.0.0 | développement | Analyse et formatage | pypi.org |
isort | >=5.10.0 | développement | Analyse et formatage | pypi.org |
flake8 | >=5.0.0 | développement | Analyse et formatage | pypi.org |
mypy | >=1.0.0 | développement | Analyse et formatage | pypi.org |
tox | >=4.0.0 | développement | tox is a generic virtualenv management and test command line tool | pypi.org |
pre-commit | >=3.0.0 | développement | Analyse et formatage | pypi.org |
mkdocs | >=1.6.0 | développement | Project documentation with Markdown. | pypi.org |
mkdocs-material | >=9.7.0 | développement | Documentation that simply works | pypi.org |
pymdown-extensions | >=9.0 | développement | Extension pack for Python Markdown. | pypi.org |
pygments | >=2.13.0 | développement | Pygments is a syntax highlighting package written in Python. | pypi.org |
pyvista | >=0.37.0 | développement | Graphisme, image et 3D | pypi.org |
ipywidgets | >=7.6.0 | développement | Jupyter interactive widgets | pypi.org |
kaleido | >=0.2.1 | développement | Plotly graph export library | pypi.org |
trimesh | >=3.9.0 | développement | Graphisme, image et 3D | pypi.org |
pygltflib | >=1.15.0 | développement | Python library for reading, writing and managing 3D objects in the Khronos Group gltf and gltf2 formats. | pypi.org |
numpy-stl | — | développement | Analyse de données | pypi.org |
polyscope | >=1.3.0 | développement | Polyscope: A viewer and user interface for 3D data. | pypi.org |
scikit-image | — | développement | Graphisme, image et 3D | pypi.org |
open3d | — | développement | Graphisme, image et 3D | pypi.org |
surfalize | >=0.16.0 | développement | A python module to analyze surface roughness | pypi.org |
truemapdata | — | développement | A library for processing TMD files and visualizing height maps | pypi.org |
pandas | >=1.3.0 | développement | Analyse de données | pypi.org |
nbformat | >=5.1.0 | développement | The Jupyter Notebook format | pypi.org |
tqdm | >=4.60.0 | exécution | Ligne de commande | pypi.org |
openstl | — | exécution | A simple STL serializer and deserializer | pypi.org |
python-pptx | — | exécution | Create, read, and update PowerPoint 2007+ (.pptx) files. | pypi.org |
PyWavelets | — | exécution | PyWavelets, wavelet transform module | pypi.org |
moviepy | — | exécution | Graphisme, image et 3D | pypi.org |
usd-core | — | exécution | Pixar's Universal Scene Description | pypi.org |
rasterio | — | exécution | Fast and direct raster I/O for use with NumPy | pypi.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.
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.
Intégration continue
Des vérifications automatiques lors des changements de source, comme la compilation, les tests et l’analyse statique. Elles ne couvrent que ce qu’elles vérifient.
Mermaid
Un langage de diagrammes textuel. Les nœuds et liens décrivent un modèle ; le diagramme n’exécute pas le projet.
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.
12. Références
- ETSim. (2026, 5 novembre). [Web page] github.com.
- ETSim. (2026, 5 novembre). TrueMapData. [Software repository] github.com.
- Documentation. (2026, 5 novembre). [Web page] etsim.github.io.
- ETSim. (2026, 5 novembre). Guide du format binaire. [Source file or documentation] github.com.
- ETSim. (2026, 5 novembre). Analyse séquentielle de l'usure. [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.