face-alignment
Face alignment, landmark extraction, and quality gating. Use when debugging alignment issues, reviewing rejected faces, or tuning quality thresholds.
When & Why to Use This Skill
This Claude skill provides a comprehensive suite for face alignment, landmark extraction, and quality gating, specifically designed to help developers debug alignment artifacts and optimize embedding gating behavior in computer vision pipelines. It leverages advanced models like FAN for 68-point landmark extraction and offers diagnostic tools to resolve identity fragmentation and quality threshold issues.
Use Cases
- Investigating and resolving face rejection issues by analyzing heuristic alignment quality scores and diagnostic JSON outputs.
- Fine-tuning 'alignment_quality' thresholds in pipeline configurations to balance data precision and recall in facial recognition systems.
- Extracting precise 68-point 2D landmarks and generating standardized face crops for downstream machine learning tasks.
- Diagnosing landmark jitter and temporal instability in video sequences to improve the consistency of face tracking and embedding generation.
| name | face-alignment |
|---|---|
| description | Face alignment, landmark extraction, and quality gating. Use when debugging alignment issues, reviewing rejected faces, or tuning quality thresholds. |
Face Alignment Skill
Use this skill to debug face alignment artifacts and embedding gating behavior.
When to Use
- Faces being rejected but you don't know why
- Identity fragmentation that might be alignment-related
- Need to adjust alignment quality thresholds
- Debugging how
alignment_qualityis computed and consumed - Planning promotion/integration (FEATURE sandbox → production)
Sub-agents
| Sub-agent | Purpose |
|---|---|
| FaceAlign2DSubagent | FAN 68-point 2D landmark extraction |
| FaceAlign3DSubagent | 3DDFA_V2 dense 3D alignment (planned) |
| AlignmentQualitySubagent | LUVLi-style uncertainty scoring (planned; heuristic today) |
Key Skills
Run FAN alignment on a face bbox
Run alignment on detected face boxes (produces 68-point landmarks; optional aligned crop).
from FEATURES.face_alignment.src.run_fan_alignment import FANAligner, align_face_crop
aligner = FANAligner(model_type="2d", landmarks_type="2D", device="cpu")
landmarks = aligner.align_face(image, bbox) # 68 x 2
aligned_crop = align_face_crop(image, landmarks, output_size=112)
Compute alignment_quality (heuristic today)
Get a per-face quality score (0–1). Current implementation is heuristic-based.
from FEATURES.face_alignment.src.alignment_quality import compute_alignment_quality
quality = compute_alignment_quality(bbox=bbox, landmarks_68=landmarks)
Generate episode artifacts
python -m FEATURES.face_alignment --episode-id <EP_ID>
Config Reference
Alignment Artifact Config: config/pipeline/face_alignment.yaml
| Key | Default | Description |
|---|---|---|
face_alignment.enabled |
true | Produce face_alignment/aligned_faces.jsonl |
face_alignment.model.type |
2d |
FAN model variant (2d / 3d) |
face_alignment.processing.stride |
1 | Sample every Nth frame |
face_alignment.processing.batch_size |
16 | Faces per batch |
face_alignment.processing.device |
auto |
auto / cuda / cpu |
Embedding Gating Config: config/pipeline/embedding.yaml
| Key | Default | Description |
|---|---|---|
face_alignment.enabled |
true | Enable/disable gating logic |
face_alignment.min_alignment_quality |
0.3 | Skip faces below this threshold |
Common Issues
Faces unexpectedly skipped before embedding
Cause: Face below quality threshold
Check: alignment_quality in data/manifests/{ep_id}/face_alignment/aligned_faces.jsonl
Fix: Lower threshold in config/pipeline/embedding.yaml:
face_alignment:
min_alignment_quality: 0.2 # default is 0.3
High landmark_jitter
Cause: Unstable landmarks across frames
Check: Per-frame landmark variance in track
Fix:
- Ensure FAN model loaded correctly
- Check input face crop quality
- May need temporal smoothing
3D head pose / profile gating isn’t available
Cause: 3DDFA_V2 isn’t implemented yet (planned).
Diagnostic Output
{
"face_id": "F_42_100",
"alignment_quality": 0.72,
"landmarks_detected": 68,
"head_pose": {
"yaw": -25.5,
"pitch": 10.2,
"roll": 3.1
},
"quality_breakdown": {
"eyes": 0.85,
"nose": 0.80,
"mouth": 0.65,
"chin": 0.55
},
"aligner_used": "fan_2d"
}
Key Files
| File | Purpose |
|---|---|
FEATURES/face_alignment/src/run_fan_alignment.py |
FAN landmarks + crop utilities |
FEATURES/face_alignment/src/face_alignment_runner.py |
Episode runner (python -m FEATURES.face_alignment) |
FEATURES/face_alignment/src/alignment_quality.py |
Heuristic alignment_quality |
FEATURES/face_alignment/src/run_luvli_quality.py |
LUVLi-style scaffolding (not true LUVLi yet) |
config/pipeline/face_alignment.yaml |
Alignment artifact config |
config/pipeline/embedding.yaml |
Embedding gating config |
FEATURES/face_alignment/tests/test_face_alignment.py |
Unit tests (synthetic) |
tests/integration/test_face_alignment_pipeline.py |
Pipeline integration helpers/tests |
Related Skills
- pipeline-insights - General pipeline debugging
- cluster-quality - Clustering metrics