nano-wait 2.0__py3-none-any.whl → 3.1.0__py3-none-any.whl

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.

Potentially problematic release.


This version of nano-wait might be problematic. Click here for more details.

nano_wait/vision.py ADDED
@@ -0,0 +1,111 @@
1
+ import time
2
+ import pytesseract
3
+ import pyautogui
4
+ from pynput.mouse import Controller, Button
5
+ from PIL import ImageGrab, ImageOps
6
+ import re
7
+
8
+ class VisionMode:
9
+ """
10
+ Classe para captura e interpretação visual da tela.
11
+ Modos disponíveis:
12
+ - "observe": apenas lê e exibe dados detectados.
13
+ - "decision": lê dados e toma decisões automáticas.
14
+ - "learn": registra padrões visuais para uso futuro.
15
+ """
16
+
17
+ def __init__(self, mode="observe"):
18
+ self.mode = mode
19
+ self.mouse = Controller()
20
+ print(f"🔍 VisionMode iniciado no modo '{self.mode}'")
21
+
22
+ def capture_numbers(self, regions=None):
23
+ results = {}
24
+ if not regions:
25
+ regions = [None]
26
+
27
+ for idx, region in enumerate(regions):
28
+ print(f"📸 Capturando região {idx + 1}...")
29
+ if region:
30
+ x, y, w, h = region
31
+ if w <= 0 or h <= 0:
32
+ raise ValueError("Largura e altura devem ser maiores que 0")
33
+ bbox = (x, y, x + w, y + h)
34
+ img = ImageGrab.grab(bbox=bbox)
35
+ else:
36
+ img = ImageGrab.grab()
37
+
38
+ img = ImageOps.grayscale(img)
39
+ text = pytesseract.image_to_string(img)
40
+ print(f"🧠 Texto detectado na região {idx + 1}: {text}")
41
+
42
+ match = re.findall(r'\d+', text)
43
+ numbers = [int(m) for m in match] if match else [0]
44
+
45
+ results[region or f"full_screen_{idx}"] = numbers
46
+
47
+ return results
48
+
49
+ def perform_action(self, action):
50
+ if action == "like_post":
51
+ self.mouse.click(Button.left, 2)
52
+ print("❤️ Ação: clique duplo executado.")
53
+ elif action == "skip_post":
54
+ self.mouse.move(100, 0)
55
+ print("⏭ Ação: pulando item.")
56
+ else:
57
+ print(f"⚙️ Ação desconhecida: {action}")
58
+
59
+ def run(self, regions=None):
60
+ numbers_per_region = self.capture_numbers(regions)
61
+
62
+ if self.mode == "observe":
63
+ for reg, nums in numbers_per_region.items():
64
+ print(f"👁 Região {reg}: números detectados = {nums}")
65
+
66
+ elif self.mode == "decision":
67
+ for reg, nums in numbers_per_region.items():
68
+ for number in nums:
69
+ if number > 1000:
70
+ self.perform_action("like_post")
71
+ else:
72
+ self.perform_action("skip_post")
73
+
74
+ elif self.mode == "learn":
75
+ print("📚 Modo aprendizado ativado: coletando dados...")
76
+ for _ in range(3):
77
+ self.capture_numbers(regions)
78
+ time.sleep(2)
79
+ else:
80
+ print(f"❌ Modo '{self.mode}' inválido.")
81
+
82
+ # ------------------------
83
+ # Nova função: mark_region
84
+ # ------------------------
85
+ @staticmethod
86
+ def mark_region():
87
+ """
88
+ Captura região usando PyAutoGUI.
89
+ O usuário clica no canto superior esquerdo e inferior direito.
90
+ Retorna (x, y, largura, altura)
91
+ """
92
+ print("📌 Marque a região desejada:")
93
+ print("Clique no canto superior esquerdo da área desejada e pressione Enter...")
94
+ input("Pressione Enter quando estiver pronto...")
95
+ x1, y1 = pyautogui.position()
96
+ print(f"📍 Ponto superior esquerdo: ({x1}, {y1})")
97
+
98
+ print("Clique no canto inferior direito da área desejada e pressione Enter...")
99
+ input("Pressione Enter quando estiver pronto...")
100
+ x2, y2 = pyautogui.position()
101
+ print(f"📍 Ponto inferior direito: ({x2}, {y2})")
102
+
103
+ x, y = min(x1, x2), min(y1, y2)
104
+ w, h = abs(x2 - x1), abs(y2 - y1)
105
+
106
+ if w == 0 or h == 0:
107
+ print("❌ Largura ou altura inválida. Tente novamente.")
108
+ return None
109
+
110
+ print(f"✅ Região marcada: (x={x}, y={y}, largura={w}, altura={h})")
111
+ return (x, y, w, h)
@@ -0,0 +1,92 @@
1
+ Metadata-Version: 2.4
2
+ Name: nano_wait
3
+ Version: 3.1.0
4
+ Summary: Adaptive waiting and smart automation library — includes Wi-Fi, system context, and Vision Mode for screen-based decisions.
5
+ Author: Luiz Filipe Seabra de Marco
6
+ Author-email: luizfilipeseabra@icloud.com
7
+ License: MIT License
8
+ Keywords: automation automação wifi wait vision ocr screen adaptive ai
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
13
+ Classifier: Topic :: Utilities
14
+ Classifier: Intended Audience :: Developers
15
+ Requires-Python: >=3.8
16
+ Description-Content-Type: text/markdown
17
+ License-File: LICENSE
18
+ Requires-Dist: psutil
19
+ Requires-Dist: pywifi
20
+ Provides-Extra: vision
21
+ Requires-Dist: pyautogui; extra == "vision"
22
+ Requires-Dist: pytesseract; extra == "vision"
23
+ Requires-Dist: pynput; extra == "vision"
24
+ Requires-Dist: opencv-python; extra == "vision"
25
+ Requires-Dist: numpy; extra == "vision"
26
+ Dynamic: author
27
+ Dynamic: author-email
28
+ Dynamic: classifier
29
+ Dynamic: description
30
+ Dynamic: description-content-type
31
+ Dynamic: keywords
32
+ Dynamic: license
33
+ Dynamic: license-file
34
+ Dynamic: provides-extra
35
+ Dynamic: requires-dist
36
+ Dynamic: requires-python
37
+ Dynamic: summary
38
+
39
+ # Nano-Wait
40
+
41
+ Nano-Wait é uma biblioteca Python para **automação inteligente de telas e leitura de dados**, agora com **Módulo de Visão**, permitindo capturar números e textos diretamente da tela e executar ações automatizadas com base nas informações detectadas.
42
+
43
+ ## Funcionalidades Principais
44
+
45
+ ### Espera Inteligente (Wait)
46
+
47
+ Substitui `time.sleep` por esperas inteligentes, evitando atrasos desnecessários e tornando scripts mais confiáveis.
48
+
49
+ **Exemplos:**
50
+ ```python
51
+ from nano_wait import wait
52
+
53
+ # Aguarda até que um botão esteja visível
54
+ wait.until_visible(selector="button#start")
55
+
56
+ # Aguarda até que um valor específico apareça
57
+ wait.until_text("Processo concluído")
58
+ ### Visão Inteligente (Vision)
59
+
60
+ A partir da versão 3.0, Nano-Wait inclui **OCR** para ler números e textos da tela e tomar decisões automáticas.
61
+
62
+ **Principais funcionalidades:**
63
+ * Marcação de múltiplas regiões: Permite capturar várias áreas da tela simultaneamente.
64
+ * **Modos inteligentes:**
65
+ * `observe`: apenas lê e imprime valores detectados.
66
+ * `decision`: lê valores e executa ações automáticas.
67
+ * `learn`: registra padrões visuais para decisões futuras.
68
+
69
+ **Exemplo de uso:**
70
+ ```python
71
+ from nano_wait.vision import Vision
72
+
73
+ vision = Vision()
74
+ vision.mark_regions() # Interativo: marque regiões na tela
75
+ vision.set_mode("observe") # Modos: observe, decision, learn
76
+ vision.run() # Executa leitura ou ações
77
+ ### Ações Automatizadas
78
+
79
+ Execute ações automáticas após detectar padrões ou valores na tela.
80
+
81
+ **Exemplos de ações:**
82
+ * Clique simples ou duplo
83
+ * Pular itens
84
+ * Executar funções customizadas
85
+
86
+ ```python
87
+ def custom_action(value):
88
+ if value > 100:
89
+ print("Valor alto detectado!")
90
+ # clique ou outra ação
91
+
92
+ vision.set_custom_action(custom_action)
@@ -0,0 +1,13 @@
1
+ nano_wait/__init__.py,sha256=e2HO0pyr_xEYzPE-FD-Sq8gL3qRWdaovvpYv4uG608U,1287
2
+ nano_wait/__main__.py,sha256=MSmt_5Xg84uHqzTN38JwgseJK8rsJn_11A8WD99VtEo,61
3
+ nano_wait/cli.py,sha256=clYKsF36N4Fij6bH5vkzC4kXdOelpz32RcjoloHoZdY,1854
4
+ nano_wait/core.py,sha256=n8bp7EI6lNwd-uceclHVmF49ZuxQItbI7etdijB5zFQ,2551
5
+ nano_wait/nano_wait.py,sha256=XfefZQ0RgT3lhC2UZ1rQS-UC9HoG8sP3XMH3RjZUoG4,1091
6
+ nano_wait/utils.py,sha256=28qjlES2Yw69mvaj52mmnRqWjtpxu3aG1GwG29dvBYw,486
7
+ nano_wait/vision.py,sha256=4lx4pfbbhHpNby83A1vJDB7k38YVBc3Sym5O0O7nUwc,3912
8
+ nano_wait-3.1.0.dist-info/licenses/LICENSE,sha256=iu3NnVehM00ZoIpIVkl44-9mCgXVh9iGYMZYXtMv0Mc,1084
9
+ nano_wait-3.1.0.dist-info/METADATA,sha256=_1_DLe2tU8IvrOfjYLyghSx6nbjRMITjK9grUz129HQ,3104
10
+ nano_wait-3.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
11
+ nano_wait-3.1.0.dist-info/entry_points.txt,sha256=IISprKfo-qF43ML7ywqV22rUrTm0Gi2y_DpAN03kZhA,49
12
+ nano_wait-3.1.0.dist-info/top_level.txt,sha256=dSiF3Wc3ZEB1pzcp_ubHZeb0OE7n1nPMntkL48uz6aI,10
13
+ nano_wait-3.1.0.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ nano-wait = nano_wait.cli:main
@@ -1,40 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: nano_wait
3
- Version: 2.0
4
- Summary: Waiting Time Calculation for Automations Based on WiFi and PC Processing
5
- Author: Luiz Filipe Seabra de Marco
6
- Author-email: luizfilipeseabra@icloud.com
7
- License: MIT License
8
- Keywords: automation automação wifi wait
9
- Description-Content-Type: text/markdown
10
- License-File: LICENSE
11
- Requires-Dist: psutil
12
- Requires-Dist: pywifi
13
- Dynamic: author
14
- Dynamic: author-email
15
- Dynamic: description
16
- Dynamic: description-content-type
17
- Dynamic: keywords
18
- Dynamic: license
19
- Dynamic: license-file
20
- Dynamic: requires-dist
21
- Dynamic: summary
22
-
23
- # ⚡ Nano-Wait v2.0
24
-
25
- **Adaptive smart wait for Python — replaces `time.sleep()` with intelligence.**
26
-
27
- ---
28
-
29
- ## 🚀 Features
30
- - Adjusts wait time based on CPU, RAM, and Wi-Fi quality.
31
- - Simple API: `wait(2.5, wifi="Office", speed="fast")`
32
- - CLI support: `nano-wait 2.5 --wifi "Office" --speed fast`
33
- - Built-in presets: `slow`, `normal`, `fast`, `ultra`
34
- - Optional logs and verbose mode.
35
-
36
- ---
37
-
38
- ## 📦 Installation
39
- ```bash
40
- pip install nano-wait
@@ -1,11 +0,0 @@
1
- nano_wait/__init__.py,sha256=e2HO0pyr_xEYzPE-FD-Sq8gL3qRWdaovvpYv4uG608U,1287
2
- nano_wait/__main__.py,sha256=MSmt_5Xg84uHqzTN38JwgseJK8rsJn_11A8WD99VtEo,61
3
- nano_wait/cli.py,sha256=clYKsF36N4Fij6bH5vkzC4kXdOelpz32RcjoloHoZdY,1854
4
- nano_wait/core.py,sha256=n8bp7EI6lNwd-uceclHVmF49ZuxQItbI7etdijB5zFQ,2551
5
- nano_wait/nano_wait.py,sha256=XfefZQ0RgT3lhC2UZ1rQS-UC9HoG8sP3XMH3RjZUoG4,1091
6
- nano_wait/utils.py,sha256=28qjlES2Yw69mvaj52mmnRqWjtpxu3aG1GwG29dvBYw,486
7
- nano_wait-2.0.dist-info/licenses/LICENSE,sha256=iu3NnVehM00ZoIpIVkl44-9mCgXVh9iGYMZYXtMv0Mc,1084
8
- nano_wait-2.0.dist-info/METADATA,sha256=A74-Ml-wmlLQm4avwwkn1gpFCJoYV01KGuGrXK24Oy0,1017
9
- nano_wait-2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
10
- nano_wait-2.0.dist-info/top_level.txt,sha256=dSiF3Wc3ZEB1pzcp_ubHZeb0OE7n1nPMntkL48uz6aI,10
11
- nano_wait-2.0.dist-info/RECORD,,