Controlador por gestos para Subway Surfers com arquitetura profissional, API REST, dashboard web, perfis de calibração e telemetria em tempo real.
Este projeto transforma movimentos da mão em comandos de teclado para jogos de corrida (foco: Subway Surfers), usando visão computacional com MediaPipe.
- Reduz dependência de teclado/mouse para ações repetitivas.
- Permite calibrar sensibilidade por ambiente (luz, câmera, distância).
- Oferece monitoramento operacional (FPS, ação ativa, presença de mão, perfil).
- Jogadores que querem controle gestual.
- Desenvolvedores que estudam HCI (Human-Computer Interaction).
- Times de produto/engenharia que precisam de base extensível para visão em tempo real.
O sistema foi refatorado para separar domínio, aplicação, infraestrutura e apresentação.
domain: entidades centrais (Action,Profile,TelemetrySnapshot).services: regras de negócio (interpretação de gesto, gestão de perfis, telemetria).core: detecção de mão e orquestração de comandos de jogo.infrastructure: adaptadores de câmera e teclado.ui: HUD OpenCV focada em legibilidade e feedback em tempo real.api: backend FastAPI para integração externa e dashboard.
SOLID: responsabilidade única por módulo e dependências explícitas.DRY: regras de gesto e validações centralizadas.Clean Architecture: domínio independente de framework/UI.
Foram implementadas duas experiências:
-
HUD OpenCV (tempo real):
- hierarquia visual mais clara (header, zonas de pista, legenda, status);
- contraste e feedback de estado por ação;
- comandos contextuais (
Q,P,H) para operação sem interrupção.
-
Dashboard Web (
/dashboard):- visual moderno com design tokens e responsividade;
- monitoramento de telemetria e sparkline de FPS;
- CRUD de perfis com ativação imediata.
Backend em FastAPI com:
- versionamento de endpoints (
/v1); - contratos validados via Pydantic;
- CORS configurável por ambiente;
- autenticação opcional por
x-api-key; - validação forte de perfil (nome seguro, ranges e limites);
- telemetria persistida em
runtime/telemetry.json.
GET /v1/healthGET /v1/configGET /v1/profilesGET /v1/profiles/{name}PUT /v1/profiles/{name}POST /v1/profiles/{name}/activateGET /v1/telemetry?limit=30
- Perfis JSON versionáveis em
profiles/*.json. - Perfil ativo em
runtime/active_profile.txt. - Histórico de telemetria em
runtime/telemetry.json(janela deslizante).
- API REST para gestão de perfis e telemetria.
- Dashboard web para observabilidade e configuração.
- Perfis de calibração com troca dinâmica em runtime (
Pno controlador). - CLI com modos operacionais:
controllerapiall(API + controlador).
- Logging estruturado com rotação em
runtime/logs.
Testes automatizados cobrindo:
- interpretação de gestos (
tests/test_gesture_service.py); - serviço de perfis (
tests/test_profile_service.py); - contratos da API (
tests/test_api.py).
Execução local dos testes:
python -m pytest- Python 3.10+
- OpenCV
- MediaPipe Tasks
- FastAPI
- Uvicorn
- Pydantic
- PyNput
- PyGetWindow
- Pytest
Subway-Surf-main/
├── dashboard/
│ ├── index.html
│ ├── styles.css
│ └── app.js
├── profiles/
│ └── default.json
├── runtime/
├── src/
│ ├── api/
│ │ ├── app.py
│ │ ├── schemas.py
│ │ └── security.py
│ ├── app/
│ │ └── runner.py
│ ├── core/
│ │ ├── controller.py
│ │ └── detector.py
│ ├── domain/
│ │ ├── actions.py
│ │ └── models.py
│ ├── infrastructure/
│ │ ├── camera.py
│ │ └── keyboard_adapter.py
│ ├── services/
│ │ ├── gesture_service.py
│ │ ├── profile_service.py
│ │ └── telemetry_service.py
│ ├── ui/
│ │ └── display.py
│ └── utils/
│ ├── config.py
│ └── logger.py
├── tests/
├── main.py
└── requirements.txt
git clone https://github.com/matheussiqueira-dev/Subway-Surf.git
cd Subway-Surf-main
python -m pip install -r requirements.txtpython main.py --mode controllerpython main.py --mode api --api-host 127.0.0.1 --api-port 8000Dashboard:
http://127.0.0.1:8000/dashboard- Swagger/OpenAPI:
http://127.0.0.1:8000/docs
python main.py --mode all- Executar com Uvicorn/Gunicorn atrás de Nginx.
- Definir
API_KEYeAPI_ALLOW_ORIGINS. - Isolar
runtime/eprofiles/em volume persistente.
CAMERA_INDEX(padrão0)CAMERA_NAME(padrãoBRIO)LEFT_BOUND/RIGHT_BOUNDDETECTION_CONFIDENCEPRESENCE_CONFIDENCETRACKING_CONFIDENCEACTION_COOLDOWN_MSAUTO_FOCUS_WINDOWAPI_HOST/API_PORTAPI_KEYAPI_ALLOW_ORIGINSLOG_LEVEL
- Persistência em banco SQL (PostgreSQL) para analytics de sessões.
- Modelo de gesture classification treinado para maior precisão.
- WebSocket para telemetria live sem polling.
- Perfil por usuário com autenticação JWT e RBAC.
- Pipeline CI/CD com quality gates (lint, test, security scan).
Autoria: Matheus Siqueira
Website: https://www.matheussiqueira.dev/