Aller au contenu
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é.

  • Mis à jour

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.

Diagramme de cas d’utilisation de TrueMapData : Charger une carte .tmd; Exporter des cartes de texture; Exporter un maillage 3D; Mesurer la rugosité ISO 25178; Suivre l'usure entre scans; Tracer surfaces et profilsTrueMapDataCharger une carte .tmdExporter des cartes de textureExporter un maillage 3DMesurer la rugosité ISO 25178Suivre l'usure entre scansTracer surfaces et profilsChercheur tribologie«système»TrueMap / GelSight«système»Surfalize (ISO 25178)
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
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é

  1. Installer le paquet avec pip install truemapdata, ou pip install -e . depuis un clone.
  2. 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.
  3. 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.
  4. Exporter les textures avec tmd-process maps all <fichier> -o ./maps_out.
  5. 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 :

ExtraAjoutePour
vizPyVista, ipywidgets, KaleidoVues 3D et export Plotly statique
meshtrimesh, pygltflib, numpy-stlExport STL, OBJ, PLY et glTF
advancedPolyscope, scikit-image, Open3DVisionneuse interactive et traitement d’image
roughnessSurfalize (GPL-3.0, Python 3.10+)Rugosité surfacique ISO 25178 ; tenu hors de full à cause de sa licence
fulldev, docs, viz, mesh et advanced, plus pandas et nbformatTravailler 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é).

Surface 3D Matplotlib d’une carte de hauteurs de 200 sur 200 aux hauteurs normalisées
Exemple du README : la surface 3D d’une carte de hauteurs de 200 × 200 aux hauteurs normalisées.

Profil de hauteur le long de la ligne 100, de 0 à 10 mm
Exemple du README : la coupe en X à la ligne 100, axe horizontal en millimètres.

4. Fonctions et composants

DomaineContenu
Format de fichierEn-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
VisualisationCarte de chaleur 2D, surface 3D, profils ligne et colonne, contours, comparaison de fichiers ; Matplotlib, HTML Plotly, Polyscope en option
Cartes dérivéesCartes 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étrologieRugosité surfacique ISO 25178 via Surfalize (optionnel)
UsureCommandes 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 pipelineFiltres, 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

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
Workflows, déclencheurs, tâches et cibles
WorkflowDéclencheursTâchesPublie vers
Build
.github/workflows/build.yml
push, demande de fusion
  • build ubuntu-latest
    actions/checkout · Install dependencies · Build sdist and wheel
—
Dependabot Auto-Merge
.github/workflows/dependabot-auto-merge.yml
demande de fusion
  • dependabot ubuntu-latest
    Dependabot metadata · Approve safe PR · Auto-merge safe PRs
—
Dependency submission
.github/workflows/dependency-submission.yml
push, demande de fusion, lancement manuel
  • dependency-submission ubuntu-latest
    actions/checkout · Set up Python · Stash broad requirements for graph scan · Submit dependencies to GitHub · Report submission failure
—
Documentation
.github/workflows/docs.yml
push, demande de fusion
  • build ubuntu-latest
    actions/checkout · actions/setup-python · Install dependencies · Build documentation · Upload Pages artifact
  • deploy ← build ubuntu-latest
GitHub Pages
Release and publish
.github/workflows/publish.yml
lancement manuel
  • test ubuntu-latest
    Validate release ref · Checkout · Set up Python · Install dependencies · Test with pytest
  • release-and-pypi ← test ubuntu-latest
    Checkout · Set up Python · Install build tools · Build sdist and wheel · Verify package · Create GitHub Release
PyPI, Versions GitHub
Ruff
.github/workflows/ruff.yml
push, demande de fusion
  • ruff ubuntu-latest
    actions/checkout · astral-sh/ruff-action
—
Test
.github/workflows/test.yml
push, demande de fusion
  • test ubuntu-latest
    actions/checkout · Install dependencies · Test with pytest · Upload coverage to Codecov
—

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
Dépendances externes
PaquetVersionUsageRôleRegistre
numpy>=1.20.0exécutionAnalyse de donnéespypi.org
matplotlib>=3.5.0exécutionGraphiquespypi.org
pillow>=9.0.0exécutionGraphisme, image et 3Dpypi.org
scipy>=1.8.0exécutionAnalyse de donnéespypi.org
opencv-python>=4.5.0exécutionGraphisme, image et 3Dpypi.org
rich>=12.0.0exécutionLigne de commandepypi.org
typer>=0.7.0exécutionLigne de commandepypi.org
plotly>=5.10.0exécutionGraphiquespypi.org
seaborn>=0.12.0exécutionGraphiquespypi.org
meshio>=5.0.0exécutionGraphisme, image et 3Dpypi.org
psutil>=5.8.0exécutionCross-platform lib for process and system monitoring.pypi.org
noise>=1.2.2exécutionPerlin noise for Pythonpypi.org
pytest>=7.0.0développementTestspypi.org
pytest-cov>=4.0.0développementTestspypi.org
black>=23.0.0développementAnalyse et formatagepypi.org
isort>=5.10.0développementAnalyse et formatagepypi.org
flake8>=5.0.0développementAnalyse et formatagepypi.org
mypy>=1.0.0développementAnalyse et formatagepypi.org
tox>=4.0.0développementtox is a generic virtualenv management and test command line toolpypi.org
pre-commit>=3.0.0développementAnalyse et formatagepypi.org
mkdocs>=1.6.0développementProject documentation with Markdown.pypi.org
mkdocs-material>=9.7.0développementDocumentation that simply workspypi.org
pymdown-extensions>=9.0développementExtension pack for Python Markdown.pypi.org
pygments>=2.13.0développementPygments is a syntax highlighting package written in Python.pypi.org
pyvista>=0.37.0développementGraphisme, image et 3Dpypi.org
ipywidgets>=7.6.0développementJupyter interactive widgetspypi.org
kaleido>=0.2.1développementPlotly graph export librarypypi.org
trimesh>=3.9.0développementGraphisme, image et 3Dpypi.org
pygltflib>=1.15.0développementPython library for reading, writing and managing 3D objects in the Khronos Group gltf and gltf2 formats.pypi.org
numpy-stl—développementAnalyse de donnéespypi.org
polyscope>=1.3.0développementPolyscope: A viewer and user interface for 3D data.pypi.org
scikit-image—développementGraphisme, image et 3Dpypi.org
open3d—développementGraphisme, image et 3Dpypi.org
surfalize>=0.16.0développementA python module to analyze surface roughnesspypi.org
truemapdata—développementA library for processing TMD files and visualizing height mapspypi.org
pandas>=1.3.0développementAnalyse de donnéespypi.org
nbformat>=5.1.0développementThe Jupyter Notebook formatpypi.org
tqdm>=4.60.0exécutionLigne de commandepypi.org
openstl—exécutionA simple STL serializer and deserializerpypi.org
python-pptx—exécutionCreate, read, and update PowerPoint 2007+ (.pptx) files.pypi.org
PyWavelets—exécutionPyWavelets, wavelet transform modulepypi.org
moviepy—exécutionGraphisme, image et 3Dpypi.org
usd-core—exécutionPixar's Universal Scene Descriptionpypi.org
rasterio—exécutionFast and direct raster I/O for use with NumPypypi.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

  1. ETSim. (2026, 5 novembre). [Web page] github.com.
  2. ETSim. (2026, 5 novembre). TrueMapData. [Software repository] github.com.
  3. Documentation. (2026, 5 novembre). [Web page] etsim.github.io.
  4. ETSim. (2026, 5 novembre). Guide du format binaire. [Source file or documentation] github.com.
  5. 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.