Spaces:
Runtime error
Runtime error
Commit
•
6c0da01
1
Parent(s):
718802e
Upload 7 files
Browse files- .gitattributes +5 -0
- app.py +429 -0
- final_dataset.csv +0 -0
- models/model1.hdf5 +3 -0
- models/model2.hdf5 +3 -0
- models/model3.hdf5 +3 -0
- models/model4.hdf5 +3 -0
- models/model5.hdf5 +3 -0
.gitattributes
CHANGED
@@ -32,3 +32,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
32 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
33 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
34 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
32 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
33 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
34 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
35 |
+
models/model1.hdf5 filter=lfs diff=lfs merge=lfs -text
|
36 |
+
models/model2.hdf5 filter=lfs diff=lfs merge=lfs -text
|
37 |
+
models/model3.hdf5 filter=lfs diff=lfs merge=lfs -text
|
38 |
+
models/model4.hdf5 filter=lfs diff=lfs merge=lfs -text
|
39 |
+
models/model5.hdf5 filter=lfs diff=lfs merge=lfs -text
|
app.py
ADDED
@@ -0,0 +1,429 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python
|
2 |
+
# coding: utf-8
|
3 |
+
|
4 |
+
# # Importing the Required Libraries.
|
5 |
+
|
6 |
+
# In[1]:
|
7 |
+
|
8 |
+
|
9 |
+
import keras
|
10 |
+
get_ipython().run_line_magic('env', 'SM_FRAMEWORK=tf.keras')
|
11 |
+
import segmentation_models as sm
|
12 |
+
import glob
|
13 |
+
import matplotlib.pyplot as plt
|
14 |
+
from scipy import ndimage
|
15 |
+
from scipy.ndimage import label, generate_binary_structure
|
16 |
+
import radiomics
|
17 |
+
import cv2
|
18 |
+
import SimpleITK as sitk
|
19 |
+
import six
|
20 |
+
import numpy as np
|
21 |
+
import pandas as pd
|
22 |
+
import seaborn as sns
|
23 |
+
import matplotlib.pyplot as plt
|
24 |
+
from sklearn.model_selection import train_test_split
|
25 |
+
get_ipython().run_line_magic('matplotlib', 'inline')
|
26 |
+
from sklearn.feature_selection import SelectKBest
|
27 |
+
from sklearn.feature_selection import mutual_info_classif
|
28 |
+
from sklearn.ensemble import RandomForestClassifier
|
29 |
+
from sklearn.feature_selection import RFE
|
30 |
+
from sklearn.metrics import roc_auc_score
|
31 |
+
from sklearn.feature_selection import SelectFromModel
|
32 |
+
from sklearn.linear_model import Lasso, LogisticRegression
|
33 |
+
from sklearn.preprocessing import StandardScaler
|
34 |
+
from sklearn.decomposition import PCA
|
35 |
+
from sklearn.svm import LinearSVC
|
36 |
+
from sklearn.datasets import load_iris
|
37 |
+
from sklearn.feature_selection import SelectFromModel
|
38 |
+
from sklearn.feature_selection import mutual_info_classif as MIC
|
39 |
+
from sklearn.feature_selection import mutual_info_classif, mutual_info_regression
|
40 |
+
from sklearn.feature_selection import SelectKBest, SelectPercentile
|
41 |
+
from sklearn.feature_selection import SequentialFeatureSelector
|
42 |
+
from sklearn.neighbors import KNeighborsClassifier
|
43 |
+
from sklearn.linear_model import LogisticRegression
|
44 |
+
from sklearn.ensemble import RandomForestClassifier
|
45 |
+
from sklearn.svm import SVC
|
46 |
+
from sklearn.metrics import f1_score
|
47 |
+
from sklearn.model_selection import cross_validate
|
48 |
+
from sklearn.tree import DecisionTreeClassifier
|
49 |
+
from sklearn.linear_model import Perceptron
|
50 |
+
from sklearn.model_selection import RandomizedSearchCV
|
51 |
+
from sklearn.model_selection import GridSearchCV
|
52 |
+
# from hyperopt import hp
|
53 |
+
|
54 |
+
import warnings
|
55 |
+
warnings.filterwarnings('ignore')
|
56 |
+
import os
|
57 |
+
|
58 |
+
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
|
59 |
+
|
60 |
+
|
61 |
+
# # Defining the path to Model and Images
|
62 |
+
|
63 |
+
# In[2]:
|
64 |
+
|
65 |
+
|
66 |
+
IMAGE_SIZE = (256,256,3)
|
67 |
+
|
68 |
+
path_base_model = './/models//'
|
69 |
+
|
70 |
+
# # Loading the models
|
71 |
+
|
72 |
+
# In[4]:
|
73 |
+
|
74 |
+
|
75 |
+
BACKBONE = 'efficientnetb0'
|
76 |
+
model1 = sm.Unet(BACKBONE, input_shape = (IMAGE_SIZE[0],IMAGE_SIZE[1],IMAGE_SIZE[2]),classes=1, activation='sigmoid',encoder_weights='imagenet')
|
77 |
+
model2 = sm.Unet(BACKBONE, input_shape = (IMAGE_SIZE[0],IMAGE_SIZE[1],IMAGE_SIZE[2]),classes=1, activation='sigmoid',encoder_weights='imagenet')
|
78 |
+
model3 = sm.Unet(BACKBONE, input_shape = (IMAGE_SIZE[0],IMAGE_SIZE[1],IMAGE_SIZE[2]),classes=1, activation='sigmoid',encoder_weights='imagenet')
|
79 |
+
|
80 |
+
BACKBONE = 'efficientnetb7'
|
81 |
+
model4 = sm.Unet(BACKBONE, input_shape = (IMAGE_SIZE[0],IMAGE_SIZE[1],IMAGE_SIZE[2]),classes=1, activation='sigmoid',encoder_weights='imagenet')
|
82 |
+
model5 = sm.Unet(BACKBONE, input_shape = (IMAGE_SIZE[0],IMAGE_SIZE[1],IMAGE_SIZE[2]),classes=1, activation='sigmoid',encoder_weights='imagenet')
|
83 |
+
|
84 |
+
preprocess_input = sm.get_preprocessing(BACKBONE)
|
85 |
+
|
86 |
+
model1.load_weights(path_base_model + 'model1.hdf5')
|
87 |
+
model2.load_weights(path_base_model + 'model2.hdf5')
|
88 |
+
model3.load_weights(path_base_model + 'model3.hdf5')
|
89 |
+
model4.load_weights(path_base_model + 'model4.hdf5')
|
90 |
+
model5.load_weights(path_base_model + 'model5.hdf5')
|
91 |
+
|
92 |
+
|
93 |
+
# # Defining Required Functions
|
94 |
+
|
95 |
+
# In[5]:
|
96 |
+
|
97 |
+
|
98 |
+
def preprocessing_HE(img_):
|
99 |
+
|
100 |
+
hist, bins = np.histogram(img_.flatten(), 256,[0,256])
|
101 |
+
cdf = hist.cumsum()
|
102 |
+
cdf_m = np.ma.masked_equal(cdf,0)
|
103 |
+
cdf_m = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())
|
104 |
+
cdf = np.ma.filled(cdf_m,0).astype('uint8')
|
105 |
+
|
106 |
+
img_2 = cdf[img_]
|
107 |
+
|
108 |
+
return img_2
|
109 |
+
|
110 |
+
def get_binary_mask (mask_, th_ = 0.5):
|
111 |
+
mask_[mask_>th_] = 1
|
112 |
+
mask_[mask_<=th_] = 0
|
113 |
+
return mask_
|
114 |
+
|
115 |
+
def ensemble_results (mask1_, mask2_, mask3_, mask4_, mask5_):
|
116 |
+
|
117 |
+
mask1_ = get_binary_mask (mask1_)
|
118 |
+
mask2_ = get_binary_mask (mask2_)
|
119 |
+
mask3_ = get_binary_mask (mask3_)
|
120 |
+
mask4_ = get_binary_mask (mask4_)
|
121 |
+
mask5_ = get_binary_mask (mask5_)
|
122 |
+
|
123 |
+
ensemble_mask = mask1_ + mask2_ + mask3_ + mask4_ + mask5_
|
124 |
+
ensemble_mask[ensemble_mask<=2.0] = 0
|
125 |
+
ensemble_mask[ensemble_mask> 2.0] = 1
|
126 |
+
|
127 |
+
return ensemble_mask
|
128 |
+
|
129 |
+
def postprocessing_HoleFilling (mask_):
|
130 |
+
|
131 |
+
ensemble_mask_post_temp = ndimage.binary_fill_holes(mask_).astype(int)
|
132 |
+
|
133 |
+
return ensemble_mask_post_temp
|
134 |
+
|
135 |
+
def get_maximum_index (labeled_array):
|
136 |
+
|
137 |
+
ind_nums = []
|
138 |
+
for i in range (len(np.unique(labeled_array)) - 1):
|
139 |
+
ind_nums.append ([0, i+1])
|
140 |
+
|
141 |
+
for i in range (1, len(np.unique(labeled_array))):
|
142 |
+
ind_nums[i-1][0] = len(np.where (labeled_array == np.unique(labeled_array)[i])[0])
|
143 |
+
|
144 |
+
ind_nums = sorted(ind_nums)
|
145 |
+
|
146 |
+
return ind_nums[len(ind_nums)-1][1], ind_nums[len(ind_nums)-2][1]
|
147 |
+
|
148 |
+
def postprocessing_EliminatingIsolation (ensemble_mask_post_temp):
|
149 |
+
|
150 |
+
labeled_array, num_features = label(ensemble_mask_post_temp)
|
151 |
+
|
152 |
+
ind_max1, ind_max2 = get_maximum_index (labeled_array)
|
153 |
+
|
154 |
+
ensemble_mask_post_temp2 = np.zeros (ensemble_mask_post_temp.shape)
|
155 |
+
ensemble_mask_post_temp2[labeled_array == ind_max1] = 1
|
156 |
+
ensemble_mask_post_temp2[labeled_array == ind_max2] = 1
|
157 |
+
|
158 |
+
return ensemble_mask_post_temp2.astype(int)
|
159 |
+
|
160 |
+
def get_prediction(model_, img_org_):
|
161 |
+
|
162 |
+
img_org_resize = cv2.resize(img_org_,(IMAGE_SIZE[0],IMAGE_SIZE[1]),cv2.INTER_AREA)
|
163 |
+
img_org_resize_HE = preprocessing_HE (img_org_resize)
|
164 |
+
img_ready = preprocess_input (img_org_resize_HE)
|
165 |
+
|
166 |
+
img_ready = np.expand_dims(img_ready, axis=0)
|
167 |
+
pr_mask = model_.predict(img_ready)
|
168 |
+
pr_mask = np.squeeze(pr_mask)
|
169 |
+
pr_mask = np.expand_dims(pr_mask, axis=-1)
|
170 |
+
return pr_mask[:,:,0]
|
171 |
+
|
172 |
+
# ## Create and intantiate Feature Extractor and enable the required features
|
173 |
+
|
174 |
+
# In[9]:
|
175 |
+
|
176 |
+
|
177 |
+
extractor = radiomics.featureextractor.RadiomicsFeatureExtractor(force2D=True)
|
178 |
+
extractor.enableImageTypeByName('Original') # extract features from the original image
|
179 |
+
extractor.enableFeatureClassByName('firstorder') # extract first-order features
|
180 |
+
extractor.enableFeatureClassByName('glcm') # extract GLCM features
|
181 |
+
extractor.enableFeatureClassByName('gldm') # extract GLDM features
|
182 |
+
extractor.enableFeatureClassByName('glszm') # extract GLSZM features
|
183 |
+
extractor.enableFeatureClassByName('ngtdm') # extract NGTDM features
|
184 |
+
|
185 |
+
|
186 |
+
|
187 |
+
features_name = ['diagnostics_Versions_PyRadiomics',
|
188 |
+
'diagnostics_Versions_Numpy',
|
189 |
+
'diagnostics_Versions_SimpleITK',
|
190 |
+
'diagnostics_Versions_PyWavelet',
|
191 |
+
'diagnostics_Versions_Python',
|
192 |
+
'diagnostics_Configuration_Settings',
|
193 |
+
'diagnostics_Configuration_EnabledImageTypes',
|
194 |
+
'diagnostics_Image-original_Hash',
|
195 |
+
'diagnostics_Image-original_Dimensionality',
|
196 |
+
'diagnostics_Image-original_Spacing',
|
197 |
+
'diagnostics_Image-original_Size',
|
198 |
+
'diagnostics_Image-original_Mean',
|
199 |
+
'diagnostics_Image-original_Minimum',
|
200 |
+
'diagnostics_Image-original_Maximum',
|
201 |
+
'diagnostics_Mask-original_Hash',
|
202 |
+
'diagnostics_Mask-original_Spacing',
|
203 |
+
'diagnostics_Mask-original_Size',
|
204 |
+
'diagnostics_Mask-original_BoundingBox',
|
205 |
+
'diagnostics_Mask-original_VoxelNum',
|
206 |
+
'diagnostics_Mask-original_VolumeNum',
|
207 |
+
'diagnostics_Mask-original_CenterOfMassIndex',
|
208 |
+
'diagnostics_Mask-original_CenterOfMass',
|
209 |
+
'original_firstorder_10Percentile',
|
210 |
+
'original_firstorder_90Percentile',
|
211 |
+
'original_firstorder_Energy',
|
212 |
+
'original_firstorder_Entropy',
|
213 |
+
'original_firstorder_InterquartileRange',
|
214 |
+
'original_firstorder_Kurtosis',
|
215 |
+
'original_firstorder_Maximum',
|
216 |
+
'original_firstorder_MeanAbsoluteDeviation',
|
217 |
+
'original_firstorder_Mean',
|
218 |
+
'original_firstorder_Median',
|
219 |
+
'original_firstorder_Minimum',
|
220 |
+
'original_firstorder_Range',
|
221 |
+
'original_firstorder_RobustMeanAbsoluteDeviation',
|
222 |
+
'original_firstorder_RootMeanSquared',
|
223 |
+
'original_firstorder_Skewness',
|
224 |
+
'original_firstorder_TotalEnergy',
|
225 |
+
'original_firstorder_Uniformity',
|
226 |
+
'original_firstorder_Variance',
|
227 |
+
'original_glcm_Autocorrelation',
|
228 |
+
'original_glcm_ClusterProminence',
|
229 |
+
'original_glcm_ClusterShade',
|
230 |
+
'original_glcm_ClusterTendency',
|
231 |
+
'original_glcm_Contrast',
|
232 |
+
'original_glcm_Correlation',
|
233 |
+
'original_glcm_DifferenceAverage',
|
234 |
+
'original_glcm_DifferenceEntropy',
|
235 |
+
'original_glcm_DifferenceVariance',
|
236 |
+
'original_glcm_Id',
|
237 |
+
'original_glcm_Idm',
|
238 |
+
'original_glcm_Idmn',
|
239 |
+
'original_glcm_Idn',
|
240 |
+
'original_glcm_Imc1',
|
241 |
+
'original_glcm_Imc2',
|
242 |
+
'original_glcm_InverseVariance',
|
243 |
+
'original_glcm_JointAverage',
|
244 |
+
'original_glcm_JointEnergy',
|
245 |
+
'original_glcm_JointEntropy',
|
246 |
+
'original_glcm_MCC',
|
247 |
+
'original_glcm_MaximumProbability',
|
248 |
+
'original_glcm_SumAverage',
|
249 |
+
'original_glcm_SumEntropy',
|
250 |
+
'original_glcm_SumSquares',
|
251 |
+
'original_gldm_DependenceEntropy',
|
252 |
+
'original_gldm_DependenceNonUniformity',
|
253 |
+
'original_gldm_DependenceNonUniformityNormalized',
|
254 |
+
'original_gldm_DependenceVariance',
|
255 |
+
'original_gldm_GrayLevelNonUniformity',
|
256 |
+
'original_gldm_GrayLevelVariance',
|
257 |
+
'original_gldm_HighGrayLevelEmphasis',
|
258 |
+
'original_gldm_LargeDependenceEmphasis',
|
259 |
+
'original_gldm_LargeDependenceHighGrayLevelEmphasis',
|
260 |
+
'original_gldm_LargeDependenceLowGrayLevelEmphasis',
|
261 |
+
'original_gldm_LowGrayLevelEmphasis',
|
262 |
+
'original_gldm_SmallDependenceEmphasis',
|
263 |
+
'original_gldm_SmallDependenceHighGrayLevelEmphasis',
|
264 |
+
'original_gldm_SmallDependenceLowGrayLevelEmphasis',
|
265 |
+
'original_glrlm_GrayLevelNonUniformity',
|
266 |
+
'original_glrlm_GrayLevelNonUniformityNormalized',
|
267 |
+
'original_glrlm_GrayLevelVariance',
|
268 |
+
'original_glrlm_HighGrayLevelRunEmphasis',
|
269 |
+
'original_glrlm_LongRunEmphasis',
|
270 |
+
'original_glrlm_LongRunHighGrayLevelEmphasis',
|
271 |
+
'original_glrlm_LongRunLowGrayLevelEmphasis',
|
272 |
+
'original_glrlm_LowGrayLevelRunEmphasis',
|
273 |
+
'original_glrlm_RunEntropy',
|
274 |
+
'original_glrlm_RunLengthNonUniformity',
|
275 |
+
'original_glrlm_RunLengthNonUniformityNormalized',
|
276 |
+
'original_glrlm_RunPercentage',
|
277 |
+
'original_glrlm_RunVariance',
|
278 |
+
'original_glrlm_ShortRunEmphasis',
|
279 |
+
'original_glrlm_ShortRunHighGrayLevelEmphasis',
|
280 |
+
'original_glrlm_ShortRunLowGrayLevelEmphasis',
|
281 |
+
'original_glszm_GrayLevelNonUniformity',
|
282 |
+
'original_glszm_GrayLevelNonUniformityNormalized',
|
283 |
+
'original_glszm_GrayLevelVariance',
|
284 |
+
'original_glszm_HighGrayLevelZoneEmphasis',
|
285 |
+
'original_glszm_LargeAreaEmphasis',
|
286 |
+
'original_glszm_LargeAreaHighGrayLevelEmphasis',
|
287 |
+
'original_glszm_LargeAreaLowGrayLevelEmphasis',
|
288 |
+
'original_glszm_LowGrayLevelZoneEmphasis',
|
289 |
+
'original_glszm_SizeZoneNonUniformity',
|
290 |
+
'original_glszm_SizeZoneNonUniformityNormalized',
|
291 |
+
'original_glszm_SmallAreaEmphasis',
|
292 |
+
'original_glszm_SmallAreaHighGrayLevelEmphasis',
|
293 |
+
'original_glszm_SmallAreaLowGrayLevelEmphasis',
|
294 |
+
'original_glszm_ZoneEntropy',
|
295 |
+
'original_glszm_ZonePercentage',
|
296 |
+
'original_glszm_ZoneVariance',
|
297 |
+
'original_ngtdm_Busyness',
|
298 |
+
'original_ngtdm_Coarseness',
|
299 |
+
'original_ngtdm_Complexity',
|
300 |
+
'original_ngtdm_Contrast',
|
301 |
+
'original_ngtdm_Strength']
|
302 |
+
|
303 |
+
# In[12]:
|
304 |
+
|
305 |
+
|
306 |
+
df = pd.read_csv('final_dataset.csv')
|
307 |
+
df.shape
|
308 |
+
|
309 |
+
|
310 |
+
# In[13]:
|
311 |
+
|
312 |
+
|
313 |
+
X_train, X_test, y_train, y_test = train_test_split(
|
314 |
+
df.drop(labels=['Label'], axis=1),
|
315 |
+
df['Label'],
|
316 |
+
test_size=0.2,
|
317 |
+
random_state=23)
|
318 |
+
|
319 |
+
X_train.shape, X_test.shape
|
320 |
+
|
321 |
+
|
322 |
+
# In[14]:
|
323 |
+
|
324 |
+
|
325 |
+
from sklearn.preprocessing import StandardScaler
|
326 |
+
def scale_data(dataset):
|
327 |
+
scaler = StandardScaler()
|
328 |
+
scaled_data = scaler.fit_transform(dataset)
|
329 |
+
return scaled_data
|
330 |
+
|
331 |
+
|
332 |
+
# In[15]:
|
333 |
+
|
334 |
+
|
335 |
+
scaled_train_set = scale_data(X_train)
|
336 |
+
|
337 |
+
scaled_test_set = scale_data(X_test)
|
338 |
+
|
339 |
+
|
340 |
+
# In[16]:
|
341 |
+
|
342 |
+
|
343 |
+
RF = RandomForestClassifier(criterion = 'entropy',max_depth = None, max_features = 'log2', max_leaf_nodes = None,
|
344 |
+
min_samples_leaf = 1,min_samples_split = 4, min_weight_fraction_leaf = 0.0, n_estimators = 200)
|
345 |
+
RF.fit(X_train,y_train)
|
346 |
+
|
347 |
+
|
348 |
+
# In[17]:
|
349 |
+
|
350 |
+
|
351 |
+
import pickle
|
352 |
+
# create an iterator object with write permission - model.pkl
|
353 |
+
with open('model_pkl', 'wb') as files:
|
354 |
+
pickle.dump(RF, files)
|
355 |
+
|
356 |
+
|
357 |
+
# In[19]:
|
358 |
+
|
359 |
+
|
360 |
+
model = pickle.load(open('model_pkl', 'rb'))
|
361 |
+
model.score(X_test,y_test)
|
362 |
+
|
363 |
+
# In[23]:
|
364 |
+
|
365 |
+
|
366 |
+
# from sklearn.preprocessing import MinMaxScaler
|
367 |
+
|
368 |
+
|
369 |
+
# In[42]:
|
370 |
+
|
371 |
+
|
372 |
+
def pneumonia(image):
|
373 |
+
img_ = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
374 |
+
resized_img = cv2.resize(img_,(256,256))
|
375 |
+
original_image = 'original.jpeg'
|
376 |
+
cv2.imwrite(original_image,resized_img)
|
377 |
+
img = cv2.imread(original_image)
|
378 |
+
pr_mask1 = get_prediction (model1, img);
|
379 |
+
pr_mask2 = get_prediction (model2, img);
|
380 |
+
pr_mask3 = get_prediction (model3, img);
|
381 |
+
pr_mask4 = get_prediction (model4, img);
|
382 |
+
pr_mask5 = get_prediction (model5, img);
|
383 |
+
|
384 |
+
ensemble_mask = ensemble_results (pr_mask1, pr_mask2, pr_mask3, pr_mask4, pr_mask5)
|
385 |
+
ensemble_mask_post_HF = postprocessing_HoleFilling (ensemble_mask)
|
386 |
+
ensemble_mask_post_HF_EI = postprocessing_EliminatingIsolation (ensemble_mask_post_HF)
|
387 |
+
|
388 |
+
mask = 'mask.jpeg'
|
389 |
+
cv2.imwrite(mask,ensemble_mask_post_HF_EI*255)
|
390 |
+
|
391 |
+
features = {}
|
392 |
+
df = pd.DataFrame(columns=features_name)
|
393 |
+
|
394 |
+
image_ = sitk.ReadImage(original_image, sitk.sitkInt8)
|
395 |
+
mask = sitk.ReadImage(mask, sitk.sitkInt8)
|
396 |
+
features = extractor.execute(image_, mask)
|
397 |
+
|
398 |
+
df = df.append(features, ignore_index=True)
|
399 |
+
cols = df.columns[22:]
|
400 |
+
|
401 |
+
# Create new dataframe with selected columns
|
402 |
+
DataFrame = df[cols]
|
403 |
+
|
404 |
+
prediction = model.predict(DataFrame)
|
405 |
+
|
406 |
+
if prediction == 0: # Determine the predicted class
|
407 |
+
Label = "Normal"
|
408 |
+
|
409 |
+
elif prediction == 1:
|
410 |
+
Label = "Pneumonia"
|
411 |
+
|
412 |
+
return Label
|
413 |
+
|
414 |
+
|
415 |
+
# In[43]:
|
416 |
+
|
417 |
+
|
418 |
+
import gradio as gr
|
419 |
+
iface =gr.Interface(fn = pneumonia,
|
420 |
+
inputs = "image",
|
421 |
+
outputs = [gr.outputs.Textbox(label="Prediction")],
|
422 |
+
title = "Pnuemonia Detection from Chest X ray images",
|
423 |
+
description = "Upload a Chest X ray image")
|
424 |
+
iface.launch(share = True)
|
425 |
+
|
426 |
+
|
427 |
+
|
428 |
+
|
429 |
+
|
final_dataset.csv
ADDED
The diff for this file is too large to render.
See raw diff
|
|
models/model1.hdf5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:1039d5955156bad2d9d894ee0089b19f7bac18a8b6afa3c56f17674f01850963
|
3 |
+
size 41041760
|
models/model2.hdf5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:e0fbea3981ad9768d71cbb2f58904b0b473cf46daae13cce9249f2131816570e
|
3 |
+
size 41042192
|
models/model3.hdf5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:447660e5fe37b977d3aa3e5b71da502ec380503abae7a191fcf857ca2a1ae231
|
3 |
+
size 41042192
|
models/model4.hdf5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:653d22962c626453a173d2698fd20a5d040d81868e64e674059ea637e4eb59b0
|
3 |
+
size 301947928
|
models/model5.hdf5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:a664aaeaeb9117053aaa894151d58eb9c093e962aaaf23b62a281abd629a2839
|
3 |
+
size 301947928
|