Skip to main content

pyvizion

RPA desktop por visão computacional — imagem, OCR, backtrack.
Mesma API clássica. Motor próprio para legado corporativo.

PyPI Python MIT

Site · PyPI · Começar · Como funciona


O pyvizion encontra controles na tela (recorte PNG ou texto), clica, digita e encadeia o fluxo. Se um passo falha, o backtrack refaz o anterior e tenta de novo.

Foi feito para sistemas sem API: ERP, Oracle Forms, Delphi/VB6, Java Swing, Citrix/RDP, terminais. Windows em primeiro lugar; Linux e macOS onde o ambiente permitir.

Os métodos (click_image, click_text, backtrack…) são os mesmos do bot-vision-suite 1.3.0. A forma de achar o alvo na tela é deste pacote.

Mantido por Josias Azevedo da Silva. Créditos ao bot-vision-suite (MIT) pelos métodos de referência. São pacotes separados no PyPI.

from pyvizion import Vizion

vz = Vizion()
vz.click_image("menu.png", backtrack=True)
vz.click_text("Relatórios", backtrack=True)
vz.click_text("Confirmar", sendtext="{enter}")

Use a série 1.0+ (from pyvizion import Vizion). As versões 0.3.x no PyPI são outra API.


Começar

pip install pyvizion
python -m pyvizion doctor

Tesseract é obrigatório ao criar Vizion(). Sem ele a instância nem sobe (TesseractNotFoundError).

Sistema Instalação
Windows UB-Mannheim em C:\Program Files\Tesseract-OCR\
Linux sudo apt-get install tesseract-ocr
macOS brew install tesseract

Idioma padrão do OCR: eng. Tela em português: Vizion({"tesseract_lang": "por"}) e o pacote por.


Como funciona

Você chama click_image("ok.png") ou click_text("Salvar"). A biblioteca tira um print, procura o alvo e clica no meio dele.

  1. Tira o print — cerca de 5 ms, funciona com dois monitores.
  2. Acha a imagem — você recorta o botão, salva numa pasta (imagens/ok.png) e passa o caminho. A biblioteca procura essa figura na tela. Funciona mesmo se o Windows estiver com a tela aumentada (125% ou 150%).
  3. Acha o texto — Tesseract (inglês por padrão; tesseract_lang="por" se a tela for em português).
  4. Clica e digita — no centro do alvo. use_virtual_mouse no Windows não mexe o cursor.
  5. Se falhar — com backtrack=True, refaz o passo anterior. Também espera aparecer ou sumir.

Se o alvo não estiver na tela, devolve False ou None. Vale if not vz.click_text("OK"). Erro só se faltar Tesseract ou o PNG não existir.

O que melhorou

Os métodos são os mesmos do bot-vision-suite 1.3.0. O que mudou é o jeito de achar o alvo: mais rápido e mais estável com zoom e com mais de um monitor.

Antes (PyAutoGUI / BVS) pyvizion
Tirar o print Lento (dezenas a centenas de ms) Cerca de 5 ms
Achar imagem Falha fácil se a tela estiver aumentada Acha mesmo com a tela em 125% ou 150%
Achar texto Tela inteira é cara Com region, cerca de 6× mais rápido
Esperar o alvo Cada tentativa paga o print lento wait_until_found dá para usar de verdade
Zoom / 2 monitores Clique no lugar errado Clica no lugar certo nos dois monitores
Alvo sumiu False / None Igual: if not vz.click_text("OK")
Extra — janelas, click_any, doctor, mouse virtual

Os “5 ms” e o “6×” vêm do jeito de tirar o print e de ler só a área pedida — não de um teste oficial publicado.


Uso

Backtrack e esperas

vz = Vizion()
vz.click_image("menu.png", backtrack=True)
vz.click_text("Relatórios", backtrack=True)
vz.click_image("salvar.png", wait_until_found=True, wait_timeout=15)
vz.find_image("ampulheta.png", wait_until_disappears=True, wait_timeout=60)
vz.click_image("ok.png", wait_until_disappears=True, wait_timeout=10)

wait_until_disappears no find_* devolve a caixa se o alvo sumiu, None se ainda estiver visível. No click_*, o clique já valeu: devolve True mesmo se o alvo continuar na tela.

Sessão

vz.start_task_session()
vz.click_image("button1.png", backtrack=True)
vz.click_text("Clientes", backtrack=True)
ok, total = vz.end_task_session()

Lista de tarefas

from pyvizion import execute_tasks

execute_tasks([
    {"image": "button.png", "region": (100, 100, 200, 50), "backtrack": True},
    {"text": "Login", "sendtext": "usuario123{tab}senha{enter}"},
    {"type": "relative_image", "anchor_image": "aviso.png", "target_image": "ok.png"},
    {"type": "keyboard_command", "command": "Ctrl+S"},
])

Métodos

Assinaturas posicionais iguais às do bot-vision-suite 1.3.0.

Método Resultado
click_image(...) bool
find_image(...) (x, y, w, h) ou None
click_text(...) bool
find_text(...) caixa ou None
click_relative_image(...) / find_relative_image(...) alvo mais perto da âncora
click_at / click_coordinates clique em ponto
type_text / keyboard_command digitação e atalhos
extract_text_from_region / get_last_extracted_text OCR da área
execute_tasks / execute_with_backtrack_between_tasks listas
start_task_session / end_task_session sessão de backtrack
configure_overlay / get_overlay_config / test_overlay_colors overlay

Extras: wait_for_image, wait_for_text, wait_until_gone, image_exists, text_exists, find_all_images, click_any, find_any, read_text, focus_window, wait_window, window_region, list_windows, press, hotkey, scroll, drag, screenshot, click_image_near_text.

Também como funções: from pyvizion import click_image, find_text, execute_tasks, limpar_texto.

Parâmetros que importam

  • region=(x, y, largura, altura) — use sempre que puder. vz.window_region("Título") devolve a janela.
  • specific=False — tenta a região e depois a tela, em várias escalas.
  • mouse_button — "left", "right", "double", "move_to".
  • filter_type — "letters", "numbers", "both". occurrence=2 é a segunda na ordem de leitura.
  • wait_timeout — segundos da espera (padrão da config: 30).

click_* / find_* não levantam se o alvo sumiu. Ambiente quebrado sim: TesseractNotFoundError no Vizion(), ImageFileError se o PNG não existe. As classes ImageNotFoundError e TextNotFoundError existem para quem quiser capturar por nome.


Campos (sendtext)

Texto digitado logo após o clique. {chave} é tecla.

vz.click_text("Usuário", sendtext="admin{tab}senha123{enter}")
Quero sendtext
campo vazio "12345"
substituir o que está lá "{ctrl}a{del}12345"
ir ao próximo "12345{tab}"
confirmar "12345{enter}"
dois campos "01/01/2026{tab}31/01/2026"
pular "{tab*3}"
pausa "12345{tab}{wait 1}"

Macros: {enter} {tab} {esc} {del} {backspace} setas {f1}–{f12} {ctrl}a {ctrl+shift+s} {tab*3} {wait 1.5} {{ }}.

Citrix/RDP que não cola: Vizion({"typing_mode": "type"}).


Tipos de tarefa

tasks = [
    {"type": "focus_window", "title": "Oracle Applications"},
    {"type": "wait_image", "image": "tela.png", "timeout": 30},
    {"text": "Cliente", "sendtext": "12345{enter}", "required": True},
    {"type": "wait_image", "image": "ampulheta.png", "gone": True, "timeout": 60},
    {"image": "popup.png", "optional": True, "sendtext": "{enter}"},
]

Tipos: imagem, texto, relative_image, click, type_text, keyboard_command, wait_image / wait_text, extract_text, wait, focus_window, scroll.

Chaves comuns: mouse_button, delay, sendtext, backtrack, max_attempts, wait_until_found, wait_until_disappears, wait_timeout, optional, required, show_overlay.


Configuração

vz = Vizion({
    "tesseract_lang": "eng",
    "image_folders": ["./imagens"],
    "use_virtual_mouse": False,
    "show_overlay": False,
})
vz.config.set("show_overlay", True)
vz = Vizion("pyvizion.json")
Chave Padrão Uso
confidence_threshold 75.0 limiar OCR (0–100)
default_confidence 0.9 imagem
tesseract_lang eng "por", "por+eng"
tesseract_path / tessdata_path auto executável e tessdata
timeout (wait_timeout) 30 espera padrão
use_virtual_mouse False clique sem mover o cursor (Windows)
typing_mode "paste" "type" no Citrix
image_folders [] onde achar PNG relativo
show_overlay False retângulo de depuração
save_failure_screenshots False print a cada miss
stop_on_failure False para a lista no primeiro erro
failsafe True canto superior esquerdo aborta

Demais chaves (escalas, OCR, overlay, backtrack): veja o site ou src/pyvizion/config.py.


Linha de comando

python -m pyvizion doctor
python -m pyvizion screenshot tela.png
python -m pyvizion position
python -m pyvizion pick
python -m pyvizion ocr 100 200 300 40

Prática

  1. Passe region (ou window_region) sempre que souber a área.
  2. Recorte PNG pequeno e único — o ícone, não o formulário.
  3. Prefira wait_until_gone a delay fixo.
  4. Comece com focus_window("Título").
  5. Para parar: mouse no canto superior esquerdo.

Desenvolvimento

pip install -e .[dev]
pytest

O site estático fica em docs/. Para ver localmente:

python -m http.server 8080 --directory docs

Licença

MIT. Texto em LICENSE.

pyvizion © 2026 Josias Azevedo da Silva
API de referência bot-vision-suite (MIT)

Metadata

Release files for pyvizion 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyvizion 1.0.5
File Size Uploaded
pyvizion-1.0.5.tar.gz 244.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyvizion 1.0.5
File Interpreter ABI Platform
pyvizion-1.0.5-py3-none-any.whl Python 3 none any Details

Total release size: 315.1 kB

Release files / pyvizion-1.0.5.tar.gz

Download URL pyvizion-1.0.5.tar.gz
Size 244.8 kB
Tags Source
SHA-256 checksum
How to use checksums
c06b3c877e291352282a499be110a5299f5c4afb69effbb315bdb2f8f0cd0a47
BLAKE2b-256 checksum
How to use checksums
3627fa52f04f0c0e9171fed78a1ccc6dd119fe3b1f300787c65b71b25ab539bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.0

Release files / pyvizion-1.0.5-py3-none-any.whl

Download URL pyvizion-1.0.5-py3-none-any.whl
Size 70.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a77a5bc851b2ca562f024db7df72cbc114816c066d262592344fca40f3d68690
BLAKE2b-256 checksum
How to use checksums
bb6e19d5859e13a32d71a4f1f4a0117a2e36c81777718f1487239cb7f8e6cc89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.0

Release history Release notifications | RSS feed

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

This release

1.0.5 This release

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page