HeshamAI commited on
Commit
a69a5af
·
verified ·
1 Parent(s): 1a59731

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -8
app.py CHANGED
@@ -1,13 +1,12 @@
1
  import gradio as gr
2
  import cv2
3
  import numpy as np
4
- import pandas as pd
5
  import pydicom
6
 
 
7
  class DicomAnalyzer:
8
  def __init__(self):
9
  self.circle_diameter = 9
10
- self.results = []
11
  self.current_image = None
12
  self.image_display = None
13
  self.dicom_data = None
@@ -17,10 +16,11 @@ class DicomAnalyzer:
17
  if file is None:
18
  return None, "No file selected"
19
 
 
20
  dicom_data = pydicom.dcmread(file.name)
21
  image = dicom_data.pixel_array.astype(np.float32)
22
 
23
- # Apply rescale slope and intercept
24
  rescale_slope = getattr(dicom_data, 'RescaleSlope', 1)
25
  rescale_intercept = getattr(dicom_data, 'RescaleIntercept', 0)
26
  image = (image * rescale_slope) + rescale_intercept
@@ -29,42 +29,54 @@ class DicomAnalyzer:
29
  image_display = cv2.normalize(image, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)
30
  image_display = cv2.cvtColor(image_display, cv2.COLOR_GRAY2BGR)
31
 
32
- # Save the current state
33
  self.current_image = image
34
  self.image_display = image_display
35
  self.dicom_data = dicom_data
36
 
37
  return image_display, "File loaded successfully"
38
  except Exception as e:
39
- return None, f"Error loading file: {str(e)}"
40
 
41
  def update_circle_diameter(self, value):
42
  self.circle_diameter = value
43
  return f"Circle diameter updated to {value}"
44
 
 
45
  def create_interface():
46
  analyzer = DicomAnalyzer()
47
 
48
  with gr.Blocks() as interface:
49
  gr.Markdown("# CT DICOM Image Analyzer")
50
 
 
51
  with gr.Row():
52
  file_input = gr.File(label="Upload DICOM File")
53
  image_output = gr.Image(label="DICOM Image", interactive=False, type="numpy")
54
  status_output = gr.Textbox(label="Status", interactive=False)
55
 
 
56
  with gr.Row():
57
  circle_diameter_slider = gr.Slider(
58
  minimum=1, maximum=20, value=9, step=1, label="Circle Diameter"
59
  )
60
  circle_status = gr.Textbox(label="Circle Diameter Status", interactive=False)
61
 
62
- # Link events
63
- file_input.change(fn=analyzer.load_dicom, inputs=file_input, outputs=[image_output, status_output])
64
- circle_diameter_slider.change(fn=analyzer.update_circle_diameter, inputs=circle_diameter_slider, outputs=circle_status)
 
 
 
 
 
 
 
 
65
 
66
  return interface
67
 
 
68
  if __name__ == "__main__":
69
  interface = create_interface()
70
  interface.launch()
 
1
  import gradio as gr
2
  import cv2
3
  import numpy as np
 
4
  import pydicom
5
 
6
+
7
  class DicomAnalyzer:
8
  def __init__(self):
9
  self.circle_diameter = 9
 
10
  self.current_image = None
11
  self.image_display = None
12
  self.dicom_data = None
 
16
  if file is None:
17
  return None, "No file selected"
18
 
19
+ # Load DICOM file
20
  dicom_data = pydicom.dcmread(file.name)
21
  image = dicom_data.pixel_array.astype(np.float32)
22
 
23
+ # Apply rescale slope and intercept if available
24
  rescale_slope = getattr(dicom_data, 'RescaleSlope', 1)
25
  rescale_intercept = getattr(dicom_data, 'RescaleIntercept', 0)
26
  image = (image * rescale_slope) + rescale_intercept
 
29
  image_display = cv2.normalize(image, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)
30
  image_display = cv2.cvtColor(image_display, cv2.COLOR_GRAY2BGR)
31
 
32
+ # Store state
33
  self.current_image = image
34
  self.image_display = image_display
35
  self.dicom_data = dicom_data
36
 
37
  return image_display, "File loaded successfully"
38
  except Exception as e:
39
+ return None, f"Error loading DICOM file: {str(e)}"
40
 
41
  def update_circle_diameter(self, value):
42
  self.circle_diameter = value
43
  return f"Circle diameter updated to {value}"
44
 
45
+
46
  def create_interface():
47
  analyzer = DicomAnalyzer()
48
 
49
  with gr.Blocks() as interface:
50
  gr.Markdown("# CT DICOM Image Analyzer")
51
 
52
+ # File Upload and Image Display
53
  with gr.Row():
54
  file_input = gr.File(label="Upload DICOM File")
55
  image_output = gr.Image(label="DICOM Image", interactive=False, type="numpy")
56
  status_output = gr.Textbox(label="Status", interactive=False)
57
 
58
+ # Circle Diameter Slider
59
  with gr.Row():
60
  circle_diameter_slider = gr.Slider(
61
  minimum=1, maximum=20, value=9, step=1, label="Circle Diameter"
62
  )
63
  circle_status = gr.Textbox(label="Circle Diameter Status", interactive=False)
64
 
65
+ # Link Events
66
+ file_input.change(
67
+ fn=analyzer.load_dicom,
68
+ inputs=file_input,
69
+ outputs=[image_output, status_output],
70
+ )
71
+ circle_diameter_slider.change(
72
+ fn=analyzer.update_circle_diameter,
73
+ inputs=circle_diameter_slider,
74
+ outputs=circle_status,
75
+ )
76
 
77
  return interface
78
 
79
+
80
  if __name__ == "__main__":
81
  interface = create_interface()
82
  interface.launch()