Resumo
A demo lê até duas mãos pela câmera com o MediaPipe Hand Landmarker e classifica 11 gestos por regras sobre os 21 pontos da mão. Uma votação por maioria em 5 quadros estabiliza a leitura, e a interface anuncia o gesto ao leitor de tela.
Case de projeto
Reconhecimento de 11 gestos de mão pela câmera, no navegador, com regras explicáveis e degradação para CPU.
Demo web que reconhece 11 gestos de mão pela câmera, no navegador, com MediaPipe, regras explicáveis e troca de GPU para CPU. Nenhum vídeo sai da máquina.
Repositório público; referência auditada na branch main, commit abacb02.

A demo lê até duas mãos pela câmera com o MediaPipe Hand Landmarker e classifica 11 gestos por regras sobre os 21 pontos da mão. Uma votação por maioria em 5 quadros estabiliza a leitura, e a interface anuncia o gesto ao leitor de tela.
Interfaces por gesto costumam exigir instalação local ou enviar vídeo para um servidor, e classificadores opacos não explicam por que um gesto foi reconhecido.
A versão web foi escrita sobre a lógica da versão Python, com fixtures compartilhadas entre as duas.
Os quadros vêm da câmera do usuário e são processados no navegador. Os testes usam cerca de 15 poses sintéticas compartilhadas entre TypeScript e Python; o reconhecimento com mão real foi conferido manualmente.
Da câmera ao gesto anunciado, em uma única página Next.js.
getUserMedia e requestVideoFrameCallback, com requestAnimationFrame como alternativa, descartando quadros repetidos.
detectForVideo do Hand Landmarker na thread principal, em GPU com troca para CPU.
Rastreador por mão com votação por maioria em 5 quadros.
Overlay dos pontos em Canvas 2D a cada quadro inferido; interface React a cerca de 10 Hz.
O que a demo mede e mostra durante a sessão.
| Definição | Unidade | Regra de cálculo | Uso | Limitação |
|---|---|---|---|---|
| Tempo de inferênciaDuração de cada chamada ao modelo. | ms | Diferença de performance.now() em volta de detectForVideo. | Mostrar o custo do modelo no painel de sessão. | Depende do hardware e do delegate em uso. |
| Gesto estabilizadoGesto mais frequente nos últimos 5 quadros da mão. | rótulo | Votação por maioria por mão. | Evitar trocas de gesto quadro a quadro. | Atrasa a resposta em alguns quadros. |
Duração de cada chamada ao modelo.
Gesto mais frequente nos últimos 5 quadros da mão.
Aplicação e código verificados sem login na branch main, commit abacb02.
Aplicação pública
Página inicial, demo, painel de sessão e página sobre.
Abrir evidênciaReferência de código
Padrão de dedos, pinça e OK para os 11 gestos.
Abrir evidênciaReferência de códigoweb/src/lib/gestures/analyze.ts
Referência de código
Votação em 5 quadros por mão.
Abrir evidênciaReferência de códigoweb/src/lib/gestures/smoothing.ts
Referência de código
Agendamento por quadro, inferência, troca para CPU e anúncio acessível.
Abrir evidênciaReferência de códigoweb/src/components/demo/CameraDemo.tsx
Referência de código
Contexto inseguro, permissão negada, câmera ocupada e falha do modelo.
Referência de códigoweb/src/lib/camera.ts
Repositório público
Snapshot público usado nesta auditoria.
Abrir evidênciaContagens do repositório no commit auditado. Não há medida de acurácia com mão real.
Repositório público, commit abacb02.
Capturas da demo publicada.



Próximo projeto
Produto analítico web demonstrativo para explorar arrecadação sintética, metas, variações temporais e composição das receitas em uma interface executiva.
Ver case completo