from transformers import VisionEncoderDecoderModel, ViTImageProcessor, AutoTokenizer from PIL import Image import torch model = VisionEncoderDecoderModel.from_pretrained("nlpconnect/vit-gpt2-image-captioning") processor = ViTImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning") tokenizer = AutoTokenizer.from_pretrained("nlpconnect/vit-gpt2-image-captioning") device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) def generate_caption(image: Image.Image) -> str: if image.mode != "RGB": image = image.convert(mode="RGB") pixel_values = processor(images=image, return_tensors="pt").pixel_values.to(device) output_ids = model.generate(pixel_values, max_length=16, num_beams=1) caption = tokenizer.decode(output_ids[0], skip_special_tokens=True) return caption.strip()