AIOmarRehan commited on
Commit
d759a77
·
verified ·
1 Parent(s): 3f365e6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -1
app.py CHANGED
@@ -1,7 +1,27 @@
1
  import gradio as gr
2
  from PIL import Image
 
 
 
3
  from app.model import predict, gradcam, CLASS_NAMES
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  def predict_fn(img):
6
  label, confidence, probs = predict(img)
7
  probs_sorted = {k: float(v) for k, v in sorted(probs.items(), key=lambda x: x[1], reverse=True)}
@@ -15,13 +35,18 @@ def gradcam_fn(img, interpolant):
15
  heatmap = gradcam(img, interpolant=float(interpolant))
16
  return Image.fromarray(heatmap)
17
 
 
 
18
  with gr.Blocks(title="Brain Tumor MRI Classifier (InceptionV3 + Grad-CAM)") as demo:
19
  gr.Markdown("# Brain Tumor MRI Classifier (InceptionV3 + Grad-CAM)")
20
- gr.Markdown("Upload an MRI image to classify and visualize Grad-CAM explanation.")
21
 
22
  with gr.Row():
23
  with gr.Column():
24
  input_img = gr.Image(type="pil", label="Upload MRI Image")
 
 
 
25
  interpolant_slider = gr.Slider(0, 1, value=0.5, label="Grad-CAM Intensity (interpolant)")
26
  submit_btn = gr.Button("Run Prediction + Grad-CAM")
27
 
@@ -29,6 +54,14 @@ with gr.Blocks(title="Brain Tumor MRI Classifier (InceptionV3 + Grad-CAM)") as d
29
  output_json = gr.JSON(label="Prediction Results")
30
  output_cam = gr.Image(label="Grad-CAM Overlay")
31
 
 
 
 
 
 
 
 
 
32
  submit_btn.click(
33
  fn=lambda img, interp: (predict_fn(img), gradcam_fn(img, interp)),
34
  inputs=[input_img, interpolant_slider],
 
1
  import gradio as gr
2
  from PIL import Image
3
+ import random
4
+ from datasets import load_dataset
5
+
6
  from app.model import predict, gradcam, CLASS_NAMES
7
 
8
+ # Load HF dataset once at startup
9
+ dataset = load_dataset("AIOmarRehan/Brain_Tumor_MRI_Dataset", split="train")
10
+
11
+ # Convert any image to a usable PIL
12
+ def to_pil(example):
13
+ if isinstance(example, Image.Image):
14
+ return example
15
+ return Image.fromarray(example)
16
+
17
+ def get_random_image():
18
+ """Return a random image from the HF dataset."""
19
+ sample = random.choice(dataset)
20
+ img = sample["image"] # dataset must have column "image"
21
+ return to_pil(img)
22
+
23
+
24
+ # Prediction and Grad-CAM logic
25
  def predict_fn(img):
26
  label, confidence, probs = predict(img)
27
  probs_sorted = {k: float(v) for k, v in sorted(probs.items(), key=lambda x: x[1], reverse=True)}
 
35
  heatmap = gradcam(img, interpolant=float(interpolant))
36
  return Image.fromarray(heatmap)
37
 
38
+
39
+ # GRADIO UI
40
  with gr.Blocks(title="Brain Tumor MRI Classifier (InceptionV3 + Grad-CAM)") as demo:
41
  gr.Markdown("# Brain Tumor MRI Classifier (InceptionV3 + Grad-CAM)")
42
+ gr.Markdown("Upload an MRI image OR use a random sample from the dataset.")
43
 
44
  with gr.Row():
45
  with gr.Column():
46
  input_img = gr.Image(type="pil", label="Upload MRI Image")
47
+
48
+ random_btn = gr.Button("Use Random Dataset Image")
49
+
50
  interpolant_slider = gr.Slider(0, 1, value=0.5, label="Grad-CAM Intensity (interpolant)")
51
  submit_btn = gr.Button("Run Prediction + Grad-CAM")
52
 
 
54
  output_json = gr.JSON(label="Prediction Results")
55
  output_cam = gr.Image(label="Grad-CAM Overlay")
56
 
57
+ # Button: Load random dataset image
58
+ random_btn.click(
59
+ fn=lambda: get_random_image(),
60
+ inputs=[],
61
+ outputs=[input_img]
62
+ )
63
+
64
+ # Button: Run prediction
65
  submit_btn.click(
66
  fn=lambda img, interp: (predict_fn(img), gradcam_fn(img, interp)),
67
  inputs=[input_img, interpolant_slider],