| | import gradio as gr |
| | import torch |
| | from transformers import BlipProcessor, BlipForConditionalGeneration |
| |
|
| | MODEL_NAME = "Salesforce/blip-image-captioning-base" |
| |
|
| | |
| | try: |
| | device = "cuda" if torch.cuda.is_available() else "cpu" |
| | caption_processor = BlipProcessor.from_pretrained(MODEL_NAME) |
| | caption_model = BlipForConditionalGeneration.from_pretrained(MODEL_NAME) |
| | caption_model.to(device) |
| | _load_error = None |
| | except Exception as e: |
| | caption_processor = None |
| | caption_model = None |
| | _load_error = str(e) |
| |
|
| | |
| | def caption_image(image): |
| | if _load_error: |
| | return f"❌ Model load error: {_load_error}" |
| | if image is None: |
| | return "⚠️ لطفاً یک تصویر آپلود کنید." |
| |
|
| | inputs = caption_processor(image, return_tensors="pt").to(device) |
| | out = caption_model.generate(**inputs, max_new_tokens=30) |
| | caption = caption_processor.decode(out[0], skip_special_tokens=True) |
| | return caption |
| |
|
| | |
| | status_text = ( |
| | "✅ Model loaded successfully" |
| | if caption_model is not None and not _load_error |
| | else f"❌ Error: {_load_error}" |
| | if _load_error |
| | else "⏳ Loading model..." |
| | ) |
| |
|
| | with gr.Blocks(title="Image Captioning App") as demo: |
| | gr.Markdown("## 🖼️ Image Captioning with BLIP\nUpload an image and get an automatic caption.") |
| | gr.Markdown(f"**Status:** {status_text}") |
| |
|
| | with gr.Row(): |
| | image_input = gr.Image(type="pil", label="Upload Image") |
| | caption_output = gr.Textbox(label="Generated Caption", interactive=False) |
| |
|
| | generate_btn = gr.Button("Generate Caption") |
| |
|
| | generate_btn.click(fn=caption_image, inputs=image_input, outputs=caption_output) |
| |
|
| | demo.launch() |
| |
|