Jogo Pac-Man controlado por uma rede neural treinada com imagens da sua webcam usando TensorFlow.js e React/Vite.
Este projeto é uma migração do jogo Pac-Man controlado por webcam originalmente desenvolvido pelo Google para React/Vite. Ele usa transfer learning com MobileNet para criar um classificador de imagens que permite controlar o Pac-Man com gestos capturados pela câmera.
- Captura de Exemplos: Usando sua webcam, você captura imagens para cada direção (cima, baixo, esquerda, direita)
- Treinamento: Uma rede neural é treinada usando transfer learning com MobileNet
- Jogo: A rede neural prevê a direção baseada na imagem da webcam em tempo real e controla o Pac-Man
- Node.js 18+ ou superior
- Webcam funcional
- Navegador moderno com suporte a WebGL
Quem só quer jogar não precisa de node_modules: use a versão já compilada.
- Baixe
pacman-webcam-dist.zipna página de Releases e extraia. - Dentro da pasta extraída, inicie qualquer servidor de arquivos estáticos, por exemplo:
python3 -m http.server 8080
- Abra
http://localhost:8080no navegador e permita o uso da câmera.
Na primeira abertura é preciso internet: o modelo de IA (MobileNet, ~2 MB) e as imagens do jogo (sprite do Pac-Man, joystick, botões e seta) são baixados enquanto uma tela de carregamento mostra o percentual, e ficam guardados no navegador (IndexedDB e Cache Storage). Nas próximas vezes o jogo abre sem internet.
Atenção: o navegador só libera a webcam em
localhostou em páginas HTTPS. Servir a pasta pela rede (http://192.168.x.x:8080) não libera a câmera: cada computador deve abrirhttp://localhost:...com a pasta no próprio computador. A pasta precisa ser servida na raiz do servidor, e o cache do modelo vale por navegador e por endereço (porta diferente = novo download).
# Instalar dependências
yarn install
# ou com npm
npm install- Iniciar o servidor de desenvolvimento:
yarn dev
# ou com npm
npm run dev-
Abrir no navegador: Acesse
http://localhost:5173 -
Treinar o modelo:
- Posicione-se em frente à webcam
- Para cada direção (cima, baixo, esquerda, direita):
- Clique e segure o botão "Adicionar Amostra"
- Faça o gesto ou posição que deseja usar para aquela direção
- Adicione pelo menos 30-50 exemplos por direção
- Ajuste os hiperparâmetros se necessário:
- Learning Rate: Taxa de aprendizado (padrão: 0.0001)
- Batch Size: Fração do dataset por batch (padrão: 0.4)
- Epochs: Número de épocas de treinamento (padrão: 40)
- Hidden Units: Unidades na camada oculta (padrão: 200)
- Clique em "TREINAR MODELO"
-
Jogar:
- Após o treinamento, clique em "JOGAR"
- Faça os gestos que você treinou para controlar o Pac-Man!
pacman-react/
├── index.html # Entrada do Vite
├── vite.config.js
├── public/
│ ├── pacman-google.js # Motor do jogo Pac-Man (legado, com ajustes)
│ ├── cc-logo-black-on-bg-transparent.png
│ └── favicon.ico
├── src/
│ ├── main.jsx # Bootstrap do React
│ ├── App.jsx # Componente principal
│ ├── LoadingScreen.jsx # Tela de carregamento com percentual
│ ├── assets.js # Baixa e guarda em cache sprite, joystick, botões e seta
│ ├── App.module.css # Estilos do componente
│ └── index.css # Estilos globais + Pac-Man
└── package.json
- React 19: Biblioteca de UI
- Vite: Bundler e servidor de desenvolvimento
- TensorFlow.js: Machine Learning no navegador
- TensorFlow.js Data: Captura de webcam
- MobileNet: Modelo pré-treinado para transfer learning
Os seguintes arquivos foram migrados do projeto original:
controller_dataset.js→ Integrado emsrc/App.jsxcomo classeindex.js→ Lógica integrada emsrc/App.jsxcom hooks Reactui.js→ Interface integrada emsrc/App.jsxcomo componente Reactindex.html→ Estrutura convertida para JSX emsrc/App.jsxpacman-google.js→ Copiado parapublic/pacman-google.js- Estilos → Migrados para
App.module.csseindex.css
Você pode ajustar os hiperparâmetros através da interface:
- Learning Rate: Controla a velocidade de aprendizado
- Batch Size: Tamanho do lote de treinamento
- Epochs: Quantas vezes o modelo verá todo o dataset
- Hidden Units: Complexidade da camada oculta
Para melhorar a precisão do modelo:
- Adicione mais exemplos (50-100 por direção)
- Use gestos distintos para cada direção
- Mantenha iluminação consistente
- Evite fundos muito complexos
- Aumente o número de epochs (mas cuidado com overfitting)
- Verifique se sua webcam está conectada e funcionando
- Permita o acesso à webcam quando solicitado pelo navegador
- Teste em outro navegador se o problema persistir
- Adicione mais exemplos de treinamento
- Use gestos mais distintos entre as direções
- Retreine o modelo com diferentes hiperparâmetros
- Verifique se o arquivo
pacman-google.jsestá empublic/ - Verifique o console do navegador para erros
- Certifique-se de que todas as dependências foram instaladas
Este projeto é baseado no código original do Google (Apache License 2.0) e foi migrado para React/Vite. Veja o arquivo LICENSE.
Este é um projeto educacional e sem fins lucrativos, desenvolvido na UFFS. Ele não é afiliado, patrocinado ou endossado pela BANDAI NAMCO Entertainment Inc. nem pelo Google.
PAC-MAN™ © BANDAI NAMCO Entertainment Inc. O nome, os personagens e os sprites pertencem aos seus respectivos titulares e não são cobertos pela licença deste repositório.
| Componente | Origem | Licença |
|---|---|---|
Motor do jogo (public/pacman-google.js) |
Google Doodle de 2010 (versão de 2018), com ajustes neste projeto | Apache 2.0; PAC-MAN™ © BANDAI NAMCO |
Sprite do Pac-Man (baixado em tempo de execução de storage.googleapis.com/tfjs-examples/...) |
tfjs-examples | PAC-MAN™ © BANDAI NAMCO; não é redistribuído neste repositório |
Joystick, botão e seta (baixados via jsDelivr, fixados no commit a4aede3) |
tfjs-examples/webcam-transfer-learning | Apache 2.0 |
MobileNet v1 0.25, 224px (pesos baixados em tempo de execução de storage.googleapis.com/tfjs-models; copyright The TensorFlow Authors / Google LLC) |
tfjs-models | Apache 2.0. Os pesos foram treinados no ImageNet, que tem termos de uso próprios (https://www.image-net.org/download) |
| TensorFlow.js | tensorflow/tfjs | Apache 2.0 |
| React, Vite, MUI | Respectivos projetos | MIT |
- Código original do jogo: Google LLC
- PAC-MAN: BANDAI NAMCO Entertainment Inc.
- Modelo MobileNet: The TensorFlow Authors / Google LLC
- Migração para React/Vite: Este projeto
Sinta-se à vontade para abrir issues e pull requests com melhorias!