thehammadishaq commited on
Commit
28b87d2
·
verified ·
1 Parent(s): 045e005

Upload 6 files

Browse files
Files changed (6) hide show
  1. Densenet.h5 +3 -0
  2. X-Ray.ipynb +0 -0
  3. app.py +89 -0
  4. gitattributes +35 -0
  5. pretrained_model.h5 +3 -0
  6. requirements.txt +10 -0
Densenet.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:96edb21323de75eadd8b4c10a8900cde72e51fed49fd854338ee14ad53b2f3fc
3
+ size 29224776
X-Ray.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
app.py ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tensorflow as tf
2
+ from tensorflow.keras.models import Model
3
+ from keras.models import load_model
4
+ import gradio as gr
5
+ from tensorflow.keras.preprocessing.image import load_img, img_to_array
6
+ from tensorflow.keras.applications.densenet import preprocess_input, decode_predictions
7
+ import numpy as np
8
+ from scipy import ndimage
9
+ from skimage import exposure
10
+ from skimage.transform import resize
11
+ from PIL import Image
12
+ import matplotlib.pyplot as plt
13
+ import cv2
14
+ model = load_model('Densenet.h5')
15
+ model.load_weights("pretrained_model.h5")
16
+ layer_name = 'conv5_block16_concat'
17
+ class_names = ['Cardiomegaly', 'Emphysema', 'Effusion', 'Hernia', 'Infiltration', 'Mass', 'Nodule', 'Atelectasis', 'Pneumothorax', 'Pleural_Thickening', 'Pneumonia', 'Fibrosis', 'Edema', 'Consolidation', 'No Finding']
18
+ def get_gradcam(model, img, layer_name):
19
+
20
+ img_array = img_to_array(img)
21
+ img_array = np.expand_dims(img_array, axis=0)
22
+ img_array = preprocess_input(img_array)
23
+
24
+ grad_model = Model(inputs=model.inputs, outputs=[model.get_layer(layer_name).output, model.output])
25
+
26
+ with tf.GradientTape() as tape:
27
+ conv_outputs, predictions = grad_model(img_array)
28
+ class_idx = tf.argmax(predictions[0])
29
+
30
+ output = conv_outputs[0]
31
+ grads = tape.gradient(predictions, conv_outputs)[0]
32
+ guided_grads = tf.cast(output > 0, 'float32') * tf.cast(grads > 0, 'float32') * grads
33
+
34
+ weights = tf.reduce_mean(guided_grads, axis=(0, 1))
35
+ cam = tf.reduce_sum(tf.multiply(weights, output), axis=-1)
36
+ heatmap = np.maximum(cam, 0)
37
+ heatmap /= tf.reduce_max(heatmap)
38
+ heatmap_img = plt.cm.jet(heatmap)[..., :3]
39
+
40
+ # Load the original image
41
+ original_img = Image.fromarray(img)
42
+
43
+ # Resize the heatmap to match the original image size
44
+ heatmap_img = Image.fromarray((heatmap_img * 255).astype(np.uint8))
45
+ heatmap_img = heatmap_img.resize(original_img.size)
46
+
47
+ # Overlay the heatmap on the original image
48
+ overlay_img = Image.blend(original_img, heatmap_img, 0.5)
49
+
50
+ # Return the overlayed image
51
+ return overlay_img
52
+
53
+ def custom_decode_predictions(predictions, class_labels):
54
+
55
+ decoded_predictions = []
56
+ for pred in predictions:
57
+ # Get indices of top predicted classes
58
+ top_indices = pred.argsort()[-4:][::-1] # Change 5 to the number of top classes you want to retrieve
59
+ # Decode each top predicted class
60
+ decoded_pred = [(class_labels[i], pred[i]) for i in top_indices]
61
+ decoded_predictions.append(decoded_pred)
62
+ return decoded_predictions
63
+
64
+ def classify_image(img):
65
+ img = cv2.resize(img, (540, 540), interpolation=cv2.INTER_AREA)
66
+ img_array = img_to_array(img)
67
+ #img_array = exposure.equalize_hist(img_array)
68
+ img_array = np.expand_dims(img_array, axis=0)
69
+ img_array = preprocess_input(img_array)
70
+
71
+
72
+
73
+ predictions1 = model.predict(img_array)
74
+ decoded_predictions = custom_decode_predictions(predictions1, class_names)
75
+ overlay_img = get_gradcam(model, img, layer_name)
76
+
77
+ # Return the decoded predictions and the overlayed image
78
+ return decoded_predictions, overlay_img
79
+ # Gradio interface
80
+ iface = gr.Interface(
81
+ fn=classify_image,
82
+ inputs="image",
83
+ outputs=["text", "image"], # Add an "image" output for the overlayed image
84
+ title="Xray Classification - KIMS",
85
+ description="Classify cxr into 'Cardiomegaly', 'Emphysema', 'Effusion', 'Hernia', 'Infiltration', 'Mass', 'Nodule', 'Atelectasis', 'Pneumothorax', 'Pleural_Thickening', 'Pneumonia', 'Fibrosis', 'Edema', 'Consolidation', 'No Finding'. Built by Dr Sai Koundinya")
86
+
87
+
88
+ # Launch the interface,
89
+ iface.launch( share=True)
gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
pretrained_model.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:065c434e7fddce4f8d8c6b5451a78a2de9e3975f67284acb62a4e5ae83f823e1
3
+ size 29148608
requirements.txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ transformers
2
+ numpy
3
+ tensorflow
4
+ keras
5
+ gradio==4.7.1
6
+ pillow
7
+ matplotlib
8
+ scipy
9
+ opencv-python
10
+ scikit-image