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}%")