Swathi02 commited on
Commit
211c91c
·
1 Parent(s): d235577

Fixed count

Browse files
Files changed (1) hide show
  1. app.py +65 -57
app.py CHANGED
@@ -21,31 +21,33 @@ service_account_json = {
21
  "universe_domain": "googleapis.com"
22
  }
23
 
 
24
  def set_min_dense_1(max_dense_0):
25
  global scaled_thresh1
26
  print("max_dense_0", max_dense_0)
27
- scaled_thresh1 = int(max_dense_0) * max_val/255
28
- dense_0 = np.where(textured_cxr<scaled_thresh1, textured_cxr, 0)
29
- dense_1 = np.where(((textured_cxr<scaled_thresh2) & (textured_cxr>=scaled_thresh1)), textured_cxr, 0)
30
  return max_dense_0, dense_0, dense_1
31
 
 
32
  def set_min_dense_2(max_dense_1):
33
  global scaled_thresh2
34
  print("max_dense_1", max_dense_1)
35
- scaled_thresh2 = int(max_dense_1) * max_val/255
36
- dense_1 = np.where(((textured_cxr<scaled_thresh2) & (textured_cxr>=scaled_thresh1)), textured_cxr, 0)
37
- dense_2 = np.where(((textured_cxr<scaled_thresh3) & (textured_cxr>=scaled_thresh2)), textured_cxr, 0)
38
  return max_dense_1, dense_1, dense_2
39
 
 
40
  def set_min_dense_3(max_dense_2):
41
  global scaled_thresh3
42
  print("max_dense_2", max_dense_2)
43
- scaled_thresh3 = int(max_dense_2) * max_val/255
44
- dense_2 = np.where(((textured_cxr<scaled_thresh3) & (textured_cxr>=scaled_thresh2)), textured_cxr, 0)
45
- dense_3 = np.where(((textured_cxr<255) & (textured_cxr>=scaled_thresh3)), textured_cxr, 0)
46
  return max_dense_2, dense_2, dense_3
47
 
48
-
49
  def authenticate_gcs():
50
  return storage.Client.from_service_account_info(service_account_json)
51
 
@@ -57,7 +59,6 @@ def download_csv_from_gcs(filename):
57
  csv_content = blob.download_as_text()
58
  return csv_content
59
 
60
-
61
  def read_csv_from_gcs(user):
62
  filename = f"density_{user}.csv"
63
  try:
@@ -69,14 +70,12 @@ def read_csv_from_gcs(user):
69
  print("Error reading CSV from GCS:", e)
70
  return []
71
 
72
-
73
  def upload_csv_to_gcs(csv_content, filename):
74
  client = authenticate_gcs()
75
  bucket = client.get_bucket(GCS_BUCKET_NAME)
76
  blob = bucket.blob(os.path.join(GCS_FOLDER_PATH, filename))
77
  blob.upload_from_string(csv_content)
78
 
79
-
80
  def new__cxr(max_dense_0, max_dense_1, max_dense_2):
81
  global textured_cxr, lung_noised, max_val, cxr, mask, scaled_thresh1, scaled_thresh2, scaled_thresh3, image_id, index, count
82
  index += 1
@@ -84,22 +83,21 @@ def new__cxr(max_dense_0, max_dense_1, max_dense_2):
84
  index = 1
85
  image_id += 1
86
 
87
- # Read CSV data from GCS
88
- csv_data = read_csv_from_gcs(user)
89
 
90
- # Write count, thresh1, thresh2, thresh3 to CSV file on GCS
91
- current_count = count # Store the current count
92
- if current_count <= 30:
93
- fieldnames = ['count', 'thresh_1', 'thresh_2', 'thresh_3']
94
  csv_content = ""
95
  for row in csv_data:
96
  csv_content += ",".join(row) + "\n"
97
- csv_content += f"{current_count},{max_dense_0},{max_dense_1},{max_dense_2}\n"
98
  filename = f"density_{user}.csv"
99
  upload_csv_to_gcs(csv_content, filename)
100
 
101
- count += 1
102
- if count > 30:
 
103
  empty_image = np.zeros((256, 256), dtype=np.uint8)
104
  label1.update(visible=False)
105
  count = 1
@@ -110,7 +108,7 @@ def new__cxr(max_dense_0, max_dense_1, max_dense_2):
110
  csv_content += ",".join(row) + "\n"
111
  fieldnames = ['count', 'thresh_1', 'thresh_2', 'thresh_3']
112
  csv_content += ",".join(fieldnames) + "\n"
113
- csv_content += f"{current_count},{max_dense_0},{max_dense_1},{max_dense_2}\n"
114
  filename = f"density_{user}.csv"
115
  upload_csv_to_gcs(csv_content, filename)
116
  return empty_image, empty_image, empty_image, empty_image, empty_image, empty_image, empty_image, 30
@@ -130,14 +128,14 @@ def new__cxr(max_dense_0, max_dense_1, max_dense_2):
130
  thresh1 = 50
131
  thresh2 = 100
132
  thresh3 = 150
133
- scaled_thresh1 = thresh1 * max_val/255
134
- scaled_thresh2 = thresh2 * max_val/255
135
- scaled_thresh3 = thresh3 * max_val/255
136
- dense_0 = np.where(textured_cxr<scaled_thresh1, textured_cxr, 0)
137
- dense_1 = np.where(((textured_cxr<scaled_thresh2) & (textured_cxr>=scaled_thresh1)), textured_cxr, 0)
138
- dense_2 = np.where(((textured_cxr<scaled_thresh3) & (textured_cxr>=scaled_thresh2)), textured_cxr, 0)
139
- dense_3 = np.where(((textured_cxr<255) & (textured_cxr>=scaled_thresh3)), textured_cxr, 0)
140
- return cxr, textured_cxr, lung_noised, dense_0, dense_1, dense_2, dense_3, count
141
 
142
 
143
  def create_csv():
@@ -159,13 +157,14 @@ def create_csv():
159
  def check_auth(username, password):
160
  global user, fresh_start
161
  user = username
162
- if(user == 'gk' and password == 'upmc2009'):
163
  create_csv()
164
  return True
165
- elif(user == 'veytel' and password == 'pittsburgh'):
166
  create_csv()
167
  return True
168
 
 
169
  def change_vis():
170
  global count
171
  if count >= 30:
@@ -173,15 +172,16 @@ def change_vis():
173
  else:
174
  return gr.Label.update(visible=False), gr.Button.update(visible=True)
175
 
 
176
  with gr.Blocks() as demo:
177
  count = 1
178
  image_id = 1
179
  index = 1
180
  executable_path = os.path.dirname(os.path.realpath(__file__))
181
  cxr_dir = os.path.join(executable_path, "Images/cxr")
182
- mask_dir = os.path.join(executable_path, "Images/mask")
183
- textured_cxr_dir = os.path.join(executable_path, "Images/textured_cxr")
184
- lung_noised_dir = os.path.join(executable_path, "Images/lung_noised")
185
  cxr_file = "cxr" + str(image_id) + "_cxr.png"
186
  mask_file = "cxr" + str(image_id) + "_mask.png"
187
  textured_cxr_file = "cxr" + str(image_id) + "_textured_" + str(index) + ".png"
@@ -195,19 +195,23 @@ with gr.Blocks() as demo:
195
  mask = cv.imread(mask_path, cv.IMREAD_GRAYSCALE)
196
  textured_cxr = cv.imread(textured_cxr_path, cv.IMREAD_GRAYSCALE)
197
  lung_noised = cv.imread(lung_noised_path, cv.IMREAD_GRAYSCALE)
198
- max_val = np.percentile(cxr, 97) # To optimize later
199
  thresh1 = 50
200
  thresh2 = 100
201
  thresh3 = 150
202
- scaled_thresh1 = thresh1 * max_val/255
203
- scaled_thresh2 = thresh2 * max_val/255
204
- scaled_thresh3 = thresh3 * max_val/255
205
- dense_0 = np.where(textured_cxr<scaled_thresh1, textured_cxr, 0)
206
- dense_1 = np.where(((textured_cxr<scaled_thresh2) & (textured_cxr>=scaled_thresh1)), textured_cxr, 0)
207
- dense_2 = np.where(((textured_cxr<scaled_thresh3) & (textured_cxr>=scaled_thresh2)), textured_cxr, 0)
208
- dense_3 = np.where(((textured_cxr<255) & (textured_cxr>=scaled_thresh3)), textured_cxr, 0)
209
  # open csv in append mode
210
- with gr.Row():
 
 
 
 
211
  with gr.Column():
212
  im1 = gr.Image(cxr, label="Original CXR")
213
  with gr.Column():
@@ -216,23 +220,24 @@ with gr.Blocks() as demo:
216
  im3 = gr.Image(lung_noised, label="Synthetic CXR")
217
  with gr.Column():
218
  label1 = gr.Label("Completed! Please close window", visible=False)
219
-
220
  with gr.Row():
221
  with gr.Column():
222
  dense0 = gr.Image(dense_0, label="Dense 0")
223
  with gr.Row():
224
  min_dense_0 = gr.Textbox(value='0', label="Min")
225
- max_dense_0 = gr.Slider(0, 255, value=50, step = 1, label="Max")
226
 
227
  with gr.Column():
228
  dense1 = gr.Image(dense_1, label="Dense 1")
229
  with gr.Row():
230
  min_dense_1 = gr.Textbox(value='50', label="Min")
231
- max_dense_1 = gr.Slider(0, 255, value=100, step = 1, label="Max")
232
- max_dense_0.change(set_min_dense_1, inputs=max_dense_0, outputs=[min_dense_1, dense0, dense1]).then(set_min_dense_1, inputs=max_dense_0, outputs=[min_dense_1, dense0, dense1])
 
233
 
234
  with gr.Column():
235
- progress_log = gr.Slider(1, 30, value=1, step = 1, label="progress")
236
  button1 = gr.Button(value="Save & continue", visible=True)
237
 
238
  with gr.Row():
@@ -240,24 +245,27 @@ with gr.Blocks() as demo:
240
  dense2 = gr.Image(dense_2, label="Dense 2")
241
  with gr.Row():
242
  min_dense_2 = gr.Textbox(value='100', label="Min")
243
- max_dense_2 = gr.Slider(0, 255, value=150, step = 1, label="Max")
244
- max_dense_1.change(set_min_dense_2, inputs=max_dense_1, outputs=[min_dense_2, dense1, dense2]).then(set_min_dense_2, inputs=max_dense_1, outputs=[min_dense_2, dense1, dense2])
 
245
 
246
  with gr.Column():
247
  dense3 = gr.Image(dense_3, label="Dense 3")
248
  with gr.Row():
249
  min_dense_3 = gr.Textbox(value='150', label="Min")
250
  max_dense_3 = gr.Textbox(value='255', label="Max")
251
- max_dense_2.change(set_min_dense_3, inputs=max_dense_2, outputs=[min_dense_3, dense2, dense3]).then(set_min_dense_3, inputs=max_dense_2, outputs=[min_dense_3, dense2, dense3])
 
252
 
253
- with gr.Column(): # adding additional for better visualization
254
  im3_1 = gr.Image(lung_noised, label="Synthetic CXR")
255
 
256
- button1.click(new__cxr, inputs = [max_dense_0, max_dense_1, max_dense_2], outputs = [im1, im2, im3, im3_1, dense0, dense1, dense2, dense3, progress_log])
257
- button1.click(change_vis,outputs=[label1, button1])
 
 
258
  if __name__ == "__main__":
259
  demo.launch(auth=check_auth)
260
 
261
 
262
 
263
-
 
21
  "universe_domain": "googleapis.com"
22
  }
23
 
24
+
25
  def set_min_dense_1(max_dense_0):
26
  global scaled_thresh1
27
  print("max_dense_0", max_dense_0)
28
+ scaled_thresh1 = int(max_dense_0) * max_val / 255
29
+ dense_0 = np.where(textured_cxr < scaled_thresh1, textured_cxr, 0)
30
+ dense_1 = np.where(((textured_cxr < scaled_thresh2) & (textured_cxr >= scaled_thresh1)), textured_cxr, 0)
31
  return max_dense_0, dense_0, dense_1
32
 
33
+
34
  def set_min_dense_2(max_dense_1):
35
  global scaled_thresh2
36
  print("max_dense_1", max_dense_1)
37
+ scaled_thresh2 = int(max_dense_1) * max_val / 255
38
+ dense_1 = np.where(((textured_cxr < scaled_thresh2) & (textured_cxr >= scaled_thresh1)), textured_cxr, 0)
39
+ dense_2 = np.where(((textured_cxr < scaled_thresh3) & (textured_cxr >= scaled_thresh2)), textured_cxr, 0)
40
  return max_dense_1, dense_1, dense_2
41
 
42
+
43
  def set_min_dense_3(max_dense_2):
44
  global scaled_thresh3
45
  print("max_dense_2", max_dense_2)
46
+ scaled_thresh3 = int(max_dense_2) * max_val / 255
47
+ dense_2 = np.where(((textured_cxr < scaled_thresh3) & (textured_cxr >= scaled_thresh2)), textured_cxr, 0)
48
+ dense_3 = np.where(((textured_cxr < 255) & (textured_cxr >= scaled_thresh3)), textured_cxr, 0)
49
  return max_dense_2, dense_2, dense_3
50
 
 
51
  def authenticate_gcs():
52
  return storage.Client.from_service_account_info(service_account_json)
53
 
 
59
  csv_content = blob.download_as_text()
60
  return csv_content
61
 
 
62
  def read_csv_from_gcs(user):
63
  filename = f"density_{user}.csv"
64
  try:
 
70
  print("Error reading CSV from GCS:", e)
71
  return []
72
 
 
73
  def upload_csv_to_gcs(csv_content, filename):
74
  client = authenticate_gcs()
75
  bucket = client.get_bucket(GCS_BUCKET_NAME)
76
  blob = bucket.blob(os.path.join(GCS_FOLDER_PATH, filename))
77
  blob.upload_from_string(csv_content)
78
 
 
79
  def new__cxr(max_dense_0, max_dense_1, max_dense_2):
80
  global textured_cxr, lung_noised, max_val, cxr, mask, scaled_thresh1, scaled_thresh2, scaled_thresh3, image_id, index, count
81
  index += 1
 
83
  index = 1
84
  image_id += 1
85
 
86
+ count += 1
 
87
 
88
+ csv_data = read_csv_from_gcs(user)
89
+ # write count, thresh1, thresh2, thresh3 to csv file
90
+ if count <= 30:
 
91
  csv_content = ""
92
  for row in csv_data:
93
  csv_content += ",".join(row) + "\n"
94
+ csv_content += f"{count},{max_dense_0},{max_dense_1},{max_dense_2}\n"
95
  filename = f"density_{user}.csv"
96
  upload_csv_to_gcs(csv_content, filename)
97
 
98
+
99
+
100
+ if (count > 30):
101
  empty_image = np.zeros((256, 256), dtype=np.uint8)
102
  label1.update(visible=False)
103
  count = 1
 
108
  csv_content += ",".join(row) + "\n"
109
  fieldnames = ['count', 'thresh_1', 'thresh_2', 'thresh_3']
110
  csv_content += ",".join(fieldnames) + "\n"
111
+ csv_content += f"{count},{max_dense_0},{max_dense_1},{max_dense_2}\n"
112
  filename = f"density_{user}.csv"
113
  upload_csv_to_gcs(csv_content, filename)
114
  return empty_image, empty_image, empty_image, empty_image, empty_image, empty_image, empty_image, 30
 
128
  thresh1 = 50
129
  thresh2 = 100
130
  thresh3 = 150
131
+ scaled_thresh1 = thresh1 * max_val / 255
132
+ scaled_thresh2 = thresh2 * max_val / 255
133
+ scaled_thresh3 = thresh3 * max_val / 255
134
+ dense_0 = np.where(textured_cxr < scaled_thresh1, textured_cxr, 0)
135
+ dense_1 = np.where(((textured_cxr < scaled_thresh2) & (textured_cxr >= scaled_thresh1)), textured_cxr, 0)
136
+ dense_2 = np.where(((textured_cxr < scaled_thresh3) & (textured_cxr >= scaled_thresh2)), textured_cxr, 0)
137
+ dense_3 = np.where(((textured_cxr < 255) & (textured_cxr >= scaled_thresh3)), textured_cxr, 0)
138
+ return cxr, textured_cxr, lung_noised, lung_noised, dense_0, dense_1, dense_2, dense_3, count
139
 
140
 
141
  def create_csv():
 
157
  def check_auth(username, password):
158
  global user, fresh_start
159
  user = username
160
+ if (user == 'gk' and password == 'upmc2009'):
161
  create_csv()
162
  return True
163
+ elif (user == 'veytel' and password == 'pittsburgh'):
164
  create_csv()
165
  return True
166
 
167
+
168
  def change_vis():
169
  global count
170
  if count >= 30:
 
172
  else:
173
  return gr.Label.update(visible=False), gr.Button.update(visible=True)
174
 
175
+
176
  with gr.Blocks() as demo:
177
  count = 1
178
  image_id = 1
179
  index = 1
180
  executable_path = os.path.dirname(os.path.realpath(__file__))
181
  cxr_dir = os.path.join(executable_path, "Images/cxr")
182
+ mask_dir = os.path.join(executable_path, "Images/mask")
183
+ textured_cxr_dir = os.path.join(executable_path, "Images/textured_cxr")
184
+ lung_noised_dir = os.path.join(executable_path, "Images/lung_noised")
185
  cxr_file = "cxr" + str(image_id) + "_cxr.png"
186
  mask_file = "cxr" + str(image_id) + "_mask.png"
187
  textured_cxr_file = "cxr" + str(image_id) + "_textured_" + str(index) + ".png"
 
195
  mask = cv.imread(mask_path, cv.IMREAD_GRAYSCALE)
196
  textured_cxr = cv.imread(textured_cxr_path, cv.IMREAD_GRAYSCALE)
197
  lung_noised = cv.imread(lung_noised_path, cv.IMREAD_GRAYSCALE)
198
+ max_val = np.percentile(cxr, 97) # To optimize later
199
  thresh1 = 50
200
  thresh2 = 100
201
  thresh3 = 150
202
+ scaled_thresh1 = thresh1 * max_val / 255
203
+ scaled_thresh2 = thresh2 * max_val / 255
204
+ scaled_thresh3 = thresh3 * max_val / 255
205
+ dense_0 = np.where(textured_cxr < scaled_thresh1, textured_cxr, 0)
206
+ dense_1 = np.where(((textured_cxr < scaled_thresh2) & (textured_cxr >= scaled_thresh1)), textured_cxr, 0)
207
+ dense_2 = np.where(((textured_cxr < scaled_thresh3) & (textured_cxr >= scaled_thresh2)), textured_cxr, 0)
208
+ dense_3 = np.where(((textured_cxr < 255) & (textured_cxr >= scaled_thresh3)), textured_cxr, 0)
209
  # open csv in append mode
210
+ # add title
211
+ with gr.Row():
212
+ label_title = gr.Label("VeyTel Density Mapper", visible=True)
213
+
214
+ with gr.Row():
215
  with gr.Column():
216
  im1 = gr.Image(cxr, label="Original CXR")
217
  with gr.Column():
 
220
  im3 = gr.Image(lung_noised, label="Synthetic CXR")
221
  with gr.Column():
222
  label1 = gr.Label("Completed! Please close window", visible=False)
223
+
224
  with gr.Row():
225
  with gr.Column():
226
  dense0 = gr.Image(dense_0, label="Dense 0")
227
  with gr.Row():
228
  min_dense_0 = gr.Textbox(value='0', label="Min")
229
+ max_dense_0 = gr.Slider(0, 255, value=50, step=1, label="Max")
230
 
231
  with gr.Column():
232
  dense1 = gr.Image(dense_1, label="Dense 1")
233
  with gr.Row():
234
  min_dense_1 = gr.Textbox(value='50', label="Min")
235
+ max_dense_1 = gr.Slider(0, 255, value=100, step=1, label="Max")
236
+ max_dense_0.change(set_min_dense_1, inputs=max_dense_0, outputs=[min_dense_1, dense0, dense1]).then(
237
+ set_min_dense_1, inputs=max_dense_0, outputs=[min_dense_1, dense0, dense1])
238
 
239
  with gr.Column():
240
+ progress_log = gr.Slider(1, 30, value=1, step=1, label="progress")
241
  button1 = gr.Button(value="Save & continue", visible=True)
242
 
243
  with gr.Row():
 
245
  dense2 = gr.Image(dense_2, label="Dense 2")
246
  with gr.Row():
247
  min_dense_2 = gr.Textbox(value='100', label="Min")
248
+ max_dense_2 = gr.Slider(0, 255, value=150, step=1, label="Max")
249
+ max_dense_1.change(set_min_dense_2, inputs=max_dense_1, outputs=[min_dense_2, dense1, dense2]).then(
250
+ set_min_dense_2, inputs=max_dense_1, outputs=[min_dense_2, dense1, dense2])
251
 
252
  with gr.Column():
253
  dense3 = gr.Image(dense_3, label="Dense 3")
254
  with gr.Row():
255
  min_dense_3 = gr.Textbox(value='150', label="Min")
256
  max_dense_3 = gr.Textbox(value='255', label="Max")
257
+ max_dense_2.change(set_min_dense_3, inputs=max_dense_2, outputs=[min_dense_3, dense2, dense3]).then(
258
+ set_min_dense_3, inputs=max_dense_2, outputs=[min_dense_3, dense2, dense3])
259
 
260
+ with gr.Column(): # adding additional for better visualization
261
  im3_1 = gr.Image(lung_noised, label="Synthetic CXR")
262
 
263
+ button1.click(new__cxr, inputs=[max_dense_0, max_dense_1, max_dense_2],
264
+ outputs=[im1, im2, im3, im3_1, dense0, dense1, dense2, dense3, progress_log])
265
+ button1.click(change_vis, outputs=[label1, button1])
266
+
267
  if __name__ == "__main__":
268
  demo.launch(auth=check_auth)
269
 
270
 
271