nounouille commited on
Commit
004c451
·
1 Parent(s): e49e74e

� Patch gestion erreurs + timeouts pour stabilité Hugging Face

Browse files
Files changed (1) hide show
  1. app.py +18 -12
app.py CHANGED
@@ -1,8 +1,7 @@
1
  # app.py – Hugging Face Spaces avec liste dynamique depuis EC2
2
 
3
- import sys
4
- import os
5
  import requests
 
6
  import gradio as gr
7
  import base64
8
  from PIL import Image
@@ -30,37 +29,46 @@ def segment_image(image: Image.Image):
30
  image.save(buffered, format="PNG")
31
  buffered.seek(0)
32
  files = {"file": ("input.png", buffered, "image/png")}
33
- response = requests.post(API_URL, files=files)
 
34
  response.raise_for_status()
 
35
  data = response.json()
36
  mask_bytes = base64.b64decode(data["mask_base64"])
37
  mask_image = Image.open(io.BytesIO(mask_bytes)).convert("RGB")
38
  overlay_img = overlay_mask_on_image(image, mask_image)
39
  return image, mask_image, overlay_img, f"{data['inference_time']} sec"
 
 
 
 
 
40
  except Exception as e:
 
41
  return None, None, None, f"Erreur : {str(e)}"
42
 
43
  def get_remote_image_names():
44
  try:
45
- response = requests.get(IMAGE_LIST_URL)
46
  response.raise_for_status()
47
- return response.json()["files"]
48
- except:
 
49
  return ["Erreur lors du chargement des noms"]
50
 
51
  def load_image_from_url(filename):
52
  try:
53
  url = IMAGE_BASE_URL + filename
54
- response = requests.get(url)
55
  response.raise_for_status()
56
  return Image.open(io.BytesIO(response.content)).convert("RGB")
57
  except Exception as e:
58
- print(f"Erreur chargement image URL {filename} : {e}")
59
  return None
60
 
61
  with gr.Blocks(title="Segmentation d'Images Urbaines") as demo:
62
  gr.Markdown("# 🧠 Segmentation d'Images Urbaines")
63
- gr.Markdown("Upload une image ou sélectionne un exemple distant hébergé sur EC2 (33 images dispo)")
64
 
65
  with gr.Row():
66
  input_image = gr.Image(type="pil", label="Image d'entrée")
@@ -82,7 +90,5 @@ with gr.Blocks(title="Segmentation d'Images Urbaines") as demo:
82
  with gr.Accordion("🎨 Légende des classes", open=False):
83
  gr.Image(value=legend_img, label="Légende (fictive ici)", interactive=False)
84
 
85
-
86
-
87
  if __name__ == "__main__":
88
- demo.launch()
 
1
  # app.py – Hugging Face Spaces avec liste dynamique depuis EC2
2
 
 
 
3
  import requests
4
+ from requests.exceptions import RequestException
5
  import gradio as gr
6
  import base64
7
  from PIL import Image
 
29
  image.save(buffered, format="PNG")
30
  buffered.seek(0)
31
  files = {"file": ("input.png", buffered, "image/png")}
32
+
33
+ response = requests.post(API_URL, files=files, timeout=10)
34
  response.raise_for_status()
35
+
36
  data = response.json()
37
  mask_bytes = base64.b64decode(data["mask_base64"])
38
  mask_image = Image.open(io.BytesIO(mask_bytes)).convert("RGB")
39
  overlay_img = overlay_mask_on_image(image, mask_image)
40
  return image, mask_image, overlay_img, f"{data['inference_time']} sec"
41
+
42
+ except RequestException as e:
43
+ print(f"[ERREUR API EC2] {e}")
44
+ return None, None, None, "Erreur : EC2 injoignable ou lente"
45
+
46
  except Exception as e:
47
+ print(f"[ERREUR GRADIO] {e}")
48
  return None, None, None, f"Erreur : {str(e)}"
49
 
50
  def get_remote_image_names():
51
  try:
52
+ response = requests.get(IMAGE_LIST_URL, timeout=5)
53
  response.raise_for_status()
54
+ return response.json().get("files", [])
55
+ except Exception as e:
56
+ print(f"[ERREUR LISTE FICHIERS] {e}")
57
  return ["Erreur lors du chargement des noms"]
58
 
59
  def load_image_from_url(filename):
60
  try:
61
  url = IMAGE_BASE_URL + filename
62
+ response = requests.get(url, timeout=5)
63
  response.raise_for_status()
64
  return Image.open(io.BytesIO(response.content)).convert("RGB")
65
  except Exception as e:
66
+ print(f"[ERREUR CHARGEMENT IMAGE {filename}] {e}")
67
  return None
68
 
69
  with gr.Blocks(title="Segmentation d'Images Urbaines") as demo:
70
  gr.Markdown("# 🧠 Segmentation d'Images Urbaines")
71
+ gr.Markdown("Upload une image ou sélectionne une image distante depuis EC2")
72
 
73
  with gr.Row():
74
  input_image = gr.Image(type="pil", label="Image d'entrée")
 
90
  with gr.Accordion("🎨 Légende des classes", open=False):
91
  gr.Image(value=legend_img, label="Légende (fictive ici)", interactive=False)
92
 
 
 
93
  if __name__ == "__main__":
94
+ demo.launch()