ai-virtual-mouse-controller 1.0.2__tar.gz → 1.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/PKG-INFO +2 -2
  2. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/ai_virtual_mouse_controller.egg-info/PKG-INFO +2 -2
  3. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/ai_virtual_mouse_controller.egg-info/requires.txt +1 -1
  4. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/__init__.py +1 -1
  5. ai_virtual_mouse_controller-1.0.4/main.py +80 -0
  6. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/pyproject.toml +6 -2
  7. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/tests/test_hologram_overlay.py +7 -0
  8. ai_virtual_mouse_controller-1.0.2/main.py +0 -47
  9. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/LICENSE +0 -0
  10. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/README.md +0 -0
  11. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/ai_virtual_mouse_controller.egg-info/SOURCES.txt +0 -0
  12. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/ai_virtual_mouse_controller.egg-info/dependency_links.txt +0 -0
  13. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/ai_virtual_mouse_controller.egg-info/entry_points.txt +0 -0
  14. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/ai_virtual_mouse_controller.egg-info/top_level.txt +0 -0
  15. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/config.py +0 -0
  16. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/camera.py +0 -0
  17. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/click_burst.py +0 -0
  18. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/cursor_controller.py +0 -0
  19. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/finger_posture.py +0 -0
  20. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/gesture_detector.py +0 -0
  21. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/hand_anchor.py +0 -0
  22. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/hand_mesh.py +0 -0
  23. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/hand_renderer.py +0 -0
  24. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/hand_tracker.py +0 -0
  25. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/hologram_gl_backend.py +0 -0
  26. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/hologram_overlay.py +0 -0
  27. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/perf_telemetry.py +0 -0
  28. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/runtime_settings.py +0 -0
  29. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/smoothing.py +0 -0
  30. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/ui_overlay.py +0 -0
  31. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/core/utils.py +0 -0
  32. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/services/__init__.py +0 -0
  33. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/services/virtual_mouse_service.py +0 -0
  34. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/setup.cfg +0 -0
  35. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/tests/test_click_burst.py +0 -0
  36. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/tests/test_cursor_click_at.py +0 -0
  37. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/tests/test_gesture_detector.py +0 -0
  38. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/tests/test_hand_renderer.py +0 -0
  39. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/tests/test_overlay_smoke.py +0 -0
  40. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/tests/test_perf_telemetry.py +0 -0
  41. {ai_virtual_mouse_controller-1.0.2 → ai_virtual_mouse_controller-1.0.4}/tests/test_smoothing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-virtual-mouse-controller
3
- Version: 1.0.2
3
+ Version: 1.0.4
4
4
  Summary: Controle de cursor por gestos da mao via webcam, com holograma 3D opcional.
5
5
  Author: Guilherme Moraes Franco
6
6
  License: MIT
@@ -27,7 +27,7 @@ Requires-Python: <3.14,>=3.11
27
27
  Description-Content-Type: text/markdown
28
28
  License-File: LICENSE
29
29
  Requires-Dist: opencv-python<5.0.0,>=4.10.0
30
- Requires-Dist: mediapipe<0.11.0,>=0.10.18
30
+ Requires-Dist: mediapipe<0.10.30,>=0.10.18
31
31
  Requires-Dist: pyautogui<1.0.0,>=0.9.54
32
32
  Requires-Dist: numpy<2.2.0,>=1.26.0
33
33
  Requires-Dist: moderngl>=5.10.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-virtual-mouse-controller
3
- Version: 1.0.2
3
+ Version: 1.0.4
4
4
  Summary: Controle de cursor por gestos da mao via webcam, com holograma 3D opcional.
5
5
  Author: Guilherme Moraes Franco
6
6
  License: MIT
@@ -27,7 +27,7 @@ Requires-Python: <3.14,>=3.11
27
27
  Description-Content-Type: text/markdown
28
28
  License-File: LICENSE
29
29
  Requires-Dist: opencv-python<5.0.0,>=4.10.0
30
- Requires-Dist: mediapipe<0.11.0,>=0.10.18
30
+ Requires-Dist: mediapipe<0.10.30,>=0.10.18
31
31
  Requires-Dist: pyautogui<1.0.0,>=0.9.54
32
32
  Requires-Dist: numpy<2.2.0,>=1.26.0
33
33
  Requires-Dist: moderngl>=5.10.0
@@ -1,5 +1,5 @@
1
1
  opencv-python<5.0.0,>=4.10.0
2
- mediapipe<0.11.0,>=0.10.18
2
+ mediapipe<0.10.30,>=0.10.18
3
3
  pyautogui<1.0.0,>=0.9.54
4
4
  numpy<2.2.0,>=1.26.0
5
5
  moderngl>=5.10.0
@@ -10,5 +10,5 @@ Versao do pacote vive em `__version__` e e' a fonte unica de verdade
10
10
 
11
11
  from __future__ import annotations
12
12
 
13
- __version__ = "1.0.2"
13
+ __version__ = "1.0.4"
14
14
  __all__ = ["__version__"]
@@ -0,0 +1,80 @@
1
+ """
2
+ main.py
3
+ =======
4
+
5
+ Entry point do AI Virtual Mouse Controller.
6
+
7
+ Uso:
8
+ python main.py
9
+
10
+ Ou como modulo:
11
+ python -m main
12
+
13
+ Sai com codigo:
14
+ 0 = ok
15
+ 1 = falha de webcam
16
+ 2 = erro inesperado
17
+ """
18
+
19
+ from __future__ import annotations
20
+
21
+ import logging
22
+ import sys
23
+
24
+
25
+ def _check_environment() -> None:
26
+ """Verifica versoes criticas ANTES de qualquer import do projeto.
27
+
28
+ Mediapipe 0.11+ removeu mp.solutions.hands que esse projeto usa.
29
+ Se o usuario tem 0.11+ instalado globalmente, mostramos mensagem
30
+ clara com comando de fix em vez de AttributeError obscuro.
31
+ """
32
+ try:
33
+ import mediapipe as mp
34
+ except ImportError:
35
+ sys.stderr.write(
36
+ "\nERRO: mediapipe nao esta instalado.\n"
37
+ "Solucao: pip install ai-virtual-mouse-controller\n\n"
38
+ )
39
+ sys.exit(1)
40
+
41
+ if not hasattr(mp, "solutions") or not hasattr(mp.solutions, "hands"):
42
+ version = getattr(mp, "__version__", "desconhecida")
43
+ sys.stderr.write(
44
+ "\n" + "=" * 70 + "\n"
45
+ f"ERRO: mediapipe {version} nao tem mp.solutions.hands.\n"
46
+ "Esse projeto requer mediapipe 0.10.18 a 0.10.21 — o modulo\n"
47
+ "'solutions' foi removido a partir da 0.10.30.\n\n"
48
+ "Solucao rapida (copia e cola no terminal):\n\n"
49
+ ' pip install "mediapipe>=0.10.18,<0.10.30" --force-reinstall\n\n'
50
+ "Depois roda 'avmc' de novo.\n"
51
+ + "=" * 70 + "\n\n"
52
+ )
53
+ sys.exit(1)
54
+
55
+
56
+ def _setup_logging() -> None:
57
+ import config
58
+ level = getattr(logging, config.LOG_LEVEL.upper(), logging.INFO)
59
+ logging.basicConfig(
60
+ level=level,
61
+ format="%(asctime)s | %(levelname)-7s | %(name)s | %(message)s",
62
+ datefmt="%H:%M:%S",
63
+ )
64
+
65
+
66
+ def main() -> int:
67
+ # Check ANTES de importar service (que ja tocaria em mediapipe)
68
+ _check_environment()
69
+
70
+ _setup_logging()
71
+ logger = logging.getLogger("main")
72
+ logger.info("AI Virtual Mouse Controller — iniciando...")
73
+
74
+ from services.virtual_mouse_service import VirtualMouseService
75
+ service = VirtualMouseService.from_config()
76
+ return service.run()
77
+
78
+
79
+ if __name__ == "__main__":
80
+ sys.exit(main())
@@ -11,7 +11,7 @@ build-backend = "setuptools.build_meta"
11
11
 
12
12
  [project]
13
13
  name = "ai-virtual-mouse-controller"
14
- version = "1.0.2"
14
+ version = "1.0.4"
15
15
  description = "Controle de cursor por gestos da mao via webcam, com holograma 3D opcional."
16
16
  readme = "README.md"
17
17
  requires-python = ">=3.11,<3.14"
@@ -42,7 +42,11 @@ classifiers = [
42
42
  ]
43
43
  dependencies = [
44
44
  "opencv-python>=4.10.0,<5.0.0",
45
- "mediapipe>=0.10.18,<0.11.0",
45
+ # CRITICAL: mediapipe 0.10.30+ removeu mp.solutions.hands que esse
46
+ # projeto usa. Range estreito 0.10.18-0.10.21 garante o modulo
47
+ # solutions presente. Quando migrarmos pro novo Task API podemos
48
+ # abrir esse range.
49
+ "mediapipe>=0.10.18,<0.10.30",
46
50
  "pyautogui>=0.9.54,<1.0.0",
47
51
  "numpy>=1.26.0,<2.2.0",
48
52
  # v1.0.2: holograma vira default — usuario que roda
@@ -162,6 +162,13 @@ class TestBurstFiring:
162
162
  not _PYSIDE_AVAILABLE,
163
163
  reason="PySide6 nao instalado",
164
164
  )
165
+ @pytest.mark.skipif(
166
+ os.environ.get("CI") == "true",
167
+ reason=(
168
+ "Render real Qt+OpenGL crasha em CI sem display server "
169
+ "(offscreen platform nao garante GL context). Roda local."
170
+ ),
171
+ )
165
172
  class TestRenderingNoCrash:
166
173
  """Garante que o paint roda sem crashar com varias configuracoes."""
167
174
 
@@ -1,47 +0,0 @@
1
- """
2
- main.py
3
- =======
4
-
5
- Entry point do AI Virtual Mouse Controller.
6
-
7
- Uso:
8
- python main.py
9
-
10
- Ou como modulo:
11
- python -m main
12
-
13
- Sai com codigo:
14
- 0 = ok
15
- 1 = falha de webcam
16
- 2 = erro inesperado
17
- """
18
-
19
- from __future__ import annotations
20
-
21
- import logging
22
- import sys
23
-
24
- import config
25
- from services.virtual_mouse_service import VirtualMouseService
26
-
27
-
28
- def _setup_logging() -> None:
29
- level = getattr(logging, config.LOG_LEVEL.upper(), logging.INFO)
30
- logging.basicConfig(
31
- level=level,
32
- format="%(asctime)s | %(levelname)-7s | %(name)s | %(message)s",
33
- datefmt="%H:%M:%S",
34
- )
35
-
36
-
37
- def main() -> int:
38
- _setup_logging()
39
- logger = logging.getLogger("main")
40
- logger.info("AI Virtual Mouse Controller — iniciando...")
41
-
42
- service = VirtualMouseService.from_config()
43
- return service.run()
44
-
45
-
46
- if __name__ == "__main__":
47
- sys.exit(main())