Este repositorio contiene la arquitectura completa (Prueba de Concepto) del sistema SmashCam, diseñado para operar con 0% de intervención humana. El sistema graba partidos de pádel, procesa el video con inteligencia artificial (mockeado en esta fase) y genera videos highlights en formato vertical (9:16) listos para redes sociales.
La solución está dividida en tres microservicios principales:
- SmashCam.LocalBackend: Orquestador local (.NET 10).
- SmashCam.CloudAI: Servicio de procesamiento en la nube (Python/FastAPI).
- SmashCam.KioskUI: Interfaz de Kiosco para los jugadores (Next.js/React).
Para ejecutar la solución de forma local necesitas:
- .NET 10 SDK (para el Local Backend)
- Python 3.10+ (para el Cloud AI)
- Node.js 18+ y npm (para el Kiosk UI)
- FFmpeg: Debes tener
ffmpeginstalado en tu sistema (sudo apt-get install ffmpegen Linux o vía Homebrew en macOS) para poder capturar streams y renderizar videos.
Nota para Simulaciones: En desarrollo, el Local Backend utiliza la URL de stream
rtsp://localhost:8554/cam1. Puedes usar herramientas como MediaMTX para simular una cámara IP en tu equipo. Si la cámara falla, el backend incluye un fallback automático que copiará un archivosample.mp4para no interrumpir el flujo.
Para simular el flujo completo end-to-end, debes levantar los tres servicios de manera concurrente.
Este servicio se encarga de recibir el video, simular la detección de mejores jugadas y utilizar FFmpeg para convertirlo a formato 9:16.
cd SmashCam.CloudAI
python -m pip install virtualenv
python -m virtualenv venv
source venv/bin/activate
pip install fastapi uvicorn requests python-multipart
python -m uvicorn main:app --host 0.0.0.0 --port 8000El servicio quedará escuchando en http://localhost:8000.
Este servicio orquesta las cámaras locales, gestiona los turnos en una base de datos SQLite y se comunica con el servicio Cloud.
cd SmashCam.LocalBackend
dotnet build
dotnet run --urls="http://localhost:5000"El servicio local quedará escuchando en http://localhost:5000.
Esta es la interfaz de usuario estilo "Tablet" que utilizan los jugadores para iniciar y finalizar los partidos.
cd SmashCam.KioskUI
npm install
npm run dev -- -p 3000La UI estará disponible en tu navegador en http://localhost:3000.
La solución viene pre-configurada para que los servicios se comuniquen entre sí asumiendo que corren en los puertos por defecto indicados arriba (5000 para .NET, 8000 para Python).
- Cambiar Endpoints: Si necesitas cambiar la URL de la nube, puedes inyectar o modificar los valores en el archivo
appsettings.jsonoappsettings.Development.jsondentro deSmashCam.LocalBackend.{ "CloudAI": { "Endpoint": "http://localhost:8000/api/process_video" }, "LocalWebhook": "http://localhost:5000/api/match/webhook" } - Modo Mock de Inteligencia Artificial: Por defecto, el Cloud Service procesa el endpoint utilizando
mock_mode=truepara saltarse los pesados cómputos de GPU (YOLOv8, Optical Flow) y directamente generar los clips y recortes con tiempos ficticios. Esta bandera es enviada por elLocalBackenden cada subida de archivo.
- Abre tu navegador y dirígete a
http://localhost:3000(Kiosk UI). - Presiona INICIAR PARTIDO. (Verás que el LocalBackend en la terminal registra que inicia la captura de video vía FFmpeg).
- Espera un momento y luego presiona FINALIZAR PARTIDO.
- La UI entrará en estado "Procesando Video". En la terminal verás cómo el LocalBackend detiene FFmpeg y sube el archivo (o su fallback) al servicio Cloud AI.
- El Cloud AI renderizará el clip (con formato vertical 9:16) y ejecutará el Webhook de retorno al LocalBackend.
- Automáticamente, el Kiosco detectará el evento completado y te mostrará el botón con el enlace ficticio para ver el Highlight. ¡Listo!