Skip to content
Table of contents

WearSurfacesDatasets

WearSurfacesDatasets publishes the surface textures captured during controlled wear tests, organised by material, abrasive grit, load and sliding distance. It is the public dataset of the ÉTS master’s research on wear in texture space, where it serves to compare simulated wear patterns with measured microgeometry, and it is published under ETSim for graphics and tribology researchers who need real wear progressions.

DatasetAPI
PythonParquetWebDatasetGit LFSOpenCVFastAPIWebGPU
  • Updated

1. Overview

Each measured state is one Parquet leaf:

data/parquet/<material>/<shape>/<direction>/S<grit>/<load>g/<distance>mm/data.parquet

For example data/parquet/Cartboard/Raw/Normal/S60/200g/800mm/data.parquet. Each row stores one map as JPEG bytes in image_data, labelled by map_type; metadata.json lists ambient occlusion, bump, displacement, height, hillshade and normal maps. The same records are also packed as WebDataset archives data/shards/shard-0000.tar to shard-0839.tar.

data/parquet/sequences.json lists 20 wear timelines: cardboard at five loads (10 to 200 g, grit S60), foam, MDF (circle and line paths), PLA at several grits in linear and non-linear directions, soft wood, and unworn sandpaper references from S40 to S240.

On top of the data, the repository has three layers of tooling:

  • generate_datasets.py, read_datasets.py and generate_metadata.py (Typer CLIs) build Parquet and shards from a wear/ folder of PNG maps, extract them back, and write per-leaf and index metadata.
  • alignment/ registers each sequence with a two-pass SIFT/ECC method (align.py), crops the common valid region, adds temporal Catmull-Rom midpoints (interpolate.py) and extrapolates future normal maps with an FFT plus SLERP model (extrapolate.py). bake.py runs it per sequence or for all of them and can repack the results.
  • docs/index.html is a WebGPU material viewer that reads Parquet in the browser with parquet-wasm. docs/serve_local.py is a FastAPI server that serves the viewer and the data and exposes /api/datasets, /api/sequences and /api/align/sequence.

2. Use cases

Measured wear-surface map sequences (material, grit, load, distance) with Python tools and a WebGPU viewer.

Use-case diagram for WearSurfacesDatasets: Download the map sequences; Scrub a wear timeline; Align a sequence; Interpolate and extrapolate; Pack Parquet and shards; Extract maps as PNGWearSurfacesDatasetsDownload the map sequencesScrub a wear timelineAlign a sequenceInterpolate and extrapolatePack Parquet and shardsExtract maps as PNGGraphics researcher«system»Git LFS storage«system»WebGPU browser
People on the left, external systems on the right; each oval is a use case backed by the files cited below.
Download the map sequences
Graphics researcherGit LFS storage

Parquet leaves and WebDataset shards are Git LFS objects, so git lfs pull replaces the pointers under data/parquet and data/shards.

Scrub a wear timeline
Graphics researcherWebGPU browser

docs/serve_local.py serves docs/index.html, which reads Parquet with parquet-wasm and renders the maps with WebGPU while the user scrubs distance or presses Play.

Align a sequence
Graphics researcherWebGPU browser

POST /api/align/sequence runs a two-pass SIFT/ECC registration of the normal maps to frame 0, crops the common region and caches PNGs in data/aligned.

Interpolate and extrapolate
Graphics researcher

python -m alignment.bake adds Catmull-Rom midpoints and FFT plus SLERP extrapolated normal maps after the last measured step.

Pack Parquet and shards
Graphics researcher

generate_datasets.py parquet and webdataset turn a wear/ tree of PNG maps into nested Parquet leaves and shard-*.tar files.

Extract maps as PNG
Graphics researcher

read_datasets.py decompress and generate_datasets.py extract write the JPEG bytes stored per map_type back to image files.

2.1. Scenario: Inspect cardboard wear under 200 g

  1. Clone the repository, run git lfs pull and pip install -r requirements.txt.
  2. Start python docs/serve_local.py and open http://127.0.0.1:8080/docs/index.html.
  3. Pick Cartboard / Raw / Normal · S60 · 200 g and click Load sequence.
  4. Click Align sequence, then scrub the distance from 0 mm to 2400 mm or press Play.
  5. Run python -m alignment.bake --sequence-id cartboard-raw-normal-s60-200g --pack to add interpolated and extrapolated steps.

Files readREADME.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. Getting started

From the README:

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

In the viewer, pick a sequence, click Load sequence, optionally Align sequence, then scrub the distance or press Play. To bake interpolated and extrapolated steps:

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

To rebuild the dataset from PNG maps or extract 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. Repository guide

  • data/parquet/ holds the Parquet leaves, sequences.json and metadata.parquet.
  • data/shards/ holds the WebDataset .tar shards.
  • metadata.json describes the materials, grits, loads, distances, capture setup and map types.
  • alignment/ contains registration, warping, interpolation, extrapolation, baking and packing.
  • docs/index.html, docs/serve_local.py and docs/serve_app.py are the viewer and its local servers. docs/prepare_viewer_parquets.py rebuilds sequences.json.
  • docs/package/ vendors the parquet-wasm build used by the viewer.
  • examples/Wear/powerpoint/ holds one PowerPoint deck per test series (cardboard, foam, MDF, PLA, sandpaper, soft wood).

5. Features

  • Wear sequences indexed by material, path shape, direction, grit, load and sliding distance.
  • Two storage formats: nested Parquet for browsing and WebDataset shards for streaming.
  • In-browser viewer with distance scrubbing, playback and prefetching of adjacent steps.
  • Server-side SIFT/ECC alignment with cached results and a flat atlas download.
  • Catmull-Rom interpolation and FFT plus SLERP extrapolation of normal maps.
  • CLI tools to rebuild, extract and describe the dataset.

6. Limits

  • Parquet and shard files are Git LFS objects: a plain clone only contains pointers until git lfs pull runs.
  • The wear/ PNG source tree used by generate_datasets.py is not in the repository, and data/aligned/ and data/wear_extrapolated/ are gitignored.
  • The README and metadata.json name Alu and Resin, but the committed sequences.json has no Alu or Resin sequence.
  • Extrapolated frames are model output, not measurements.
  • Several sequences are short (two steps for some PLA and MDF series), and one foam folder is named 4000000mm.
  • docs/README.md and metadata.json give different capture figures (resolution, number of LEDs, temperature), so treat them as descriptive.
  • On a static host the viewer still loads frames, but alignment is disabled because it needs the Python server.
  • There are no automated tests.

7. Sources

8. CI/CD pipeline

No CI/CD pipeline in the repository. The code is built and run by hand, as described above.

Generated from the source at commit 6841dff.

9. Deployment diagram

Mermaid Deployment diagram
flowchart LR
  repo[("GitHub repository")]
  local["Local machine<br/>Python"]
  repo -->|"clone and run"| local

The repository has no Dockerfile, Compose file or hosting configuration, so the code runs on the machine that clones it.

10. External dependencies

10 declared packages (10 runtime, 0 development) in requirements.txt.

Package table 10
External dependencies
PackageVersionScopePurposeRegistry
pandas—runtimeData analysispypi.org
pyarrow—runtimeData analysispypi.org
numpy—runtimeData analysispypi.org
pillow—runtimeGraphics, imaging and 3Dpypi.org
matplotlib—runtimeChartspypi.org
rich—runtimeCommand linepypi.org
typer—runtimeCommand linepypi.org
fastapi—runtimeWeb frameworkpypi.org
uvicorn—runtimeApplication serverpypi.org
opencv-python-headless—runtimeGraphics, imaging and 3Dpypi.org

11. Glossary

Repository

The versioned source files, configuration, and history of a project.

README

The repository’s entry document, usually covering its purpose and initial setup.

Dependency

A library, tool, or service that another component needs to build or run.

API

An interface through which software components exchange requests and results. An API does not have to use HTTP.

HTTP

A request-and-response protocol used by browsers and web services. A method, path, headers, and optional body describe a request.

Volume and bind mount

A volume is storage managed by the container platform; a bind mount exposes a chosen host path inside a container.

CLI

A text interface in which commands and arguments select operations. Exit codes let scripts detect success or failure.

Build

The steps that turn source files and dependencies into a runnable program or distributable artifact.

GPU

A processor designed for parallel workloads, including graphics rendering and many numerical operations.

Mesh

A surface represented by vertices and connected elements, often triangles. Its geometry is distinct from its material or texture.

Video decoder

A component that reconstructs video frames from a compressed stream. Decoding and displaying a frame are separate stages.

Backend

An implementation behind a shared interface. Depending on context, it can mean a server-side service or a graphics, input, or storage implementation.

12. References

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

Sources without a publication date show the date they were last checked, November 5, 2026. File links retain the inspected revision where available.