kkhushisaid commited on
Commit
a379dfa
·
verified ·
1 Parent(s): 77abd89

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -42
app.py CHANGED
@@ -1,60 +1,46 @@
1
- import gradio as gr
2
  import tensorflow as tf
3
- import numpy as np
4
  from tensorflow.keras.models import load_model
 
5
  from tensorflow.keras.preprocessing import image
6
- from tensorflow.keras import backend as K
7
 
8
- # ---------------------------
9
- # Custom metrics definitions
10
- # ---------------------------
11
  def recall(y_true, y_pred):
12
- true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
13
- possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
14
- recall = true_positives / (possible_positives + K.epsilon())
15
  return recall
16
 
17
  def precision(y_true, y_pred):
18
- true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
19
- predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
20
- precision = true_positives / (predicted_positives + K.epsilon())
21
  return precision
22
 
23
  def f1(y_true, y_pred):
24
- precision1 = precision(y_true, y_pred)
25
- recall1 = recall(y_true, y_pred)
26
- return 2*((precision1*recall1)/(precision1+recall1+K.epsilon()))
27
 
28
- # ---------------------------
29
- # Load model with custom objects
30
- # ---------------------------
31
  model = load_model("pneumonia_cnn_model.h5", custom_objects={'f1': f1, 'precision': precision, 'recall': recall})
32
 
33
- # ---------------------------
34
- # Prediction function
35
- # ---------------------------
36
- def predict_pneumonia(img):
37
- img = img.convert('L') # Convert to grayscale
38
- img = img.resize((299, 299))
39
- img_array = image.img_to_array(img)
40
- img_array = np.expand_dims(img_array, axis=0) / 255.0
41
-
42
- prediction = model.predict(img_array)
43
- label = "PNEUMONIA" if prediction[0][0] > 0.5 else "NORMAL"
44
- confidence = prediction[0][0] if prediction[0][0] > 0.5 else 1 - prediction[0][0]
45
-
46
- return f"Prediction: {label} ({confidence*100:.2f}%)"
47
-
48
- # ---------------------------
49
- # Gradio interface
50
- # ---------------------------
51
- interface = gr.Interface(fn=predict_pneumonia,
52
  inputs=gr.Image(type="pil"),
53
  outputs="text",
54
- title="Pneumonia Detection Model",
55
- description="Upload a chest X-ray image to predict whether the patient has Pneumonia or not.")
56
 
57
- # ---------------------------
58
- # Launch
59
- # ---------------------------
60
  interface.launch()
 
 
1
  import tensorflow as tf
2
+ import gradio as gr
3
  from tensorflow.keras.models import load_model
4
+ import numpy as np
5
  from tensorflow.keras.preprocessing import image
 
6
 
7
+ # ---- Define custom metrics ----
 
 
8
  def recall(y_true, y_pred):
9
+ true_positives = tf.keras.backend.sum(tf.keras.backend.round(tf.keras.backend.clip(y_true * y_pred, 0, 1)))
10
+ possible_positives = tf.keras.backend.sum(tf.keras.backend.round(tf.keras.backend.clip(y_true, 0, 1)))
11
+ recall = true_positives / (possible_positives + tf.keras.backend.epsilon())
12
  return recall
13
 
14
  def precision(y_true, y_pred):
15
+ true_positives = tf.keras.backend.sum(tf.keras.backend.round(tf.keras.backend.clip(y_true * y_pred, 0, 1)))
16
+ predicted_positives = tf.keras.backend.sum(tf.keras.backend.round(tf.keras.backend.clip(y_pred, 0, 1)))
17
+ precision = true_positives / (predicted_positives + tf.keras.backend.epsilon())
18
  return precision
19
 
20
  def f1(y_true, y_pred):
21
+ p = precision(y_true, y_pred)
22
+ r = recall(y_true, y_pred)
23
+ return 2 * ((p * r) / (p + r + tf.keras.backend.epsilon()))
24
 
25
+ # ---- Load the model ----
 
 
26
  model = load_model("pneumonia_cnn_model.h5", custom_objects={'f1': f1, 'precision': precision, 'recall': recall})
27
 
28
+ # ---- Define prediction function ----
29
+ def predict_image(img):
30
+ img = img.resize((150, 150)) # Make sure this matches your training image size
31
+ img = image.img_to_array(img)
32
+ img = np.expand_dims(img, axis=0)
33
+ img = img / 255.0
34
+ prediction = model.predict(img)[0][0]
35
+ label = "Pneumonia" if prediction > 0.5 else "Normal"
36
+ return f"Prediction: {label} ({prediction:.2f})"
37
+
38
+ # ---- Create Gradio Interface ----
39
+ interface = gr.Interface(fn=predict_image,
 
 
 
 
 
 
 
40
  inputs=gr.Image(type="pil"),
41
  outputs="text",
42
+ title="Pneumonia Detection",
43
+ description="Upload a chest X-ray image to predict if it shows signs of pneumonia.")
44
 
45
+ # ---- Launch ----
 
 
46
  interface.launch()