Projectt123 commited on
Commit
922847d
·
verified ·
1 Parent(s): 2bed17a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -26
app.py CHANGED
@@ -14,36 +14,80 @@ model_en = BlipForConditionalGeneration.from_pretrained(model_path)
14
  model_en.eval()
15
 
16
  # Function to describe image
 
17
  def describe_image(image, language):
18
- if language == "Arabic":
19
- inputs = processor_en(image, return_tensors="pt")
20
- with torch.no_grad():
21
- out = model_en.generate(**inputs)
22
- description = processor_en.decode(out[0], skip_special_tokens=True)
23
- inputs_ar = translator_tokenizer_ar(description, return_tensors="pt")
24
- with torch.no_grad():
25
- translated_tokens = translator_model_ar.generate(**inputs_ar)
26
- arabic_description = translator_tokenizer_ar.decode(translated_tokens[0], skip_special_tokens=True)
27
- return arabic_description
28
-
29
- elif language == "English":
30
- inputs_en = processor_en(image, return_tensors="pt")
31
- with torch.no_grad():
32
- out_en = model_en.generate(**inputs_en)
33
- description_en = processor_en.decode(out_en[0], skip_special_tokens=True)
34
- return description_en
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
  # Gradio UI
37
- iface = gr.Interface(
38
- fn=describe_image,
39
  inputs=[
40
- gr.Image(type="pil", label="Upload an Image"),
41
- gr.Dropdown(choices=["Arabic", "English"], label="Select Language")
42
  ],
43
- outputs="text",
44
- title="Image Captioning with Arabic Translation",
45
- description="Select the language and upload an image to get a description."
46
  )
47
 
48
- if __name__ == "__main__":
49
- iface.launch()
 
 
14
  model_en.eval()
15
 
16
  # Function to describe image
17
+ @torch.no_grad()
18
  def describe_image(image, language):
19
+ pil = image if isinstance(image, Image.Image) else Image.fromarray(image)
20
+
21
+ # وصف بالإنجليزية
22
+ inputs = processor_en(pil, return_tensors="pt")
23
+ out_ids = model_en.generate(**inputs)
24
+ en_desc = processor_en.decode(out_ids[0], skip_special_tokens=True)
25
+
26
+ # الترجمة إذا اللغة عربية
27
+ if str(language).lower().startswith(("ar", "arabic")) or language == "العربية":
28
+ inputs_ar = translator_tokenizer_ar(en_desc, return_tensors="pt")
29
+ ar_tokens = translator_model_ar.generate(**inputs_ar)
30
+ ar_desc = translator_tokenizer_ar.decode(ar_tokens[0], skip_special_tokens=True)
31
+ return ar_desc
32
+ else:
33
+ return en_desc
34
+
35
+ ASIR_BBOX = {
36
+ "lat_min": 17.0, "lat_max": 20.0,
37
+ "lon_min": 41.5, "lon_max": 44.0,
38
+ }
39
+
40
+ def random_point_in_bbox(bbox):
41
+ lat = random.uniform(bbox["lat_min"], bbox["lat_max"])
42
+ lon = random.uniform(bbox["lon_min"], bbox["lon_max"])
43
+ return round(lat, 6), round(lon, 6)
44
+
45
+ def render_html(caption_text, lat, lon, language="English"):
46
+ now = datetime.datetime.now()
47
+ dt_str = now.strftime("%d %B %Y - %I:%M %p")
48
+
49
+ is_ar = str(language).lower().startswith(("ar", "arabic")) or language == "العربية"
50
+ dt_line = f"🕒 {'التاريخ والوقت' if is_ar else 'Date & Time'}: {dt_str}"
51
+ loc_label = "📍 الموقع" if is_ar else "📍 Location"
52
+
53
+ zoom = 16
54
+ osm_iframe = (
55
+ f'<iframe width="100%" height="300" frameborder="0" '
56
+ f'src="https://www.openstreetmap.org/export/embed.html?layer=mapnik&marker={lat}%2C{lon}&zoom={zoom}"></iframe>'
57
+ f'<div style="font-size:12px;color:#aaa;margin-top:4px">{loc_label}: {lat}, {lon} '
58
+ f'• <a target="_blank" href="https://www.openstreetmap.org/?mlat={lat}&mlon={lon}#map={zoom}/{lat}/{lon}">Open map</a>'
59
+ f'</div>'
60
+ )
61
+
62
+ return f"""
63
+ <div style="font-family:system-ui,Segoe UI,Arial;color:#eee;line-height:1.5">
64
+ <div style="background:#1f1f1f;padding:14px 16px;border-radius:10px;margin-bottom:10px;">
65
+ <div style="font-size:16px;white-space:pre-wrap;">{caption_text}</div>
66
+ </div>
67
+ {osm_iframe}
68
+ <div style="margin-top:8px;font-size:14px;">{dt_line}</div>
69
+ </div>
70
+ """
71
+
72
+ def ui_print_like(image, language):
73
+ caption = describe_image(image, language)
74
+ lat, lon = random_point_in_bbox(ASIR_BBOX)
75
+ return render_html(caption, lat, lon, language)
76
+
77
+
78
 
79
  # Gradio UI
80
+ demo = gr.Interface(
81
+ fn=ui_print_like,
82
  inputs=[
83
+ gr.Image(type="pil", label="Upload road image"),
84
+ gr.Dropdown(choices=["Arabic", "English", "العربية"], value="English", label="Select Language")
85
  ],
86
+ outputs=gr.HTML(label="output"),
87
+ title="MuniVis Road Issue Detector (Asir)",
88
+ description="Upload an image and get a description with a map (Asir random location) and date/time."
89
  )
90
 
91
+ demo.launch(debug=True)
92
+
93
+