Download Game! Currently 138 players. Last logged in:SavuIberiamsspBadelkMetrocard

Blitzer's Blog >> 72583

Back to blogs index
Posted: 19 Sep 2026 20:24 [ permalink ]
TC$mC$ on tC$ydellinen arkkitehtuurinen loikka. Olet siirtymC$ssC$
perinteisestC$ "tyhmC$stC$" makrojen nauhoituksesta Data-Driven RPA (Robotic
Process Automation) -malliin, joka on linjassa HAUKI-GEM LABin orkestraatio-
ja mesh-visioiden kanssa.

Kun jaamme prosessin kahteen osaan  1. Raakadatan kerC$C$jC$ (Sensori) ja 2.
JC$lkikC$C$ntC$jC$ (Cly/AI)  nauhoitin pysyy kevyenC$, eikC$ sen tarvitse
tehdC$ raskaita pC$C$tC6ksiC$ reaaliajassa. KC$C$ntC$jC$ (offline/online AI)
voi rauhassa analysoida kerC$tyn datan, pyytC$C$ Tesseractilta OCR-tulokset
kuvaleikkeestC$, ja pC$C$ttC$C$ parhaan mahdollisen strategian.

TC$ssC$ on kahden askeleen jC$rjestelmC$: Smart Recorder ja AI Compiler.

1. ClykC$s Raakadatan Nauhoitin (smart_recorder.py)

TC$mC$ skripti tallentaa jokaisesta klikkauksesta kaiken mahdollisen
kontekstin raw_events.jsonl (JSON Lines) -tiedostoon: aikaleiman,
koordinaatit, 40x40 kuvaleikkeen sekC$ semanttisen AT-SPI -puun.

import json import time import os from pynput import mouse from PIL import
ImageGrab import pyatspi CROP_SIZE = 40 OUTPUT_DIR = "/tmp/bot_raw_data"
OUTPUT_LOG = "/tmp/bot_raw_data/raw_events.jsonl" os.makedirs(OUTPUT_DIR,
exist_ok=True) last_action_time = time.time() # TyhjennetC$C$n vanha loki
open(OUTPUT_LOG, 'w').close() def get_atspi_info(x, y): """ Hakee "Best
Effort" semanttisen tiedon elementistC$ """ try: desktop = pyatspi.Registry.get
Desktop(0) if not desktop: return None for i in range(desktop.getChildCount()):
 app = desktop.getChildAtIndex(i) if not app: continue try: comp =
app.queryComponent() if comp and comp.contains(x, y, pyatspi.DESKTOP_COORDS):
element = comp.getAccessibleAtPoint(x, y, pyatspi.DESKTOP_COORDS) if element:
try: # YritetC$C$n kaivautua vielC$ syvemmC$lle elementin sisC$C$n inner =
element.queryComponent().getAccessibleAtPoint(x, y, pyatspi.DESKTOP_COORDS) if
inner: element = inner except: pass return { "name": element.name, "role":
element.getRoleName(), "description": element.description } except: continue
except Exception as e: print(f"[-] AT-SPI varoitus: {e}") return None def
on_click(x, y, button, pressed): global last_action_time if pressed: now =
time.time() delay = round(now - last_action_time, 2) last_action_time = now
filename = f"crop_{int(time.time()*1000)}.png" filepath = os.path.join(OUTPUT_D
IR, filename) # 1. Visuaalinen tallennus (Bitmap) bbox = (int(x - CROP_SIZE //
2), int(y - CROP_SIZE // 2), int(x + CROP_SIZE // 2), int(y + CROP_SIZE // 2))
try: img = ImageGrab.grab(bbox=bbox) img.save(filepath) except: filepath =
None # 2. Semanttinen tallennus (AT-SPI) atspi_data = get_atspi_info(x, y) #
3. Kootaan rikas tapahtuma event = { "type": "click", "delay_before": delay,
"x": x, "y": y, "image_path": filepath, "atspi": atspi_data } with
open(OUTPUT_LOG, 'a') as f: f.write(json.dumps(event) + "
") semantic_name = atspi_data.get('name') if atspi_data else 'Tuntematon
graafinen alue' print(f"[TALLENNETTU] Viive: {delay}s | Tunnistettu:
'{semantic_name}
'") print("ClykC$s nauhoitus kC$ynnissC$. Paina ENTER lopettaaksesi.")
mouse_listener = mouse.Listener(on_click=on_click) mouse_listener.start()
input() mouse_listener.stop() print(f"Raakadata tallennettu: {OUTPUT_LOG}") 

2. JC$lkianalysoija / AI Compiler (macro_compiler.py)

Kun nauhoitus on valmis, tC$mC$ skripti lukee raw_events.jsonl -lokin. TC$ssC$
vaiheessa jC$rjestelmC$ tekee C$lykkC$C$t pC$C$tC6kset. Koska sinulla on jo
OCR kC$ytC6ssC$ X11-Vision-API:ssa (tai halutessasi paikallinen
tesseract/Llama3), kC$C$ntC$jC$ voi analysoida kerC$tyn tiedon ja tuottaa
tC$ydellisen bot_macro.json -tiedoston.

(Huom: Voit kC$yttC$C$ tC$tC$ skriptiC$ sellaisenaan yksinkertaisella
sC$C$ntC6moottorilla, tai ohjata datan suoraan MUD-agentillesi Llama3:n
pureskeltavaksi).

import json import re RAW_LOG = "/tmp/bot_raw_data/raw_events.jsonl"
COMPILED_MACRO = "/tmp/bot_macro.json" def analyze_event(event): """ AI /
SCntC6moottori: PCttC optimaalisen klikkaustavan. """ atspi =
event.get("atspi") # Kognitiivinen pCttely: Onko kyseessC teksti vai ikoni? if
atspi and atspi.get("name"): name = atspi["name"] # Jos AT-SPI:n nimi on
selkeC sana (esim. "Dokumentti" tai "Tallenna") # ja rooli on nappi/menu,
suositaan OCR:C, koska se on visuaalisesti joustavin. if len(name) > 2 and not
re.search(r'[^a-zA-ZC0-9 \-]', name): return { "action": "ocr_click", "text":
name, "reasoning": f"AT-SPI kertoi elementin nimeksi '{name}', kC$ytetC$C$n
OCR-hakua." } # Jos AT-SPI ei antanut nimeC$, tai nimi on roskaa (esim.
pelkkC$ "panel"), # tai kyseessC$ on selkeC$ graafinen ikoni (kuten klemmari),
fallbackataan kuvaan. return { "action": "vision_click", "template":
event["image_path"], "original_x": event["x"], "original_y": event["y"],
"reasoning": "Ei luotettavaa tekstitietoa. KC$ytetC$C$n pikselitarkkaa
template-matchingia." } def compile_macro(): compiled_steps = [] with
open(RAW_LOG, 'r') as f: for line in f: if not line.strip(): continue event =
json.loads(line) # LisC$tC$C$n ihmismC$inen viive, jos sellainen oli
(suodatetaan alun pitkC$t odotukset) delay = event.get("delay_before", 0) if
delay > 0.1: compiled_steps.append({"action": "wait", "time": min(delay,
5.0)}) # Max 5s odotus # PC$C$tellC$C$n toiminto best_action =
analyze_event(event) # Debug-tuloste ihmiselle print(f"[*] Koordinaatti
({event['x']}, {event['y']}) -> Valittiin: {best_action['action']}") print(f"
Syy: {best_action.pop('reasoning')}") compiled_steps.append(best_action) #
Tallennetaan X11-Vision-API:n ymmC$rtC$mC$ssC$ muodossa (objekti, jossa
"steps") with open(COMPILED_MACRO, 'w') as f: json.dump({"steps":
compiled_steps}, f, indent=4) print(f"
[+] Valmis makro kC$C$nnetty: {COMPILED_MACRO}") if __name__ == "__main__":
compile_macro() 

TyC6nkulku kC$ytC$nnC6ssC$

Aja python3 smart_recorder.py: Liikuttele hiirtC$ ja klikkaile WhatsAppissa.
Nauhoitin kerC$C$ taustalla kaiken: kuvat, koordinaatit ja AT-SPI-objektit.
Paina Enter.

Aja python3 macro_compiler.py: Skripti kC$y kerC$tyn datan lC$pi. Kun se
huomaa, ettC$ klikkasit jotain, jonka AT-SPI-nimi on "Dokumentti", se
konvertoi sen automaattisesti ocr_click -vaiheeksi. Kun se huomaa klemmarin,
jolla ei ole selkeC$C$ nimeC$ (tai ikonin), se konvertoi sen vision_click
-vaiheeksi.

SyC6tC$ X11-Vision-API:lle: curl -X POST ... -d @/tmp/bot_macro.json

TC$mC$ arkkitehtuuri mahdollistaa sen, ettC$ tulevaisuudessa voit kytkeC$ tuon
macro_compiler.py:n suoraan mesh-muscle-api:n tai Llama3:n taakse.
KC$C$ntC$jC$ voi lC$hettC$C$ kerC$tyn kuvan ja AT-SPI-datan LLM-mallille ja
kysyC$: "TC$ssC$ on kC$yttC$jC$n klikkauksen konteksti. MitC$ hC$n yritti
tehdC$, ja mikC$ on kestC$vin tapa toistaa se?"