InfluenceAnalyzerDemo / modules /embeddings.py
teoaivalis's picture
Initial upload with examples and full demo
e8994f0
Raw
History Blame Contribute Delete
1.6 kB
'''
import torch
from torchvision import models, transforms
from PIL import Image
import requests
from io import BytesIO
# Load ResNet50 model
model = models.resnet50(pretrained=True)
model.eval()
preprocess = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
])
def get_embedding(image: Image.Image):
img_tensor = preprocess(image).unsqueeze(0)
with torch.no_grad():
embedding = model(img_tensor).squeeze().numpy()
return embedding
def load_image_from_url(url):
response = requests.get(url)
img = Image.open(BytesIO(response.content)).convert("RGB")
return img
'''
import torch
import open_clip
from PIL import Image
import requests
from io import BytesIO
from torchvision import transforms
# Load CLIP model (ViT-B-32 is a good default)
model, _, preprocess = open_clip.create_model_and_transforms(
'ViT-B-32', pretrained='openai'
)
model.eval()
# Define a function to compute CLIP embeddings
def get_embedding(image: Image.Image):
# CLIP expects images in a certain format:
image_input = preprocess(image).unsqueeze(0) # (1, 3, H, W)
with torch.no_grad():
image_features = model.encode_image(image_input)
# Normalize to unit vector for cosine similarity
image_features = image_features / image_features.norm(dim=-1, keepdim=True)
return image_features.squeeze().cpu().numpy()
# Helper to load image from URL
def load_image_from_url(url):
response = requests.get(url)
img = Image.open(BytesIO(response.content)).convert("RGB")
return img