Spaces:
Sleeping
Sleeping
Humza Ali
commited on
Add Files
Browse files- demo_app.py +18 -0
- moleimages.py +107 -0
- mymodel-2.h5 +3 -0
demo_app.py
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from skimage import io
|
2 |
+
import base64
|
3 |
+
from tensorflow.keras.models import load_model
|
4 |
+
import numpy as np
|
5 |
+
import gradio
|
6 |
+
import moleimages
|
7 |
+
|
8 |
+
model = load_model("mymodel-2.h5")
|
9 |
+
|
10 |
+
def predict(input):
|
11 |
+
mimg = moleimages.MoleImages()
|
12 |
+
X = mimg.load_image(input)
|
13 |
+
y_pred = model.predict(X)
|
14 |
+
return {"Benign": float(y_pred[0][0]), "Malignant": float(1-y_pred[0][0])}
|
15 |
+
|
16 |
+
io = gradio.Interface(fn=predict, inputs='image', outputs='label', analytics_enabled=True,
|
17 |
+
title="Skin Cancer Detection FYP Model Demo", description="FYP Demo by FYP GROUP:- 20F-18 \n [Leader: Humza Ali \n | Members: Dilshad Hussain, Yasir Ali]")
|
18 |
+
io.launch()
|
moleimages.py
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
from skimage import io
|
3 |
+
from skimage.transform import resize
|
4 |
+
|
5 |
+
import matplotlib.pyplot as plt
|
6 |
+
import glob
|
7 |
+
import h5py
|
8 |
+
|
9 |
+
|
10 |
+
class MoleImages():
|
11 |
+
def __init__(self, dir=None):
|
12 |
+
self.dir = dir
|
13 |
+
self.size = None
|
14 |
+
|
15 |
+
def resize_bulk(self, size=(128,128)):
|
16 |
+
'''
|
17 |
+
Resize Images and create matrix
|
18 |
+
Input: size of the images (128,128)
|
19 |
+
Output: Numpy array of (size,num_images)
|
20 |
+
'''
|
21 |
+
self.size = size
|
22 |
+
X = []
|
23 |
+
image_list = glob.glob(self.dir)
|
24 |
+
n_images = len(image_list)
|
25 |
+
print('Resizing {} images:'.format(n_images))
|
26 |
+
for i, imgfile in enumerate(image_list):
|
27 |
+
print('Resizing image {} of {}'.format(i+1, n_images))
|
28 |
+
img = io.imread(imgfile)
|
29 |
+
img = resize(img, self.size)
|
30 |
+
X.append(img)
|
31 |
+
return np.array(X)
|
32 |
+
|
33 |
+
def load_test_images(self, dir_b, dir_m):
|
34 |
+
X = []
|
35 |
+
image_list_b = glob.glob(dir_b + '/*.png')
|
36 |
+
n_images_b = len(image_list_b)
|
37 |
+
print('Loading {} images of class benign:'.format(n_images_b))
|
38 |
+
for i, imgfile in enumerate(image_list_b):
|
39 |
+
print('Loading image {} of {}'.format(i+1, n_images_b))
|
40 |
+
img = io.imread(imgfile)
|
41 |
+
X.append(img)
|
42 |
+
image_list_m = glob.glob(dir_m + '/*.png')
|
43 |
+
n_images_m = len(image_list_m)
|
44 |
+
print('Loading {} images of class benign:'.format(n_images_m))
|
45 |
+
for i, imgfile in enumerate(image_list_m):
|
46 |
+
print('Loading image {} of {}'.format(i+1, n_images_m))
|
47 |
+
img = io.imread(imgfile)
|
48 |
+
X.append(img)
|
49 |
+
y = np.hstack((np.zeros(n_images_b), np.ones(n_images_m)))
|
50 |
+
|
51 |
+
return np.array(X), y.reshape(len(y),1)
|
52 |
+
|
53 |
+
def load_image_from_filename(self, filename, size=(128,128)):
|
54 |
+
self.size = size
|
55 |
+
img = io.imread(filename)
|
56 |
+
img = resize(img, self.size, mode='constant') * 255
|
57 |
+
if img.shape[2] == 4:
|
58 |
+
img = img[:,:,0:3]
|
59 |
+
return img.reshape(1, self.size[0], self.size[1], 3)
|
60 |
+
|
61 |
+
def load_image(self, img, size=(128,128)):
|
62 |
+
self.size = size
|
63 |
+
img = resize(img, self.size, mode='constant', anti_aliasing=True,
|
64 |
+
anti_aliasing_sigma=None) * 255
|
65 |
+
if img.shape[2] == 4:
|
66 |
+
img = img[:, :, 0:3]
|
67 |
+
return img.reshape(1, self.size[0], self.size[1], 3)
|
68 |
+
|
69 |
+
def save_h5(self, X, filename, dataset):
|
70 |
+
'''
|
71 |
+
Save a numpy array to a data.h5 file specified.
|
72 |
+
Input:
|
73 |
+
X: Numpy array to save
|
74 |
+
filename: name of h5 file
|
75 |
+
dataset: label for the dataset
|
76 |
+
'''
|
77 |
+
with h5py.File(filename, 'w') as hf:
|
78 |
+
hf.create_dataset(dataset, data=X)
|
79 |
+
print('File {} saved'.format(filename))
|
80 |
+
|
81 |
+
def load_h5(self, filename, dataset):
|
82 |
+
'''
|
83 |
+
Load a data.h5 file specified.
|
84 |
+
Input: filename, dataset
|
85 |
+
Output: Data
|
86 |
+
'''
|
87 |
+
with h5py.File(filename, 'r') as hf:
|
88 |
+
return hf[dataset][:]
|
89 |
+
|
90 |
+
def save_png(self, matrix, dir, tag='img', format='png'):
|
91 |
+
for i, img in enumerate(matrix):
|
92 |
+
if dir[-1] != '/':
|
93 |
+
filename = dir + '/' + tag + str(i) + '.' + format
|
94 |
+
else:
|
95 |
+
filename = dir + tag + str(i) + '.' + format
|
96 |
+
print('Saving file {}'.format(filename))
|
97 |
+
io.imsave(filename, img)
|
98 |
+
|
99 |
+
|
100 |
+
|
101 |
+
if __name__ == '__main__':
|
102 |
+
# benign = MoleImages('data/malignant/*.jpg')
|
103 |
+
# ben_images = benign.resize_bulk()
|
104 |
+
# print('Shape of benign images: ', ben_images.shape)
|
105 |
+
# benign.save_h5(ben_images, 'benigns.h5', 'benign')
|
106 |
+
benign = MoleImages()
|
107 |
+
X = benign.load_h5('benigns.h5','benign')
|
mymodel-2.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:51e475095c9009d75af1daab0fbbd4a773d232a01df7bcb7e32046a476086c8c
|
3 |
+
size 10025768
|