davidcastagnetoa/skills

mediapipe_face_alignment

Alinear rostros por landmarks antes de generar embeddings — crítico para precisión de ArcFace

First seen Mar 6, 2026

Installation

$ npx skills add davidcastagnetoa/skills --skill mediapipe_face_alignment

Also in this package

Other skills from davidcastagnetoa/skills · top by installs.

npx skills add davidcastagnetoa/skills

Browse all from davidcastagnetoa/skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 1
Default branch main
Open issues 0
Status Active

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 2,576 B
  • docs SUMMARY.md 129 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 7 installs

SKILL.md

mediapipefacealignment

La alineación facial normaliza la posición, escala y rotación del rostro antes de pasarlo al modelo de embeddings. Sin alinear, ArcFace puede perder hasta 15% de precisión en imágenes con cabeza inclinada o rostros en posición lateral.

When to use

Aplicar siempre antes de extraer embeddings con InsightFace/ArcFace. Tanto para la selfie como para la foto del documento.

Instructions

  1. Instalar: pip install mediapipe opencv-python-headless
  2. Implementar en backend/agents/face_match/aligner.py:

``python import mediapipe as mp import cv2, numpy as np facemesh = mp.solutions.facemesh.FaceMesh(staticimagemode=True, maxnumfaces=1) LEFTEYEIDX = 33 # landmark del ojo izquierdo RIGHTEYEIDX = 263 # landmark del ojo derecho def alignface(image: np.ndarray, outputsize: tuple = (112, 112)) -> np.ndarray: results = facemesh.process(cv2.cvtColor(image, cv2.COLORBGR2RGB)) if not results.multifacelandmarks: raise ValueError("No face detected for alignment") landmarks = results.multifacelandmarks[0].landmark h, w = image.shape[:2] lefteye = np.array([landmarks[LEFTEYEIDX].x w, landmarks[LEFTEYEIDX].y h]) righteye = np.array([landmarks[RIGHTEYEIDX].x w, landmarks[RIGHTEYEIDX].y h]) angle = np.degrees(np.arctan2(righteye[1] - lefteye[1], righteye[0] - lefteye[0])) center = ((lefteye + righteye) / 2).astype(int) M = cv2.getRotationMatrix2D(tuple(center), angle, 1.0) aligned = cv2.warpAffine(image, M, (w, h)) # Crop y resize al tamaño esperado por ArcFace return cv2.resize(aligned[center[1]-56:center[1]+56, center[0]-56:center[0]+56], output_size) ``

  1. El tamaño de salida debe ser (112, 112) — el input esperado por ArcFace R100.
  2. Manejar la excepción cuando no se detecta cara: propagar como error de calidad al orchestrator.
  3. Aplicar alineación tanto a la selfie como a la foto recortada del documento.

Notes

  • La alineación mejora la precisión más en casos difíciles: fotos de documento con inclinación, selfies sin centrar.
  • Alternativa más rápida: usar los 5 puntos clave de InsightFace directamente en lugar de los 468 de MediaPipe.
  • Procesar la alineación antes de la super-resolución (ESRGAN) para mejores resultados.