Metadata-Version: 2.5
Name: pyvizion
Version: 0.3.0
Summary: RPA híbrido: Selenium no navegador e visão/OCR na tela, um só pipeline.
Author: Josias Azevedo da Silva
License: Copyright (c) 2026 Josias Azevedo da Silva. All rights reserved.
        
        This software is proprietary and confidential. Unauthorized copying,
        distribution, modification, or use of this software, via any medium,
        is strictly prohibited without prior written permission.
License-File: LICENSE
Keywords: browser-automation,computer-vision,desktop-automation,ocr,opencv,rpa,selenium,template-matching
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: Other/Proprietary License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Image Recognition
Classifier: Topic :: Software Development :: Libraries
Classifier: Typing :: Typed
Requires-Python: >=3.10
Requires-Dist: easyocr>=1.7.1
Requires-Dist: mss>=9.0.0
Requires-Dist: numpy>=1.24
Requires-Dist: opencv-python-headless>=4.8
Requires-Dist: pillow>=10.0.0
Requires-Dist: psutil>=5.9.0
Requires-Dist: pyautogui>=0.9.54
Requires-Dist: pyperclip>=1.8.2
Requires-Dist: pytesseract>=0.3.10
Requires-Dist: pywin32>=306; sys_platform == 'win32'
Requires-Dist: pywinauto>=0.6.8; sys_platform == 'win32'
Requires-Dist: rapidfuzz>=3.0
Requires-Dist: selenium>=4.15
Provides-Extra: dev
Requires-Dist: mypy>=1.8; extra == 'dev'
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.5; extra == 'dev'
Description-Content-Type: text/markdown

# Vizion

RPA em Python para **página no navegador** e **tela do Windows**. Você aponta o alvo — recorte PNG, palavra visível ou seletor Selenium — e o Vizion tenta achar: primeiro no DOM, depois por imagem, depois por OCR.

```python
from vizion import Bot

bot = Bot()                       # área de trabalho
# bot = Bot(webdriver.Chrome())   # Chrome já aberto

bot.click(image="ok.png", timeout=10)
bot.click(text="Salvar", sendtext="{enter}")
bot.click(anchor="linha.png", target="editar.png")
bot.wait(image="spinner.png", timeout=30, gone=True)
bot.keyboard("Ctrl+S")
print(bot.result())
```

Código em inglês (`click`, `timeout`, `image`). Só este README está em português.

## Instalação

```bash
pip install pyvizion
```

O pacote no PyPI chama-se **pyvizion**; no código você continua com `from vizion import Bot`.

Sobe Selenium, OpenCV, EasyOCR, Tesseract (wrapper), PyAutoGUI, mss e, no Windows, pywin32. O executável do Tesseract no sistema continua sendo um requisito do SO se você for usar esse backend.

## Como o alvo é encontrado

No **navegador** a ordem é:

1. seletor DOM (`by` + `value`)
2. texto visível no DOM
3. iframe / shadow DOM
4. recorte OpenCV (várias escalas, HiDPI)
5. bordas Canny (tema claro/escuro)
6. ORB + homografia
7. OCR (EasyOCR, com Tesseract de reserva)
8. scroll da página e nova passada

No **desktop** os passos de DOM somem: recorte → Canny → ORB → OCR.

O clique no browser usa coordenada CSS (PNG vs `innerWidth`), não pixel cru da screenshot. No desktop, pixel físico do `mss` vira coordenada lógica do SO.

## Navegador

```python
from selenium import webdriver
from selenium.webdriver.common.by import By
from vizion import Vizion, VizionConfig

pagina = Vizion.web(
    webdriver.Chrome(),
    config=VizionConfig(default_timeout=15, show_overlay=True),
)
pagina.get("https://intranet")
pagina.find_and_click(by=By.ID, value="user", template="user.png", text="Usuário")
pagina.wait_url("/home")
```

`find_and_click` aceita seletor, recorte e texto **ao mesmo tempo**: se o DOM falhar, a visão e o OCR entram.

## Área de trabalho

```python
from vizion import Vizion, VizionConfig

tela = Vizion.desktop(config=VizionConfig(use_virtual_mouse=True))
tela.register_image("ok", "ok.png")
tela.click_image("ok")
tela.click_text("Confirmar")
tela.keyboard("Ctrl+S")
```

`use_virtual_mouse=True` (Windows) clica sem deixar o cursor no alvo.

Do desktop dá para abrir o Chrome e continuar no mesmo catálogo de imagens:

```python
tela = Vizion.desktop()
pagina = tela.open_browser("https://intranet")
pagina.find_and_click(by="id", value="user")
tela.click_image("ok.png")
```

## Vários alvos iguais

Quando o mesmo botão aparece várias vezes, passe uma âncora única e o recorte do botão:

```python
bot.click(anchor="aviso.png", target="ok.png")
# ou
tela.click_relative("aviso.png", "ok.png", max_distance=200)
```

## Lote de passos

```python
bot.run([
    {"image": "menu.png", "timeout": 8},
    {"anchor": "linha.png", "target": "editar.png"},
    {"text": "Salvar", "sendtext": "{enter}"},
    {"type": "keyboard", "command": "Ctrl+S"},
])
```

O motor avançado (`Vizion.web` / `Vizion.desktop`) expõe o mesmo lote em `execute_tasks`.

## Ajuste

`VizionConfig` controla timeout, limiar OpenCV, overlay, idiomas OCR, mouse virtual. `print(doctor())` lista o que está instalado.

No IDE, `help(VizionDriver.find_and_click)` mostra o contrato completo (seletor, recorte, OCR, overlay).

## Licença

Software proprietário. Ver `LICENSE`.

Desenvolvido por Josias Azevedo da Silva.
