Download Game! Currently 74 players. Last logged in:TuhkaLouenDavianNkvd

Blitzer's Blog >> 72602

Back to blogs index
Posted: 20 Sep 2026 17:27 [ permalink ]
Tallenna tC$mC$ nimellC$ icon_classifier.py:
import torch
from PIL import Image
from transformers import CLIPProcessor, CLIPModel
import time

print("[*] Ladataan kevyttC$ Vision-mallia muistiin (TC$mC$ kestC$C$ ekalla
kerralla pienen hetken)...")
# KC$ytetC$C$n OpenAI:n kevyttC$ perus-CLIPiC$. Se pyC6rii CPU:llakin sekunnin
murto-osissa.
model_id = "openai/clip-vit-base-patch32"
model = CLIPModel.from_pretrained(model_id)
processor = CLIPProcessor.from_pretrained(model_id)
print("[+] Malli ladattu ja valmis!")

def classify_icon(image_path, candidate_labels):
    """
    Kysyy tekoC$lyltC$, mitC$ annettu kuva esittC$C$.
    """
    # Ladataan ikonista otettu rajattu leike (esim. 40x40 pikseliC$)
    image = Image.open(image_path).convert("RGB")
    
    # Valmistellaan kuva ja tekstit CLIPille ymmC$rrettC$vC$C$n muotoon
    inputs = processor(text=candidate_labels, images=image, return_tensors="pt"
, padding=True)
    
    # Ajetaan neuroverkon lC$pi
    with torch.no_grad():
        outputs = model(**inputs)
        
    # Otetaan tulokset (logits) ja muutetaan ne prosenteiksi (softmax)
    logits_per_image = outputs.logits_per_image 
    probs = logits_per_image.softmax(dim=1).numpy()[0]
    
    # YhdistetC$C$n etiketit ja todennC$kC6isyydet
    results = {label: round(prob * 100, 2) for label, prob in
zip(candidate_labels, probs)}
    
    # Palautetaan tulokset jC$rjestettynC$ (suurin % ensin)
    return dict(sorted(results.items(), key=lambda item: item[1],
reverse=True))

if __name__ == "__main__":
    # TESTI: 
    # 1. Ota Windowsin/Linuxin kuvankaappaustyC6kalulla pieni (n. 50x50) kuva 
    #    WhatsAppin klemmarista ja tallenna se nimellC$ "test_icon.png".
    
    # 2. MC$C$ritellC$C$n, mitC$ vaihtoehtoja annamme mallille. 
    #    (CLIP ymmC$rtC$C$ parhaiten englantia, mutta konteksti voi olla mikC$
vain).
    labels = ["a paperclip icon", "a microphone icon", "a smiley face icon",
"a camera icon", "random noise"]
    
    print("
[*] Analysoidaan ikonia...")
    start = time.time()
    
    # (Korvaa "test_icon.png" omalla testikuvallasi)
    # results = classify_icon("test_icon.png", labels)
    
    # print(f"
[+] Tulos ({time.time()-start:.2f}s):")
    # for label, prob in results.items():
    #     print(f"    {label}: {prob}%")