Yohan Runhaar commited on
Commit
56ae707
Β·
1 Parent(s): cccde55

add examples

Browse files
Files changed (2) hide show
  1. app.py +49 -6
  2. examples.json +16 -0
app.py CHANGED
@@ -1,6 +1,8 @@
1
  import gradio as gr
2
  import torch
3
  import os
 
 
4
  import matplotlib.pyplot as plt
5
  from ultralytics import YOLO
6
 
@@ -11,7 +13,9 @@ model_names = [
11
 
12
  current_model_name = "yolov8_xlarge_latest.pt"
13
  model_dir = "models"
 
14
  os.makedirs(model_dir, exist_ok=True)
 
15
 
16
  # Download models if not already present locally
17
  HF_MODELS_REPO = "https://huggingface.co/reefsupport/coral-ai/resolve/main/models"
@@ -26,6 +30,37 @@ for model_name in model_names:
26
  model = YOLO(os.path.join(model_dir, current_model_name))
27
 
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  def compute_class_areas(predictions, image_shape):
30
  """
31
  Compute the area percentage covered by each class for the prediction.
@@ -59,6 +94,7 @@ def generate_coverage_graph(class_areas):
59
  plt.xlabel("Class")
60
  plt.ylabel("Coverage Percentage")
61
  plt.title("Class Coverage as % of Total Image")
 
62
  graph_path = "class_coverage.png"
63
  plt.savefig(graph_path)
64
  plt.close()
@@ -87,6 +123,18 @@ def coral_ai_inference(image, model_name):
87
  return rendered_image, graph_path
88
 
89
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  # Define Gradio interface
91
  inputs = [
92
  gr.Image(type="numpy", label="Input Image"),
@@ -100,12 +148,7 @@ outputs = [
100
 
101
  title = "Coral AI Demo"
102
 
103
- examples = [
104
- # Uncomment and add your example images here if needed
105
- # ["examples/coral_image1.jpg", "yolov8_xlarge_latest.pt"],
106
- # ["examples/coral_image2.jpg", "yolov8_xlarge_latest.pt"],
107
- # ["examples/coral_image3.jpg", "yolov8_xlarge_latest.pt"],
108
- ]
109
 
110
  demo_app = gr.Interface(
111
  fn=coral_ai_inference,
 
1
  import gradio as gr
2
  import torch
3
  import os
4
+ import json
5
+ import requests
6
  import matplotlib.pyplot as plt
7
  from ultralytics import YOLO
8
 
 
13
 
14
  current_model_name = "yolov8_xlarge_latest.pt"
15
  model_dir = "models"
16
+ examples_dir = "examples"
17
  os.makedirs(model_dir, exist_ok=True)
18
+ os.makedirs(examples_dir, exist_ok=True)
19
 
20
  # Download models if not already present locally
21
  HF_MODELS_REPO = "https://huggingface.co/reefsupport/coral-ai/resolve/main/models"
 
30
  model = YOLO(os.path.join(model_dir, current_model_name))
31
 
32
 
33
+ def download_examples(json_file="examples.json"):
34
+ """
35
+ Download example images specified in the JSON file and save them in the examples directory.
36
+ """
37
+ if not os.path.exists(json_file):
38
+ print(f"Examples JSON file '{json_file}' not found. Skipping example download.")
39
+ return
40
+
41
+ with open(json_file, "r") as f:
42
+ data = json.load(f)
43
+
44
+ for example in data["examples"]:
45
+ image_name = example["name"].replace(" ", "_").lower() + ".jpg"
46
+ image_path = os.path.join(examples_dir, image_name)
47
+
48
+ if not os.path.exists(image_path): # Skip if already downloaded
49
+ print(f"Downloading {example['name']}...")
50
+ response = requests.get(example["url"], stream=True)
51
+ if response.status_code == 200:
52
+ with open(image_path, "wb") as img_file:
53
+ for chunk in response.iter_content(1024):
54
+ img_file.write(chunk)
55
+ print(f"Saved {example['name']} to {image_path}")
56
+ else:
57
+ print(f"Failed to download {example['name']}: {response.status_code}")
58
+
59
+
60
+ # Download example images
61
+ download_examples()
62
+
63
+
64
  def compute_class_areas(predictions, image_shape):
65
  """
66
  Compute the area percentage covered by each class for the prediction.
 
94
  plt.xlabel("Class")
95
  plt.ylabel("Coverage Percentage")
96
  plt.title("Class Coverage as % of Total Image")
97
+ plt.ylim(0, 100) # Always show the Y-axis up to 100%
98
  graph_path = "class_coverage.png"
99
  plt.savefig(graph_path)
100
  plt.close()
 
123
  return rendered_image, graph_path
124
 
125
 
126
+ # Dynamically generate Gradio examples
127
+ def generate_examples(json_file="examples.json"):
128
+ """
129
+ Generate Gradio examples from the examples.json file.
130
+ """
131
+ if not os.path.exists(json_file):
132
+ return []
133
+ with open(json_file, "r") as f:
134
+ data = json.load(f)
135
+ return [[os.path.join(examples_dir, example["name"].replace(" ", "_").lower() + ".jpg"), current_model_name] for example in data["examples"]]
136
+
137
+
138
  # Define Gradio interface
139
  inputs = [
140
  gr.Image(type="numpy", label="Input Image"),
 
148
 
149
  title = "Coral AI Demo"
150
 
151
+ examples = generate_examples()
 
 
 
 
 
152
 
153
  demo_app = gr.Interface(
154
  fn=coral_ai_inference,
examples.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "examples": [
3
+ {
4
+ "name": "Coral Image 1",
5
+ "url": "https://ff6425733e9f062e720f6be3fac30eb5ee58537bb4b0958e4776d9f-apidata.googleusercontent.com/download/storage/v1/b/rs_storage_open/o/benthic_datasets%2Fmask_labels%2Freef_support%2FSEAVIEW_PAC_AUS%2Fimages%2F10001003901.jpg?jk=AXvcXDu354Gu6Ir26-lj0fdx9wUNUA9n7j6eMT3SYVnvA1PbTTPHKFBKWgZl1sgV6mySj4B8lIlrF75kW1WuQZKq1_1JjbF4bQUglPDbRZZSFhPOvLy4kRS5QW4WP2q9_xz5qcdvRZUej-hDlWWq-ctVGM4S_8U19w1DpEf7_-zQIPBJ2dz9Ghn5Nx0X-zeIqYpD3vUgtfnOf_t_2zyY75lPPmu-JjaUirUUULPLHUNNbHc-9AKhpy7faRZVsmMaj_emFCNGkYFFMCHmQ5suEfSfdRuEvp2S4chOgUFdnJSSDxzkGC7FvfdZDwzcU_fr2exRLOSXkBFpbKsHhso-jmYXL8NsbBg3I_dYgjJUqRnYFqKoAWF7epXTR3foEgAoJGQD_mDmacIyPz-k43GMWK0qJ-kSKbmppqgiadYd03INcq6wz7jMZ27ydlLBBkIPwpg9Hb5DtU7ZksfkV7q9rVaxDDSVltdZrhs-6Q7FllTmIE5Rnbuu3MNm0zKjUtCDtuVr54-6tb_SF9E4OTYyrC_Jq_-nkjrqzg9EVt6asxGPJNy6AzV8i0XBNisdLHEL3rgzV7dhKsRCgxYRKeag1lCJLKif_Zmx4R-MjTrg901g0lQk0w27IRNcZGKhnMR4XciPdTRmm2t6C2-vFti_zsMF9nt2lwOJ31a9A2RmYPOTkOUZMrEw0RbMqFvSWfcjeMbfkq36A2tmH3W7OAqKvm7DHbkJkWRtG9ftyEGoGpEsIIchCks5zKPKQU6aLJveaj3adWw6xTri0dEbhQb6Ocbx4A4VEBHVT3ZuXdI2TwsyZsoreC6qv6A_R9q_QNtA-PSZJX_bIXhYpSovSjOb54EpkBsZSRVM-o-QCXnNrNCVuKd-aJf4oPf_SNo7k-R0r0IpLB5Cs90X8OhOzblbKcU4JJWNaLuI5bQqO0RG_2yOikQTWzMSI804jVS_o25CwZYejh8K5JuznsKDS8ZlPqd2pmhvbwupgffb6wkhRsutdWpQE0yNh3vP7GLp75Dge1k6azxJfmbpN4ke3n41tziBaXmwZl5OYYDv-GjqmTRYylJpahVgf-N0i7WxQmZ0BkCyGdiNgGT9yg1VCEycnL5iJY6XUewuWydgHqSHdFAc5qL4QV-quZeW-qaHhQKMHakYRaKsfx-EENhqhNiuc0o1P3ZqNAh5v7L0DVM1if5jR_IskZR4HTbV3zDzs5dEBNbkCyI1-RclTDiymjbus2AXOsgLgcgk&isca=1"
6
+ },
7
+ {
8
+ "name": "Coral Image 2",
9
+ "url": "https://ff15f33419c2f164c60ed7dc399f4c76b458b9d46ae7da5e93faef6-apidata.googleusercontent.com/download/storage/v1/b/rs_storage_open/o/benthic_datasets%2Fmask_labels%2Freef_support%2FTETES_PROVIDENCIA%2Fimages%2FG0088426.JPG?jk=AXvcXDsnIsC7e2uC41Ghooe2-unlhJF8V-aJbdI7-1U2ikEHpQdHIh7CIxQckimMvmISRyqViaHANvr5fp9b4g7g9U9H0MKVHL_Fm5d0WuJUo8WNUM8BNGrGf47O5Xk6lh3u032z5xDcYm9i0M1MW_glwvZCxAkYCnnHHNe27Pxxs1LSz6Kn30rLOD_YP43eHou-CCB2QnoGZNI1k9vKjyOO-L_dzIa_ZyHlsSXZ6-JR2RfGddhhycZZws8lkb3z16NcN94iMpUe7cnPePebz6fOs1Op0mDCJs-oYVlW4syI_dyJdMxGHDdZkgOGtOQWaWm4FoBkIuFW5dcJXZ0fOIB5EuhUNSib5SX4GJNlgghb0v016kyvGS-YuZL_An33_tbhjKcXzf4FEZpEvTEkR4CJCYzthI4Gq0dX2A8_WSsuKcc5Z5mvHi8Xogxq3wJQruquA3MQQCuF9gOQgmw2o-jHN3iCIRwtmGeRoGM62wyye2zm0SXf2dfE7QSBDw5yQ1Tp2a47eiF6SLws_FNqt0VapPPtG0i0WIo1Tbi4sVoJw110K41vuoyQlRTea0tpy0LZPsF-iPluaLCBw5RNHHogCXHYJpc5m88kf4589KM6jX0HlcmVxhmwBHX4gkOER_YYYNl4Vg0rwpFodW0US90qTLWM-HanlJV1cW0PrPv-HMsaYZSwTcWqJajdlJRNUffY7CRMTf0jqEYJKgO0f9aiPFG4NYn04gGTBy22HB4wltzUYEOmaYU_y6PSW9kxHfwwFc56mtYpR2Eh3WWI7kHMsWKizD1iHfoMXmIz-zj1_MQLIiovcMN24Osx-jKUYA4bREBvZjMuXHK85KdoJ3w7e4inm9SBJ_Uh2BWWgj4I1_-r3n1Dh8A919Z8Zn1o1Tne1frw7c2xgBrhkuIP-O9l-Yi1Ti7caRhqA_SHXFEbObKPABa5lDjG8rf5P_oIPUnR_XUjRqSIl0WUvCVvusFnIpn_RhnP5BJcajXwMEI1IYkyeknFKyU_PEaloca84tqWZmvlDwWfdf3f7RL-P7NqnddDn7p4qaOv2buVb8TG4EsTxH5QmwTdEhU2JWrSHJntDtoeSfygIXgi2UNJxsAtbSmRGBVdBjr5jdufpaKPOfa0_v3poMELcX-3qej85ZHsK7s5rAX_LLMnuMgMPzu-8Ek5PWNoGrNMgqShC_uB5hUmxNyOpvAVizDwGDMo_ZAXvrAiTmLF1WEIrzDLtTB0h9bFMMU&isca=1"
10
+ },
11
+ {
12
+ "name": "Coral Image 3",
13
+ "url": "https://ff96014f4614cc73cfb9ab8971ba96dad8f24cca53c41cdfa1203a8-apidata.googleusercontent.com/download/storage/v1/b/rs_storage_open/o/benthic_datasets%2Fmask_labels%2Freef_support%2FSEAFLOWER_BOLIVAR%2Fimages%2F20220912_AnB_CB10%20(122).JPG?jk=AXvcXDsxQMWfpdBFpQtmBnK8or0mpwg7a-fMssxizWt5SecBDKydOWT6R-Hy0wpEY3AJE3VSBne9KRBnq1j0g_rhq2fOw5i4adjH5UqsQy_r6ZIpRAAZ3krzBoinrVrjKs9bqb7Ap204Dpw9C4F8II9zsoJs-_cFMhft-34fBFE-F6RaBusOQb8C7covKRe6iVaABSNAoqSU7kWqYdE52qTlqfvTPA4e5v2i6QJ5mFP2PFNb5N3J0VgLlsuviFr4uQyPeEu-Q6CSjcUuWP3pfeNqJJSL_U7I0IurOKqjLZYbg6jm7TLZeyk6yh6GBpTJ_LM4PaxCastzoMvbZboeqxaigpLzLJ88JijHDs5UQHNBGdvU1FOpgxj1jUjeqLB0Xl4iTWwQw1npL4_iIp01UV2pSF3U6o1QXQTrMmfW3DXj5V4pBX4JbkQtUCoOxY53ASdeLm5w9lyzlSm_eQen3Yx_o36LJrrlP2NGlxhTrbkwyx9zvSaRogxnwQKkjB01XkQzwxcb9wFcY1aaWNMF5pMoSj_6FIrQUKr-rpgIJscsbnf9uJcjFYcD9ypaQZ9enOzSTRVAbuMC0bC9n-pX6pc5_qTqgtSMOzLq5gOAYP4vPy5lkAAkLicrmRIu-jr8OKwb-PLXjXsi4nBcXT__DkLsXe7YWD_wbf1zru2EPTh1TWn7JtZJaYXKOmkX4bueTI_bt-3Av_EoGM_GDWu9hrlMPFmfyzWzy01ey60UMv04x0MjnIomXdkxVl9iX4TBFO2yEHw7FqyZte_Wm5LbhaLcLeYEXe_vi7T7mEKCbAmUgfD0na5L5GevrQt46xW3KpPKp2kSf3ZwV0u-iNIg5uWWRrtZ-JkjZZUpnimYssxJOks37Ube-dhaQB17V-xhVmCMTLcE2ILw_FplPZO-UJti3b7NwIAn4OV5lvWsTjyvGhHxQswT89ytn1wraGA0C0-CijiD_1Nkh69Jx5m_9mBzhlUlg64Rvsyk49Y3db6n9iVt0mVsvQYrVhPgIqqy0hWyAXk3cX40CtpjC5RQfl_0Pp89gUJgx9YZE4oM0pP-JEINELXnuMwOawMRGGE5BQ8TiAy_GEVaHNvIONgkxuWCNzwVNR9rPrZ60XE1DSVxfDPTpGFRqkoVDdRCJltU7MxAPrhlHgRYLSxprxD72lfewnp2UlWp6YSyPnxGjERhjweAb2UbwsEsr8i_7DURxFAc1BxQMcdObn3Lg3wCNm1A86kw17EBHMPu2hXfVeww3l6acaIO1A&isca=1"
14
+ }
15
+ ]
16
+ }