Download Game! Currently 84 players. Last logged in:MalcomPorkzarShutatTaika

Blitzer's Blog >> 72618

Back to blogs index
Posted: 20 Sep 2026 18:14 [ permalink ]
Se on arkkitehtuuriltaan ja logiikaltaan tC$ysin valmis, mutta koodissa on
vielC$ pari "koulutuspyC6rC$C$" (simuloitua kohtaa) paikoillaan, jotta nC$it
miten moottori toimii.
Jotta voit testata tC$tC$ livenC$ WhatsAppin kanssa, meidC$n pitC$C$ kytkeC$
se kiinni aiemmin tekemC$C$si master_parser.py:hyn ja X11-hiireen.
TC$ssC$ on kaksi funktiota, jotka sinun tarvitsee korvata routine_engine.py
-tiedostossa, niin jC$rjestelmC$ on 100% aito ja testivalmis.
1. KytketC$C$n oikea Semanttinen haku
Korvaa aiempi simuloitu run_semantic_anchor tC$llC$. TC$mC$ importtaa suoraan
master_parser.py:n, lukee AST:n, etsii ankkurin ja leikkaa automaattisesti
ikonin talteen self-healingia varten.
    def run_semantic_anchor(self, cv_img, selector):
        print(f"     [*] Ajetaan Layout Parser ja CLIP...")
        import master_parser
        from PIL import ImageGrab
        import cv2

        # 1. Generoidaan ja rikastetaan AST (kC$yttC$C$ aiempaa skriptiC$si)
        gray_img = cv2.cvtColor(cv_img, cv2.COLOR_BGR2GRAY)
        pil_img = ImageGrab.grab()
        
        frames = master_parser.detect_frames(gray_img)
        all_nodes = []
        for frame in frames:
            all_nodes.extend(master_parser.extract_nodes(gray_img, frame))
            
        clip_model, clip_processor = master_parser.load_clip()
        enriched_nodes = master_parser.enrich_icons_with_clip(pil_img,
all_nodes, clip_model, clip_processor)
        
        # 2. EtsitC$C$n ankkuriteksti (esim. "kirjoita viesti")
        anchor_text = selector['anchor_text'].lower()
        anchor_node = None
        for node in enriched_nodes:
            if node['type'] == 'TextNode' and anchor_text in node['content'].lo
wer():
                anchor_node = node
                break
                
        if not anchor_node:
            print(f"     [-] Ankkuria '{anchor_text}' ei lC6ytynyt ruudulta.")
            return None, None
            
        # 3. EtsitC$C$n kohde-ikoni ankkurin lC$heltC$ (saman Y-akselin
toleranssilla)
        target_icon = selector['target_icon']
        y_tol = selector.get('y_tolerance', 50)
        
        for node in enriched_nodes:
            if node['type'] == 'IconNode' and target_icon in node['content']:
                nx, ny, nw, nh = node['box']
                ax, ay, aw, ah = anchor_node['box']
                
                if abs(ny - ay) <= y_tol:
                    print(f"     [+] LC6ytyi: '{target_icon}' ankkurin
vierestC$!")
                    center_x = nx + nw // 2
                    center_y = ny + nh // 2
                    
                    # Leikataan kuva talteen self-healing-toimintoa varten
                    pad = 5
                    crop_y1, crop_y2 = max(0, ny-pad), min(cv_img.shape[0],
ny+nh+pad)
                    crop_x1, crop_x2 = max(0, nx-pad), min(cv_img.shape[1],
nx+nw+pad)
                    icon_crop = cv_img[crop_y1:crop_y2, crop_x1:crop_x2]
                    
                    return (center_x, center_y), icon_crop
                    
        print(f"     [-] Kohdetta '{target_icon}' ei lC6ytynyt ankkurin
lC$heltC$.")
        return None, None

2. KytketC$C$n fyysinen hiiriklikkaus
Koska olet Debian 12 / XFCE4 -ympC$ristC6ssC$, ylivoimaisesti varmin tapa
lC$hettC$C$ klikkaus "sokeasti" oikeisiin koordinaatteihin on kC$yttC$C$
xdotool -komentoa. (Asenna se tarvittaessa komennolla sudo apt install
xdotool).
Korvaa vanha perform_click tC$llC$:
    def perform_click(self, coords):
        x, y = coords
        print(f"     [ACTION] LC$hetetC$C$n X11-klikkaus koordinaatteihin
X:{x}, Y:{y}")
        import os
        # SiirtC$C$ hiiren koordinaatteihin ja painaa vasenta nappia (1)
        os.system(f"xdotool mousemove {x} {y} click 1")
        # Pieni viive varmuuden vuoksi
        import time
        time.sleep(0.5)

EnsimmC$isen testiajon kulku:
 * Varmista, ettC$ sinulla on whatsapp_routine.yaml -tiedosto tallennettuna
samassa kansiossa.
 * Avaa WhatsApp Web ruudulle niin, ettC$ chatin alareunan syC6ttC6kenttC$ ja
klemmari nC$kyvC$t.
 * Aja: python3 routine_engine.py
MitC$ tapahtuu livenC$?
 * Moottori yrittC$C$ ensin Template Matchia (Taso 1). Se tulee hylkC$C$mC$C$n
sen vC$littC6mC$sti, koska /tmp/bot_templates/attach_btn.png -tiedostoa ei
vielC$ ole olemassa (se tulostaa virheen, mikC$ on oikein).
 * Se putoaa Tasolle 2 ja kC$ynnistC$C$ Layout Parserin ja CLIPin. Odotat n.
1012 sekuntia.
 * Se lC6ytC$C$ "Kirjoita viesti" -tekstin ja sen vierestC$ "paperclip icon"
-kohteen.
 * xdotool kaappaa hiiren, siirtC$C$ sen klemmarin pC$C$lle ja klikkaa sitC$,
jolloin WhatsAppin valikko aukeaa.
 * Automaattinen oppiminen: Ohjelma leikkaa klemmarista 40x40px kuvan ja
tallentaa sen /tmp/bot_templates/attach_btn.png.
Aja sama komento heti perC$C$n toisen kerran. Seuraavalla kerralla Taso 1
(pikselimC$tsC$ys) onnistuu, ja botti klikkaa klemmaria vC$littC6mC$sti alle
0.1 sekunnissa herC$ttC$mC$ttC$ tekoC$lyC$ lainkaan.