open-gpt-oss / app.py
arya89's picture
Create app.py
cce4140 verified
raw
history blame
3.3 kB
import torch
from transformers import Blip2Processor, Blip2ForConditionalGeneration
from PIL import Image
import gradio as gr
from io import BytesIO
import requests
# -----------------------------
# Device and Model Setup
# -----------------------------
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using device: {device}")
model_name = "Salesforce/blip2-flan-t5-xl-coco" # public model
processor = Blip2Processor.from_pretrained(model_name)
model = Blip2ForConditionalGeneration.from_pretrained(model_name)
model.to(device)
# -----------------------------
# Inference Function
# -----------------------------
def analyze_eo_image(image, question):
if image is None or question.strip() == "":
return "Please upload an EO image and ask a question."
if image.mode != "RGB":
image = image.convert("RGB")
inputs = processor(image, question, return_tensors="pt").to(
device, torch.float16 if device=="cuda" else torch.float32
)
out = model.generate(
**inputs,
max_new_tokens=80,
do_sample=True,
temperature=0.7
)
return processor.decode(out[0], skip_special_tokens=True)
# -----------------------------
# Optional: URL input
# -----------------------------
def analyze_eo_url(url, question):
try:
response = requests.get(url)
image = Image.open(BytesIO(response.content)).convert("RGB")
return analyze_eo_image(image, question)
except Exception as e:
return f"Error loading image: {e}"
# -----------------------------
# Beautiful Gradio Layout
# -----------------------------
with gr.Blocks(title="🌍 EO Image Analysis") as demo:
gr.Markdown(
"""
# 🌍 Earth Observation Image Analysis
Ask questions about EO images using a multimodal AI model.
Powered by BLIP-2 + FLAN-T5.
**Examples:** "Identify land cover types", "Where is the river?", "Has urban area expanded?"
"""
)
with gr.Tabs():
with gr.Tab("Upload Image"):
with gr.Row():
with gr.Column(scale=1):
img_input = gr.Image(type="pil", label="Upload EO Image")
question_input = gr.Textbox(label="Ask a question about the image", placeholder="E.g. Where is the river?")
submit_btn = gr.Button("Analyze 🌟")
with gr.Column(scale=1):
output_text = gr.Textbox(label="AI Answer", interactive=False)
submit_btn.click(analyze_eo_image, inputs=[img_input, question_input], outputs=output_text)
with gr.Tab("Use Image URL"):
with gr.Row():
with gr.Column(scale=1):
url_input = gr.Textbox(label="Enter Image URL")
url_question = gr.Textbox(label="Ask a question about the image")
url_btn = gr.Button("Analyze 🌟")
with gr.Column(scale=1):
url_output = gr.Textbox(label="AI Answer", interactive=False)
url_btn.click(analyze_eo_url, inputs=[url_input, url_question], outputs=url_output)
gr.Markdown(
"πŸ’‘ Tip: Use clear, simple questions for best results. Supports natural language queries about EO images."
)
demo.launch(share=True)