Una aplicación web avanzada que combina MediaPipe, Kalidokit y Three.js para crear un avatar VRM animado en tiempo real que imita expresiones faciales y gestos de manos con experiencia fullscreen optimizada.
- Detección facial en tiempo real usando MediaPipe Face Landmarker
- Seguimiento de expresiones faciales con 52 blendshapes
- Avatares VRM animados con soporte para expresiones y rotaciones
- Conversión inteligente de landmarks MediaPipe a rotaciones VRM usando Kalidokit
- Suavizado de movimientos para animaciones naturales
- Interfaz moderna con controles en tiempo real
- Soporte para avatares personalizados (.vrm)
- Métricas de rendimiento (FPS, latencia)
- Panel de debugging para desarrolladores
- MediaPipe Tasks Vision: Detección y análisis facial
- Kalidokit: Conversión de landmarks a datos de rigging
- Three.js: Renderizado 3D
- @pixiv/three-vrm: Soporte para modelos VRM
- Vite: Bundler y servidor de desarrollo
- Vanilla JavaScript: Sin frameworks, máximo rendimiento
src/
├── tracking/
│ └── faceTracker.js # Gestor de MediaPipe Face Landmarker
├── avatar/
│ └── vrmAvatarManager.js # Gestor de avatares VRM y Three.js
├── utils/
│ ├── kalidokitAdapter.js # Adaptador para Kalidokit
│ ├── avatarRigService.js # Servicio principal de coordinación
│ └── blendshapeMapping.json # Mapeo MediaPipe → VRM
├── assets/ # Recursos estáticos
├── main.js # Aplicación principal
└── style.css # Estilos de la interfaz
- Node.js (v16 o superior)
- Navegador moderno con soporte para WebRTC y WebGL
- Cámara web funcional
-
Clonar el repositorio:
git clone <url-del-repositorio> cd JuegoMediaPipe
-
Instalar dependencias:
npm install
-
Iniciar el servidor de desarrollo:
npm run dev
-
Abrir en el navegador:
- Ir a
http://localhost:5173 - Permitir acceso a la cámara cuando se solicite
- Ir a
npm run buildLos archivos de producción se generarán en la carpeta dist/.
- Inicializar: La aplicación se carga automáticamente con un avatar por defecto
- Seleccionar avatar: Elige entre los avatares disponibles o carga tu propio archivo .vrm
- Iniciar tracking: Haz clic en "Iniciar Tracking" para comenzar la detección facial
- Ajustar configuración: Usa los controles para modificar suavizado, expresiones, etc.
- Recalibrar: Usa el botón "Recalibrar" para resetear la pose neutral
- Debug: Doble clic en el header para mostrar información de debugging
- Suavizado: Controla la suavidad de las transiciones (0.0 = sin suavizado, 1.0 = máximo suavizado)
- Expresiones faciales: Habilita/deshabilita el mapeo de blendshapes
- Rotación de cabeza: Controla si el avatar sigue los movimientos de cabeza
- Recalibrar: Establece la pose actual como neutral
El archivo src/utils/blendshapeMapping.json contiene el mapeo entre los blendshapes de MediaPipe y las expresiones VRM. Puedes modificarlo para ajustar la correspondencia:
{
"mediaPipeToVRM": {
"eyeBlinkLeft": "blink_l",
"eyeBlinkRight": "blink_r",
"mouthSmileLeft": "happy",
// ... más mapeos
}
}En src/main.js, puedes ajustar la configuración de video:
const CONFIG = {
video: {
width: 640,
height: 480,
facingMode: "user"
}
};Para optimizar el rendimiento, ajusta estos parámetros en el servicio:
avatarRigService.setConfig({
targetFPS: 30,
enableSmoothing: true,
smoothingFactor: 0.7
});La aplicación muestra en tiempo real:
- FPS: Frames por segundo de procesamiento
- Latencia: Tiempo de procesamiento por frame en milisegundos
- Landmarks detectados: Cantidad de puntos faciales identificados
- Blendshapes activos: Expresiones faciales siendo procesadas
La aplicación incluye avatares de ejemplo, pero puedes usar cualquier modelo VRM:
- VRM Hub: https://hub.vroid.com
- VRoid Studio: Crear avatares personalizados
- Booth: Marketplace de avatares VRM
Para máxima compatibilidad, asegúrate de que tu avatar VRM incluya:
- Blendshapes estándar (blink, happy, sad, etc.)
- Huesos humanoides correctamente rigged
- Expresiones faciales configuradas
Si tu avatar usa nombres de expresiones diferentes, modifica el mapeo en blendshapeMapping.json:
{
"mediaPipeToVRM": {
"mouthSmileLeft": "tu_nombre_de_expresion_feliz"
}
}Servicio principal que coordina tracking facial y animación del avatar:
import { getAvatarRigService } from './utils/avatarRigService.js';
const service = getAvatarRigService();
await service.initialize(containerElement);
await service.loadAvatar(vrmUrl);
service.startTracking(videoElement);Gestiona MediaPipe Face Landmarker:
import { getFaceTracker } from './tracking/faceTracker.js';
const tracker = getFaceTracker();
await tracker.initialize();
const results = tracker.processFrame(videoElement);Maneja la carga y animación de avatares VRM:
import { VRMAvatarManager } from './avatar/vrmAvatarManager.js';
const manager = new VRMAvatarManager(container);
await manager.loadVRM(url);
manager.updateAvatar(faceData);avatarRigService.onFaceDetected((results) => {
// Procesar detección facial
});
avatarRigService.onAvatarUpdated((data) => {
// Avatar actualizado
});
avatarRigService.onPerformanceUpdate((metrics) => {
// Métricas de rendimiento
});- Error de cámara: Verificar permisos del navegador
- Avatar no carga: Verificar formato VRM y URL válida
- Bajo FPS: Reducir resolución de video o deshabilitar suavizado
- Expresiones no responden: Verificar mapeo de blendshapes
Activa el panel de debug haciendo doble clic en el header para ver:
- Estado del tracking facial
- Valores de blendshapes en tiempo real
- Información del avatar cargado
- Métricas de rendimiento detalladas
Para mejorar el rendimiento:
- Usar resolución de video más baja (480p)
- Reducir factor de suavizado
- Deshabilitar expresiones no necesarias
- Usar avatares VRM optimizados
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -m 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
Este proyecto está bajo la Licencia ISC. Ver el archivo LICENSE para más detalles.
- MediaPipe Team por las herramientas de computer vision
- Kalidokit por la conversión de landmarks
- VRM Consortium por el estándar de avatares 3D
- Three.js por el motor de renderizado 3D
Para reportar bugs o solicitar características:
- Abrir un issue en GitHub
- Proporcionar información detallada del problema
- Incluir información del navegador y sistema operativo
¡Disfruta creando avatares animados con expresiones faciales en tiempo real! 🎭