Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SmashCam: Sistema de Cámaras Inteligentes para Canchas de Pádel

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:

  1. SmashCam.LocalBackend: Orquestador local (.NET 10).
  2. SmashCam.CloudAI: Servicio de procesamiento en la nube (Python/FastAPI).
  3. SmashCam.KioskUI: Interfaz de Kiosco para los jugadores (Next.js/React).

🛠️ Requisitos Previos

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 ffmpeg instalado en tu sistema (sudo apt-get install ffmpeg en 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 archivo sample.mp4 para no interrumpir el flujo.


🚀 Cómo Ejecutar la Solución Localmente

Para simular el flujo completo end-to-end, debes levantar los tres servicios de manera concurrente.

1. Levantar Cloud AI Service (Python)

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 8000

El servicio quedará escuchando en http://localhost:8000.

2. Levantar Local Edge Orchestrator (.NET)

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.

3. Levantar Kiosk UI (Next.js)

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 3000

La UI estará disponible en tu navegador en http://localhost:3000.


⚙️ Configuración Adicional

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.json o appsettings.Development.json dentro de SmashCam.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=true para 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 el LocalBackend en cada subida de archivo.

🧪 Simulando un Flujo Completo

  1. Abre tu navegador y dirígete a http://localhost:3000 (Kiosk UI).
  2. Presiona INICIAR PARTIDO. (Verás que el LocalBackend en la terminal registra que inicia la captura de video vía FFmpeg).
  3. Espera un momento y luego presiona FINALIZAR PARTIDO.
  4. 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.
  5. El Cloud AI renderizará el clip (con formato vertical 9:16) y ejecutará el Webhook de retorno al LocalBackend.
  6. Automáticamente, el Kiosco detectará el evento completado y te mostrará el botón con el enlace ficticio para ver el Highlight. ¡Listo!

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages