| from typing import List | |
| import torch | |
| from transformers import SamModel, SamProcessor | |
| from PIL import Image | |
| import numpy as np | |
| MODEL_ID = "facebook/sam-vit-large" | |
| class PreTrainedPipeline(): | |
| def __init__(self, path=""): | |
| self.device = torch.device( | |
| "cuda" if torch.cuda.is_available() else "cpu") | |
| self.processor = SamProcessor.from_pretrained(MODEL_ID) | |
| self.model = SamModel.from_pretrained(MODEL_ID).to(self.device) | |
| self.model.eval() | |
| self.model = self.model.to(self.device) | |
| def __call__(self, inputs: "Image.Image") -> List[float]: | |
| raw_image = inputs.convert("RGB") | |
| inputs = self.processor(raw_image, return_tensors="pt").to(self.device) | |
| feature_vector = self.model.get_image_embeddings( | |
| inputs["pixel_values"]) | |
| return feature_vector.tolist() | |