Controle de cursor por gestos de mao usando webcam, com processamento local em Python e integracao com o macOS.
O projeto implementa um MVP de interacao hands-free: captura frames da webcam, detecta landmarks da mao com MediaPipe, traduz movimentos e posturas em intencoes e emite eventos nativos de cursor no macOS.
- move o cursor a partir da posicao da mao
- reconhece clique esquerdo e clique direito por pinca
- sustenta arraste com pinca prolongada
- faz scroll com gesto de dois dedos
- troca de workspace no macOS com gesto horizontal de mao aberta
- aplica suavizacao temporal e assistencias de ponteiro para reduzir jitter
- oferece calibracao guiada e perfil persistido em disco
- Python 3.9+
- MediaPipe Tasks para hand tracking
- OpenCV para captura e normalizacao da webcam
pynputpara input do mouse- AppleScript /
osascriptpara integracoes nativas do macOS
- macOS
- webcam funcional
- Python instalado fora do runtime embutido do Xcode
- permissao de Camera
- permissao de Accessibility
O Makefile ja protege contra o uso de um interpretador Python do Xcode, porque esse runtime pode instalar uma variante de mediapipe incompativel com este MVP.
Crie um ambiente virtual e instale as dependencias:
make venv
make installPara desenvolvimento em modo editavel:
make dev-installExecucao principal:
make runOu diretamente pelo modulo:
PYTHONPATH=src python3 -m vision_mouse.mainCalibracao guiada:
PYTHONPATH=src python3 -m vision_mouse.main calibrateNa inicializacao, o app consulta o estado nativo da permissao de Camera no macOS e, na primeira execucao, dispara o prompt de autorizacao automaticamente antes de subir o pipeline.
Se a permissao de acessibilidade nao estiver liberada, o bootstrap tenta abrir o painel correto do sistema:
System Settings > Privacy & Security > Accessibility
Sem camera ou acessibilidade, o pipeline permanece bloqueado e nao emite eventos de input.
| Gesto | Acao |
|---|---|
| Movimento da mao com ponto de referencia do indicador | Mover cursor |
| Pinca entre polegar e indicador | Clique esquerdo |
| Pinca sustentada entre polegar e indicador | Inicio/manutencao/fim de arraste |
| Pinca entre polegar e dedo medio | Clique direito |
| Movimento vertical com dois dedos | Scroll |
| Movimento horizontal rapido com mao aberta | Troca de workspace no macOS |
A calibracao guiada mede alcance, estabilidade e distancia natural de pinca para ajustar partes do pipeline:
- janela operacional do cursor
- parametros de suavizacao
- deadzone e resistencias do pointer assist
- thresholds principais de gesto
Por padrao, o perfil eh salvo em:
~/.vision_mouse/profile.json
Voce pode sobrescrever esse caminho com:
VISION_MOUSE_PROFILE_PATH=/caminho/para/profile.jsonmake help
make test
make build
make package
make cleansrc/vision_mouse/
app/ bootstrap e coordenacao do estado operacional
calibration/ calibracao guiada e persistencia de perfil
capture/ sessao de webcam
domain/ contratos e tipos centrais
filters/ gate de confianca e suavizacao temporal
gestures/ reconhecimento de cliques, drag, scroll e navegacao
mapping/ mapeamento camera -> tela e pointer assist
observability/ telemetria do pipeline
pipeline/ runtime e roteamento de intencoes
platform/macos/ input nativo, permissoes e automacoes do sistema
vision/ provider de landmarks com MediaPipe
- A webcam captura um frame.
- O frame eh normalizado e enviado ao MediaPipe.
- O detector retorna landmarks da mao.
- O pipeline filtra confianca e suaviza a movimentacao.
- O motor de gestos produz intencoes semanticas.
- O roteador converte essas intencoes em eventos nativos do macOS.
- o foco atual eh exclusivamente macOS
- o processamento assume uma unica mao por vez
- a experiencia depende bastante de iluminacao, enquadramento e ergonomia
- o projeto ja possui gancho para macros, mas essa parte ainda esta em preparacao
- validar ergonomia em hardware real por sessoes mais longas
- expandir calibracao para multiplos monitores
- adicionar configuracao de gestos por perfil
- evoluir overlay e feedback visual de onboarding