





















The first AI-grade sign language data layer.
A multi-signer ASL keypoint corpus designed for AI training, research benchmarking, and inter-signer variability studies. v0.2 expands the signer pool from 3 to 4 and the corpus from 300 to 600 clips, in a fully parallel structure — every one of 150 phrases is signed by all four Deaf signers.
CLERC builds the data layer underneath sign language AI — not a translation tool, not an accessibility app. Infrastructure.
This release ships extracted keypoints and annotations only — no raw video. Source clips remain proprietary; access is reserved for commercial licensing (contact florian@clerc.io).
This is v0.2, a pilot release representing a portion of the full CLERC catalog. Full corpus access available via commercial license.
A small BiLSTM trained on the four release signers and tested on signers held entirely outside the training set shows the core result: one signer does not generalize to a stranger, four do.
Full method, numbers, and honest caveats: BENCHMARK.md.
| Metric | Value |
|---|---|
| Total clips | 600 (150 per signer) |
| Unique phrases | 150 (fully parallel × 4 signers) |
| Signers | 4 (ALPHA, BRAVO, CHARLIE, DELTA) |
| Total frames | 69,504 |
| Mean clip length | 116 frames (≈ 3.9 s @ 30 fps) |
| Total signed duration | 38.61 min |
| Gloss tokens | 1,708 |
| Unique glosses | 251 |
| Mean segments per clip | 2.85 |
| MediaPipe head-silhouette detection | 99.98% of frames |
| Frame rate | 29.95 – 30.0 fps |
| Coordinate space | MediaPipe image-normalized (signer perspective) |
Top 10 glosses (cumulative coverage of corpus):
| # | Gloss | Tokens | % of corpus |
|---|---|---|---|
| 1 | YOU | 273 | 16.0% |
| 2 | QUESTION | 182 | 10.7% |
| 3 | WHERE | 50 | 2.9% |
| 4 | WHAT | 43 | 2.5% |
| 5 | HAVE | 41 | 2.4% |
| 6 | WANT | 36 | 2.1% |
| 7 | LIKE | 32 | 1.9% |
| 8 | HOW | 25 | 1.5% |
| 9 | YOUR | 24 | 1.4% |
| 10 | HOW MANY | 21 | 1.2% |
aseepee/
├── keypoints/ # 600 .npy arrays, shape (n_frames, 128, 3)
├── annotations/ # 600 .json files
└── metadata.csv # master index (1 row per clip)
| Indices | Region | Source | Notes |
|---|---|---|---|
| 0–20 | Left hand (21 points) | MediaPipe Hands | |
| 21–41 | Right hand (21 points) | MediaPipe Hands | |
| 42–53 | Upper body (12 points) | MediaPipe Pose [11:23] | shoulders, elbows, wrists, finger anchors |
| 54–63 | Lower body (10 points) | MediaPipe Pose [23:33] | hips, knees, ankles, heels, feet — spatial context, optional |
| 64–91 | Eyes + mouth only (28 points) | MediaPipe Face | privacy-preserving subset |
| 92–127 | Head silhouette (36 points) | MediaPipe FaceMesh FACE_OVAL |
forehead, jaw, ears — outline only, no internal features |
The 36 head-silhouette landmarks come from MediaPipe FaceMesh FACE_OVAL indices 10, 338, 297, 332, 284, 251, 389, 356, 454, 323, 361, 288, 397, 365, 379, 378, 400, 377, 152, 148, 176, 149, 150, 136, 172, 58, 132, 93, 234, 127, 162, 21, 54, 103, 67, 109 (in that traversal order). The points form a closed polygon outlining the head — no internal facial features are included, so the privacy stance is preserved.
Coordinates are MediaPipe's image-normalized space, NOT clipped to [0, 1]:
[0, 1] (frame width); a landmark extrapolated just off-frame can fall slightly outside [0, 1][0, 1] for points visible in frame, but can exceed 1.0 for body landmarks extrapolated below the visible frameSource clips are framed waist-up. Lower-body landmarks (dataset indices 54–63) come from MediaPipe Pose's full-body prediction. For hand/face-only SLR pipelines, they can be dropped:
kp_slr = np.concatenate([kp[:, :54], kp[:, 64:]], axis=1) # → (n_frames, 118, 3)
Zero values (0, 0, 0) indicate a landmark was not detected for that frame (e.g. an off-screen hand).
Glosses (uppercase ASL labels) follow a few conventions worth knowing before training:
Base gloss — WHAT, YOU, BATHROOM. The standard form of a sign.
Variants — BASE_N (e.g. SIGN_2, WHAT_3). Alternative ways to sign the same English concept (different handshape, location, or movement). The number N is an internal disambiguator, not an intensity marker. Treat WHAT, WHAT_2, WHAT_3 as siblings sharing the same English target.
Directional / movement suffixes — POINTER_RIGHT, GO_LEFT, HOW_RIGHT_MOVE. These mark spatial/movement components inherent to the sign and should not be collapsed with their base form.
Phrase repetitions — Some clips contain the target phrase signed more than once (emphasis, demonstration, self-correction). Each occurrence is a separate gloss segment. This is natural signer behavior, not a labeling error.
Recommended preprocessing
import re
def base_gloss(g):
return re.sub(r"_\d+$", "", g) # SIGN_2 → SIGN
from collections import Counter
def has_repeat(segments):
return any(c >= 2 for c in Counter(s["gloss"] for s in segments).values())
{
"clip_id": "clerc_v02_001",
"signer_id": "ALPHA",
"sign_language": "ASL",
"text_en": "What's up?",
"fps": 30.0,
"n_frames": 139,
"segments": [
{ "gloss": "WHAT'S UP", "start": 0.9, "end": 1.4 },
{ "gloss": "QUESTION", "start": 2.0, "end": 2.8 }
]
}
| signer_id | Gender | Age range | Language acquisition | Clips |
|---|---|---|---|---|
| ALPHA | F | 30–40 | Native Deaf signer (ASL L1) | clerc_v02_001 → 150 |
| BRAVO | M | 30–40 | Native Deaf signer (ASL L1) | clerc_v02_151 → 300 |
| CHARLIE | M | 30–40 | Native Deaf signer (ASL L1) | clerc_v02_301 → 450 |
| DELTA | F | 30–40 | Native Deaf signer (ASL L1) | clerc_v02_451 → 600 |
Demographic distribution: 2 female / 2 male, all between 30–40 years old. All native ASL signers (Deaf, ASL as first language). Signer identities are pseudonymized.
Signers participated under written informed consent. The signing space, framing, lighting, and recording protocol were standardized across signers.
Parallel structure: all four signers sign the same 150 phrases. The clip blocks are phrase-aligned: clerc_v02_001, _151, _301, _451 are the four signers' renderings of phrase #1, and so on — enabling direct inter-signer comparison.
Stylistic note: Phrase repetition rates vary by signer — natural inter-signer stylistic variation, annotated as separate gloss segments. See gloss conventions for filtering.
For production-grade systems or sign language generation models trained at scale, see commercial licensing for access to the full multi-signer corpus.
This release ships as plain .npy + .json files for transparency and zero-dependency loading.
import json
import numpy as np
import pandas as pd
from pathlib import Path
from huggingface_hub import snapshot_download
ROOT = Path(snapshot_download(repo_id="CLERC-DATA/epee", repo_type="dataset"))
metadata = pd.read_csv(ROOT / "metadata.csv")
clip_id = "clerc_v02_001"
with open(ROOT / "annotations" / f"{clip_id}.json") as f:
annotation = json.load(f)
keypoints = np.load(ROOT / "keypoints" / f"{clip_id}.npy")
hands = keypoints[:, :42]
upper_body = keypoints[:, 42:54]
face_inner = keypoints[:, 64:92]
head_oval = keypoints[:, 92:128]
CC BY-NC-SA 4.0 — creativecommons.org/licenses/by-nc-sa/4.0
Commercial licensing: for enterprise use, training of commercial models, or integration into commercial products, contact florian@clerc.io.
CLERC is Deaf-led infrastructure. This release adheres to:
| Version | Status | Content |
|---|---|---|
| v0.1 | Superseded | 300 clips, 3 signers, gloss + timing |
| v0.2 | ✅ Current | 600 clips, 4 signers (ALPHA–DELTA), 150 parallel phrases, gloss + timing |
| v1.0 | Planned 2027 | Multi-layer annotations, broader corpus |
@dataset{clerc_epee_v02_2026,
author = {M{\'e}loux, Florian and {CLERC}},
title = {{CLERC} {\'E}p{\'e}e v0.2: Sign Language Data Layer},
year = {2026},
publisher = {Hugging Face},
version = {0.2},
doi = {10.5281/zenodo.20268565},
url = {https://huggingface.co/datasets/CLERC-DATA/epee}
}
CLERC builds the data infrastructure that lets AI understand sign language as a first-class language — not an accessibility afterthought.
Sign language is not to be translated. It is to be inscribed.
Website: clerc.io · Contact: florian@clerc.io · LinkedIn: clerc-io
v0.2 — June 2026
v0.1 — May 2026
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。