Spaces:
Sleeping
Sleeping
import numpy as np | |
import tempfile | |
import pandas as pd | |
import tensorflow as tf | |
from tensorflow import keras | |
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization, GlobalAveragePooling2D | |
from tensorflow.keras.models import Model, load_model, Sequential | |
from tensorflow.keras.optimizers import Adam | |
from tensorflow.keras.metrics import Precision, Recall | |
from tensorflow.keras.callbacks import EarlyStopping | |
from sklearn.utils.class_weight import compute_class_weight | |
from sklearn.model_selection import train_test_split | |
from tensorflow.image import resize | |
import cv2 | |
from tensorflow.keras.utils import to_categorical | |
import matplotlib.pyplot as plt | |
import warnings | |
import warnings | |
warnings.filterwarnings("ignore") | |
# print ('modules loaded') | |
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
from PIL import Image | |
import tensorflow.keras as keras | |
st.title("Skin Cancer Classification App") | |
models = { | |
"Le_Net": load_model('LeNet_5.h5'), | |
"Simple_CNN": load_model('Simple CNN.h5'), | |
"Alex_Net": load_model('AlexNet.h5'), | |
"Deeper_CNN": load_model('Deeper CNN.h5') | |
} | |
# Allow user to select model | |
model_name = st.selectbox("Choose a model", list(models.keys())) | |
model = models[model_name] | |
# Upload Image | |
file = st.file_uploader("Upload an image", type=["png", "jpg", "jpeg"]) | |
# file ='hmnist_28_28_RGB.csv' | |
classes = {4: ('nv', ' melanocytic nevi'), 6: ('mel', 'melanoma'), | |
2 :('bkl', 'benign keratosis-like lesions'), 1:('bcc' , ' basal cell carcinoma'), | |
5: ('vasc', ' pyogenic granulomas and hemorrhage'), | |
0: ('akiec', 'Actinic keratoses and intraepithelial carcinomae'), | |
3: ('df', 'dermatofibroma')} | |
if file is not None: | |
temp_dir = tempfile.TemporaryDirectory() | |
temp_file_path = temp_dir.name + "/" + file.name | |
# Save the uploaded file to the temporary directory | |
with open(temp_file_path, "wb") as f: | |
f.write(file.read()) | |
img = cv2.imread(file) | |
# cv2_imshow(img) | |
img1 = cv2.resize(img, (28, 28)) | |
result = model.predict(img1.reshape(1, 28, 28, 3)) | |
max_prob = max(result[0]) | |
class_ind = list(result[0]).index(max_prob) | |
class_name = classes[class_ind] | |
# print(class_name) | |
# count+=1 | |
# if count>10: | |
# break | |
# df = pd.read_csv(file) | |
# # Get first row | |
# img_reshaped = image_resize(df) | |
# # Get prediction | |
# pred = model.predict(img_reshaped) | |
# label = np.argmax(pred) | |
# Display image and result | |
col1, col2 = st.columns(2) | |
with col1: | |
st.header("Input Image") | |
st.image(img) | |
with col2: | |
st.header("Prediction") | |
st.write(class_name) | |
st.metric("Category:", class_name) | |
# from google.colab.patches import cv2_imshow | |
# srcdir = '/kaggle/input/skin-cancer-mnist-ham10000/HAM10000_images_part_1' | |
# count=0 | |
# for temp in os.listdir(srcdir): | |
# img = cv2.imread(os.path.join(srcdir, temp)) | |
# cv2.imwrite(temp, img) | |
# cv2_imshow(img) | |
# img = cv2.resize(img, (28, 28)) | |
# result = model.predict(img.reshape(1, 28, 28, 3)) | |
# max_prob = max(result[0]) | |
# class_ind = list(result[0]).index(max_prob) | |
# class_name = classes[class_ind] | |
# print(class_name) | |
# count+=1 | |
# if count>10: | |
# break | |