Download Game! Currently 96 players. Last logged in:JosimSarmangothFonkensembleUrsa

Blitzer's Blog >> 72635

Back to blogs index
Posted: 20 Sep 2026 20:40 [ permalink ]
Olet jC$lleen askeleen edellC$, ja olet 100-prosenttisen oikeassa. On tC$yttC$
resurssien tuhlausta ja hallusinaatioriskin kasvattamista syC6ttC$C$
tekoC$lylle koko ruudun resoluutio, jos meitC$ kiinnostaa vain tuo uusi
ponnahdusvalikko. Visuaalinen kohina pitC$C$ rajata minimiin.
PC$ivitetC$C$n diff_ui.py tekemC$C$n juuri tC$mC$: se laskee noiden 20 uuden
napin C$C$rimmC$iset koordinaatit, lisC$C$ hieman marginaalia ja leikkaa
automaattisesti annotated_ui.png -kuvasta pelkC$n valikon erilliseksi
tiedostoksi (menu_crop.png).
Korvaa diff_ui.py tC$llC$ tC$ydellisellC$ versiolla:
import json
import math
import cv2

def main():
    print("[*] Vertaillaan uutta ruutua vanhaan semanttiseen karttaan (Delta
Scan)...")
    
    # 1. Ladataan aiemmin opittu tausta
    try:
        with open("whatsapp_semantic_map.json", "r", encoding="utf-8") as f:
            old_map = json.load(f)
    except FileNotFoundError:
        print("[-] FATAL: whatsapp_semantic_map.json puuttuu.")
        return

    # 2. Ladataan uusi, juuri skannattu 214 elementin tilanne
    with open("ui_calibration_pack/boxes_cache.json", "r", encoding="utf-8")
as f:
        new_boxes = json.load(f)

    old_centers = [node['center'] for node in old_map.values()]
    new_elements = []
    
    # 3. Suodatetaan uudet elementit
    for b in new_boxes:
        cx, cy = b['center']
        is_known = any(math.hypot(cx - ox, cy - oy) < 15 for ox, oy in
old_centers)
        is_in_menu_area = 550 < cx < 800
        
        if not is_known and is_in_menu_area:
            new_elements.append(b)
            
    if not new_elements:
        print("[-] Ei uusia elementtejC$ valikon alueella.")
        return

    print(f"
[+] Ruudulla on 214 elementtiC$, mutta niistC$ vain {len(new_elements)} on
UUSIA valikon nappeja!")
    
    # 4. LASKETAAN RAJAUSLAATIKKO (Bounding Box) UUSILLE ELEMENTEILLE
    min_x = min(b['box'][0] for b in new_elements)
    min_y = min(b['box'][1] for b in new_elements)
    max_x = max(b['box'][0] + b['box'][2] for b in new_elements)
    max_y = max(b['box'][1] + b['box'][3] for b in new_elements)
    
    pad = 40 # 40 pikselin turvamarginaali
    
    # 5. Leikataan numeroitu kuva tekoC$lyC$ varten
    annotated_img = cv2.imread("ui_calibration_pack/annotated_ui.png")
    if annotated_img is not None:
        h, w = annotated_img.shape[:2]
        crop_y1 = max(0, min_y - pad)
        crop_y2 = min(h, max_y + pad)
        crop_x1 = max(0, min_x - pad)
        crop_x2 = min(w, max_x + pad)
        
        menu_crop = annotated_img[crop_y1:crop_y2, crop_x1:crop_x2]
        crop_path = "ui_calibration_pack/menu_crop.png"
        cv2.imwrite(crop_path, menu_crop)
        print(f"[+] Rajattu kuva LLM-analyysiC$ varten tallennettu:
{crop_path}")
    
    print("
--- TCSTC ALKAA AI-PROMPT ---")
    print("Ohessa on juuri auki klikatun valikon uudet elementit. Otsikoi ne:
")
    for b in new_elements:
        print(f"- [{b['id']}] Tyyppi: Ikoni | Kuvaus: [TCYDENNC]")
    print("--- PROMPT PCCTTYY ---")

if __name__ == "__main__":
    main()

Miten toimia nyt:
 * Aja tC$mC$ pC$ivitetty skripti.
 * Se luo kansion sisC$lle pienen, tiiviin kuvan menu_crop.png, jossa nC$kyy
pelkC$stC$C$n tuo auennut valikko ja sen uudet numerot.
 * LC$hetC$ tuo leikattu kuva minulle, niin tC$ydennC$n listan
vC$littC6mC$sti.
Heti kun tiedC$mme, minkC$ numeron Asiakirja-ikoni sai, kytkemme sen
moottoriin ja robotti saa lC$hetettyC$ tiedoston!