import gradio as gr from transformers import BlipProcessor, BlipForConditionalGeneration, MarianMTModel, MarianTokenizer from PIL import Image import torch import random import datetime # Load translation model translator_model_ar = MarianMTModel.from_pretrained("Helsinki-NLP/opus-mt-en-ar") translator_tokenizer_ar = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-ar") # Load BLIP model (fine-tuned) model_path = "Projectt123/MuniVis" processor_en = BlipProcessor.from_pretrained(model_path) model_en = BlipForConditionalGeneration.from_pretrained(model_path) model_en.eval() # Function to describe image @torch.no_grad() def describe_image(image, language): pil = image if isinstance(image, Image.Image) else Image.fromarray(image) # وصف بالإنجليزية inputs = processor_en(pil, return_tensors="pt") out_ids = model_en.generate(**inputs) en_desc = processor_en.decode(out_ids[0], skip_special_tokens=True) # الترجمة إذا اللغة عربية if str(language).lower().startswith(("ar", "arabic")) or language == "العربية": inputs_ar = translator_tokenizer_ar(en_desc, return_tensors="pt") ar_tokens = translator_model_ar.generate(**inputs_ar) ar_desc = translator_tokenizer_ar.decode(ar_tokens[0], skip_special_tokens=True) return ar_desc else: return en_desc ASIR_BBOX = { "lat_min": 17.0, "lat_max": 20.0, "lon_min": 41.5, "lon_max": 44.0, } def random_point_in_bbox(bbox): lat = random.uniform(bbox["lat_min"], bbox["lat_max"]) lon = random.uniform(bbox["lon_min"], bbox["lon_max"]) return round(lat, 6), round(lon, 6) def render_html(caption_text, lat, lon, language="English"): now = datetime.datetime.now() dt_str = now.strftime("%d %B %Y - %I:%M %p") is_ar = str(language).lower().startswith(("ar", "arabic")) or language == "العربية" dt_line = f"🕒 {'التاريخ والوقت' if is_ar else 'Date & Time'}: {dt_str}" loc_label = "📍 الموقع" if is_ar else "📍 Location" zoom = 16 osm_iframe = ( f'' f'
{loc_label}: {lat}, {lon} ' f'• Open map' f'
' ) return f"""
{caption_text}
{osm_iframe}
{dt_line}
""" def ui_print_like(image, language): caption = describe_image(image, language) lat, lon = random_point_in_bbox(ASIR_BBOX) return render_html(caption, lat, lon, language) # Gradio UI demo = gr.Interface( fn=ui_print_like, inputs=[ gr.Image(type="pil", label="Upload road image"), gr.Dropdown(choices=["Arabic", "English", "العربية"], value="English", label="Select Language") ], outputs=gr.HTML(label="output"), title="MuniVis – Road Issue Detector (Asir)", description="Upload an image and get a description with a map (Asir random location) and date/time." ) demo.launch(debug=True)