AI Virtual Mouse Controller
Controle seu computador com gestos da mão.
Webcam → 21 landmarks → cursor do sistema. Sem hardware extra. Sem GPU.
AI-powered virtual mouse controller for Windows, macOS, and Linux. Control the mouse cursor, left and right clicks, drag-and-drop, and presentations with real-time hand gestures captured by a standard webcam. Built with Python, OpenCV, MediaPipe Hands, and PyAutoGUI; runs locally without sending camera images to the cloud.
🖐️ mover |
🤏 clique |
🤞 clique direito |
✌️ duplo clique |
✊ pausa |
O que é
O AI Virtual Mouse Controller é um mouse virtual com reconhecimento de gestos pela webcam. 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.10+ · OpenCV · MediaPipe · PyAutoGUI · NumPy · PySide6 (holograma 3D via OpenGL do Qt)
Instalar
Requer Python 3.10 ou mais novo (testado de 3.10 a 3.14) + webcam.
pip install ai-virtual-mouse-controller
avmc
Windows — "avmc não é reconhecido"? O instalador novo do Python (padrão no 3.14) não põe a pasta
Scriptsno PATH. Rode uma vez:py -m avmcO AVMC abre e adiciona essa pasta ao PATH do seu usuário (sem admin). A partir daí, num terminal novo,
avmcfunciona. Pra não mexer no PATH, definaAVMC_NO_PATH_SETUP=1.
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
Vindo da 1.1.2 ou anterior? O projeto trocou opencv-python por
opencv-contrib-python (mesmo cv2, usado pelo MediaPipe). Remova o antigo
pra os dois não disputarem a mesma pasta:
pip uninstall -y opencv-python
pip install --force-reinstall --no-deps "opencv-contrib-python>=4.10,<5"
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 |
PROFILE |
perfil inicial do painel: smooth, precise, responsive, stable |
CURSOR_ANCHOR |
qual ponto da mão o cursor segue (-2 = âncora robusta, default) |
PINCH |
thresholds de detecção de clique (escala adaptativa por tamanho da mão + histerese pra soltar) |
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 |
estilo (quest, graphite, neon), backend (OpenGL/QPainter), tamanho, 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 | Mac Intel: use Python ≤ 3.12 (o MediaPipe novo só publica wheel pra Apple Silicon). 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 libegl1 (Ubuntu/Debian). PyAutoGUI precisa dos três primeiros pra capturar a tela; o MediaPipe precisa do libegl1. |
| 🐧 Linux (Wayland) | Suporte limitado de PyAutoGUI. Recomendado mudar pra sessão X11. |
MediaPipe: o rastreamento usa a Tasks API (
HandLandmarker), disponível emmediapipe >= 0.10.18. O modelo (core/models/hand_landmarker.task) vem dentro do pacote — roda offline, sem download extra.
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 (mão 3D estilo headset VR: hand_pose → hand_mesh → shader OpenGL do Qt, com fallback 2D QPainter), 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
scripts/ # eval_motion.py: mede jitter/atraso/cliques com mãos sintéticas
tests/ # unitários + gate de qualidade de movimento
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/OpenGL) 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
Metadata
Release files for ai-virtual-mouse-controller 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ai_virtual_mouse_controller-1.3.0.tar.gz | 6.0 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ai_virtual_mouse_controller-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.0 MB
Release files / ai_virtual_mouse_controller-1.3.0.tar.gz
| Download URL | ai_virtual_mouse_controller-1.3.0.tar.gz |
|---|---|
| Size | 6.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8974fbe1955499fb5329c11db7b27c02e5759b814398c5ba0b157eb4c03ef190
|
|
BLAKE2b-256 checksum How to use checksums |
6270c3eb3df3aa0903d84adbeb9b0de7bed109d0d59ed0180232b69b49c94c63
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / ai_virtual_mouse_controller-1.3.0-py3-none-any.whl
| Download URL | ai_virtual_mouse_controller-1.3.0-py3-none-any.whl |
|---|---|
| Size | 6.0 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cf3fe6ee628ab6a86d4527793f5c57fc2bae61c6fa07613fee74b9722027169b
|
|
BLAKE2b-256 checksum How to use checksums |
0411ac8b058f578afe2888d299e79c9c3a0c10a775b198e53f79f889d9d9e4d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency log