Jogo da Forca com reconhecimento de sinais de LIBRAS usando MediaPipe Tasks Vision e TensorFlow.js. Construído com Next.js (App Router), React 19, Tailwind CSS v4 e componentes shadcn/ui.
Este projeto permite jogar Forca enquanto a câmera detecta, em tempo real, o gesto feito com a mão. A detecção usa o HandLandmarker (MediaPipe) para extrair landmarks e um modelo TensorFlow.js para classificar as letras. Há regras hardcoded para alguns sinais (R, T, N) e fallback para o modelo quando necessário.
Principais páginas e componentes:
src/app/page.tsx— página inicial com botão “Iniciar o jogo”.src/app/game/page.tsx— página do jogo, integra câmera, detecção de sinais, estado do jogo e HUD.src/app/analytics— página simples de métricas locais (localStorage) e exemplo de dados de IP/geo.src/components/GameCanvas.tsx— loop de vídeo, inicialização do MediaPipe, renderização e detecção em tempo real.src/components/adviseModal.tsx— modal de aviso que abre automaticamente por 5s ao acessar/game.src/lib/modelService.ts— carregamento do modelo TFJS (em/public/libras-model).src/lib/signLogic.ts— regras hardcoded para alguns sinais e integração com o modelo.src/lib/metrics.ts— métricas persistidas emlocalStorage.src/middleware.ts— exemplo de coleta de IP/geo (apenas demonstrativo).
- Node.js >= 18.17
- npm, pnpm ou yarn
-
Instale as dependências:
npm install
-
Ambiente de desenvolvimento:
npm run dev # abra http://localhost:3000 -
Build de produção:
npm run build npm run start
Scripts disponíveis (package.json):
dev— inicia o servidor de desenvolvimento do Next.build— compila a aplicação.start— inicia a aplicação compilada.lint— roda o ESLint.
- Acesse
http://localhost:3000e clique em “Iniciar o jogo”. - Conceda permissão para a câmera quando solicitado.
- Ao entrar em
/game, o AdviseModal abre automaticamente por 5 segundos (overlay escuro com blur) para dar tempo da câmera carregar. - Faça o gesto da letra desejada com a mão; a detecção em tempo real aparece no HUD.
- Acerte as letras da palavra. O jogo controla vidas, combinações (combo) e mostra telas de vitória/derrota.
- MediaPipe HandLandmarker (Tasks Vision) extrai landmarks da mão.
- O TensorFlow.js classifica os landmarks em letras com o modelo em
public/libras-model/model.json. - Algumas letras têm regras hardcoded (R, T, N) para maior robustez; caso nenhuma regra se aplique, usa-se o modelo.
Arquivos relevantes:
src/components/GameCanvas.tsx— inicializa MediaPipe, requisitagetUserMedia, e executa o loop de detecção.src/lib/modelService.ts— carrega o modelo via caminho relativo'/libras-model/model.json'(sem depender dewindow).public/hand_landmarker.task— arquivo necessário pelo MediaPipe.public/libras-model/— artefatos do modelo TFJS.
public/
hand_landmarker.task
libras-model/
model.json
group1-shard1of1.bin
src/
app/
page.tsx
game/page.tsx
analytics/
globals.css
layout.tsx
components/
GameCanvas.tsx
adviseModal.tsx
ui/
lib/
modelService.ts
signLogic.ts
metrics.ts
middleware.ts