Controle de cursor por gestos da mao via webcam, com holograma 3D opcional.
Project description
AI Virtual Mouse Controller
Controle seu computador com gestos da mão.
Webcam → 21 landmarks → cursor do sistema. Sem hardware extra. Sem GPU.
🖐️ mover |
🤏 clique |
🤞 clique direito |
✌️ duplo clique |
✊ pausa |
O que é
Sistema gestual de controle de cursor com qualidade comparável a periféricos físicos. O MediaPipe identifica 21 pontos da mão em tempo real, uma state machine traduz gestos em eventos do sistema operacional (move, click, drag, scroll), e um holograma 3D opcional renderiza a mão virtual sobre o desktop.
100% local. Sem nuvem, sem telemetria, sem persistir nada da webcam.
Stack: Python 3.11+ · OpenCV · MediaPipe · PyAutoGUI · NumPy · ModernGL/PySide6 (opcional)
Instalar
Requer Python 3.11 ou 3.12 + webcam.
pip install ai-virtual-mouse-controller
avmc
Posicione a mão a ~50cm da câmera. Atalhos em runtime:
| Tecla | Ação |
|---|---|
H |
liga/desliga o holograma 3D |
S |
abre/fecha o painel de configurações |
T |
alterna janela sempre-no-topo |
ESC |
sai |
Instalação via clone do repositório
git clone https://github.com/ognistie/ai-virtual-mouse-controller.git
cd ai-virtual-mouse-controller
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python main.py
Para desenvolvimento: make dev instala dependências + pre-commit hooks.
Atualizar
pip install --upgrade ai-virtual-mouse-controller
Conferir a versão instalada:
pip show ai-virtual-mouse-controller
Se quiser pular o cache do pip e baixar do PyPI direto:
pip install --no-cache-dir --upgrade ai-virtual-mouse-controller
Para quem instalou via clone do repo:
cd ai-virtual-mouse-controller
git pull origin main
pip install -r requirements.txt
Histórico de mudanças em CHANGELOG.md.
Gestos
| Gesto | Símbolo | Ação |
|---|---|---|
| Mão aberta — 4 dedos pra cima | 🖐️ | Move o cursor |
| Pinça polegar + indicador | 🤏 | Clique simples |
| Pinça polegar + indicador (1,5s+) | 🤏 | Iniciar arrasto (drag) |
| Pinça polegar + médio | 🤞 | Clique direito |
| Dois dedos (paz) | ✌️ | Duplo clique |
| Punho fechado | ✊ | Cursor congelado |
| Mão fora do frame | — | Pausa automática |
Os cliques (esquerdo e direito) disparam no press — assim que os dedos se encostam — replicando o feedback de um botão físico.
Configuração
Toda a calibração vive em config.py — constantes nomeadas com docstrings explicando o quê, o porquê e o intervalo de ajuste. Principais grupos:
| Seção | O que controla |
|---|---|
CAMERA |
índice da câmera, resolução, FPS alvo |
CURSOR_ANCHOR |
qual ponto da mão o cursor segue (-2 = âncora robusta, default) |
PINCH |
thresholds de detecção de clique (com escala adaptativa por tamanho da mão) |
DPI / SMOOTHING |
sensibilidade do cursor + filtro OneEuro |
SCREEN_MARGIN_* |
margens assimétricas (top/bottom < lateral) pra alcançar cantos |
CURSOR_FOLLOWTHROUGH_* |
cinematic prediction quando a mão sai do FOV |
HOLOGRAM |
backend (GL/QPainter), cor, opacidade, FPS |
Ajustes em tempo de execução também ficam disponíveis no painel (tecla S) — perfis prontos: smooth, precise, responsive, stable.
Compatibilidade
| OS | Setup adicional |
|---|---|
| 🪟 Windows 10/11 | Nada. Funciona out-of-the-box após pip install. |
| 🍎 macOS | Após primeiro run, liberar System Settings → Privacy & Security → Accessibility (cursor) e Camera (webcam). Em Apple Silicon, se PyAutoGUI reclamar: pip install pyobjc-core pyobjc. |
| 🐧 Linux (X11) | sudo apt install scrot python3-tk python3-dev (Ubuntu/Debian). PyAutoGUI precisa desses pra capturar a tela. |
| 🐧 Linux (Wayland) | Suporte limitado de PyAutoGUI. Recomendado mudar pra sessão X11. |
Mediapipe pin: o projeto usa
mediapipe < 0.10.30. Versões 0.10.30+ removeram o módulomp.solutions.handsque sustenta o pipeline. Opyproject.tomljá fixa o limite — não há nada manual pra fazer.
Como funciona
webcam → MediaPipe Hands (21 landmarks)
↓
RobustHandAnchor ← combina anatomia + estabilidade + edge extrapolation
↓
GestureDetector ← state machine: shape → event (CLICK, MOVE, DRAG…)
↓
OneEuroSmoother ← filtro adaptativo de cursor
↓
CursorController ← PyAutoGUI move o cursor real
Componentes auxiliares: HologramOverlay (renderização 3D opcional via ModernGL), RuntimeSettings (perfis e sliders), PerfTelemetry (timing p50/p99 por estágio).
Estrutura de pastas:
core/ # camera, hand_tracker, gesture_detector, hand_anchor, smoothing
services/ # orquestração do loop principal
config.py # constantes de calibração documentadas
main.py # entry point
tests/ # cobertura dos módulos puros (sem cv2/mediapipe)
docs/ # site estático + assets
Contribuir
Issues, PRs e feedback técnico são bem-vindos. Comece em CONTRIBUTING.md. Bugs em issues.
Workflow local rápido:
make dev # instala deps + hooks
make check # ruff + mypy + pytest
make test-fast # só testes rápidos (sem GPU/integration/slow)
make test-gpu # só testes que precisam de display/GPU real
make test-cov # com coverage HTML
Testes marcados com gpu (overlay PySide6/ModernGL) ficam fora do pytest default — eles requerem display real e podem crashar em ambientes headless. Rode-os explicitamente com make test-gpu quando estiver mexendo no holograma.
MIT © Guilherme Moraes Franco
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_virtual_mouse_controller-1.1.0.tar.gz.
File metadata
- Download URL: ai_virtual_mouse_controller-1.1.0.tar.gz
- Upload date:
- Size: 111.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b79448c455b985468f65b0ae25ffb3c84a2db649deffb277c90e4d6300b727b
|
|
| MD5 |
9af85480ac92ab641d7192df9b9717af
|
|
| BLAKE2b-256 |
e6f4ac1e354757e6737984beedacd658e401f8c5b6ece025c45f9b93b95aac26
|
Provenance
The following attestation bundles were made for ai_virtual_mouse_controller-1.1.0.tar.gz:
Publisher:
publish.yml on ognistie/ai-virtual-mouse-controller
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_virtual_mouse_controller-1.1.0.tar.gz -
Subject digest:
4b79448c455b985468f65b0ae25ffb3c84a2db649deffb277c90e4d6300b727b - Sigstore transparency entry: 1873669643
- Sigstore integration time:
-
Permalink:
ognistie/ai-virtual-mouse-controller@0cefd7cabf8066f72b01ee3939181cfca81e3fb4 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/ognistie
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0cefd7cabf8066f72b01ee3939181cfca81e3fb4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ai_virtual_mouse_controller-1.1.0-py3-none-any.whl.
File metadata
- Download URL: ai_virtual_mouse_controller-1.1.0-py3-none-any.whl
- Upload date:
- Size: 106.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a1ad3e3e317c5f047d863273f5230c88490c654e2fd0bcceab016b7e353fb97
|
|
| MD5 |
77607dd0afc7e89ef69c382fe825e118
|
|
| BLAKE2b-256 |
376a15a199aa6c92e3a7004653c3ea2ed25d3e1272fd33ca26b669046d4b2204
|
Provenance
The following attestation bundles were made for ai_virtual_mouse_controller-1.1.0-py3-none-any.whl:
Publisher:
publish.yml on ognistie/ai-virtual-mouse-controller
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_virtual_mouse_controller-1.1.0-py3-none-any.whl -
Subject digest:
5a1ad3e3e317c5f047d863273f5230c88490c654e2fd0bcceab016b7e353fb97 - Sigstore transparency entry: 1873669731
- Sigstore integration time:
-
Permalink:
ognistie/ai-virtual-mouse-controller@0cefd7cabf8066f72b01ee3939181cfca81e3fb4 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/ognistie
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0cefd7cabf8066f72b01ee3939181cfca81e3fb4 -
Trigger Event:
push
-
Statement type: