Brand-API / models /embedding.py
zuhaiiiirr's picture
Initial Commit
eff05af verified
Raw
History Blame Contribute Delete
898 Bytes
import torch
from transformers import CLIPProcessor, CLIPModel
from config.config import Config
from PIL import Image
class ImageEmbedder:
_instance = None
def __new__(cls, model_name=Config.CLIP_MODEL_NAME):
if not cls._instance:
cls._instance = super().__new__(cls)
cls._instance.model = CLIPModel.from_pretrained(model_name)
cls._instance.processor = CLIPProcessor.from_pretrained(model_name)
return cls._instance
def generate_embedding(self, image_path: str) -> torch.Tensor:
"""Generate embedding for an image using CLIP."""
image = Image.open(image_path).convert('RGB')
inputs = self.processor(images=image, return_tensors="pt")
with torch.no_grad():
image_embeddings = self.model.get_image_features(**inputs)
return image_embeddings.squeeze().numpy()