Spaces:
Running
Running
| from __future__ import division, print_function | |
| import sys | |
| import os | |
| import glob | |
| import re | |
| import numpy as np | |
| import joblib | |
| import cv2 | |
| from watershed_algo import watershed | |
| from PIL import Image, ImageOps | |
| from werkzeug.utils import secure_filename | |
| from gevent.pywsgi import WSGIServer | |
| from tensorflow.keras.models import load_model | |
| from keras.models import load_model as kl | |
| from tensorflow.keras.preprocessing import image | |
| from tensorflow.python.keras.applications.vgg16 import preprocess_input | |
| from flask import Flask, redirect, url_for, request, render_template | |
| import tensorflow as tf | |
| # Define a flask app | |
| app = Flask(__name__, template_folder='static') | |
| APP_ROOT = os.path.dirname(os.path.abspath(__file__)) | |
| lst = ['Malignant','Beningn','no skin '] | |
| # Disable scientific notation for clarity | |
| np.set_printoptions(suppress=True) | |
| brainmodel = kl("./model/tumor_prediction.h5") | |
| pneumoniamodel = load_model("./model/Pneumonia-DENSENET.h5") | |
| malarialmodel = kl("./model/malariaModel.h5") # Necessary | |
| def maleriamodel_predict(img_path, model): | |
| img = image.load_img(img_path, target_size=(130, 130)) | |
| # Preprocessing the image | |
| x = image.img_to_array(img) | |
| # x = np.true_divide(x, 255) | |
| x = np.expand_dims(x, axis=0) | |
| # Be careful how your trained model deals with the input | |
| # otherwise, it won't make correct prediction! | |
| # x = preprocess_input(x, mode='caffe') | |
| images = np.vstack([x]) | |
| preds = malarialmodel.predict(images, batch_size=16) | |
| print(preds) | |
| return preds | |
| def HeartValuePredictor(to_predict_list, size): | |
| to_predict = np.array(to_predict_list).reshape(1,size) | |
| if(size==7): | |
| loaded_model = joblib.load(r'./model/heart_model.pkl') | |
| result = loaded_model.predict(to_predict) | |
| return result[0] | |
| def pneumoniamodel_predict(img_path, model): | |
| img = image.load_img(img_path, target_size=(224, 224)) | |
| # Preprocessing the image | |
| x = image.img_to_array(img) | |
| x = np.expand_dims(x, axis=0) | |
| x = x / 255.0 | |
| preds = model.predict(x) | |
| return preds | |
| def brainmodel_predict(img_path, model): | |
| img = image.load_img(img_path, target_size=(224, 224)) | |
| # Preprocessing the image | |
| x = image.img_to_array(img) | |
| # x = np.true_divide(x, 255) | |
| x = np.expand_dims(x, axis=0) | |
| # Be careful how your trained model deals with the input | |
| # otherwise, it won't make correct prediction! | |
| images = preprocess_input(x) | |
| # images = np.vstack([x]) | |
| preds = model.predict(images, batch_size=16) | |
| return preds | |
| def homepage(): | |
| # Main page | |
| return render_template('base/index.html') | |
| def pneumonia(): | |
| # Main page | |
| return render_template('pneumonia/home.html') | |
| def pneumoniahome(): | |
| # Main page | |
| return render_template('pneumonia/home.html') | |
| def pneumoniatest(): | |
| return render_template('pneumonia/predict.html') | |
| def upload(): | |
| if request.method == 'POST': | |
| print("hanji-------------------------") | |
| # Get the file from post request | |
| f = request.files['file'] | |
| # Save the file to ./uploads | |
| basepath = os.path.dirname(__file__) | |
| file_path = os.path.join( | |
| basepath, 'uploads', secure_filename(f.filename)) | |
| f.save(file_path) | |
| # Make prediction | |
| preds = pneumoniamodel_predict(file_path, pneumoniamodel) | |
| # Process your result for human | |
| # pred_class = preds.argmax(axis=-1) # Simple argmax | |
| pred_class = preds.argmax(axis = 1) # ImageNet Decode | |
| if(pred_class[0] == 0): | |
| answer = "Normal" | |
| else: | |
| answer = "Pneumonia" | |
| result = answer # Convert to string | |
| return result | |
| return None | |
| def cancer(): | |
| return render_template("heart/index.html") | |
| def predict(): | |
| if request.method == "POST": | |
| to_predict_list = request.form.to_dict() | |
| to_predict_list = list(to_predict_list.values()) | |
| to_predict_list = list(map(float, to_predict_list)) | |
| #diabetes | |
| if(len(to_predict_list)==7): | |
| result = HeartValuePredictor(to_predict_list,7) | |
| if(int(result)==1): | |
| prediction = "Sorry you chances of getting the disease. Please consult the doctor immediately" | |
| else: | |
| prediction = "No need to fear. You have no dangerous symptoms of the disease" | |
| return(render_template("heart/result.html", prediction_text=prediction)) | |
| def malaria(): | |
| # Main page | |
| return render_template("malaria/index.html") | |
| def malariaupload(): | |
| if request.method == 'POST': | |
| # Get the file from post request | |
| f = request.files['file'] | |
| # Save the file to ./uploads | |
| basepath = os.path.dirname(__file__) | |
| file_path = os.path.join( | |
| basepath, 'uploads', secure_filename(f.filename)) | |
| f.save(file_path) | |
| # Make prediction | |
| preds = maleriamodel_predict(file_path, malaria) | |
| # Process your result for human | |
| # pred_class = preds.argmax(axis=-1) # Simple argmax | |
| # pred_class = decode_predictions(preds, top=1) # ImageNet Decode | |
| result = str(preds[0]) | |
| if preds > 0: | |
| return "Uninfected" | |
| else: # Convert to string | |
| return "Infected" | |
| return None | |
| def skin(): | |
| return render_template("skin/upload.html") | |
| def skinupload(): | |
| target = os.path.join(APP_ROOT, 'static') | |
| print(target) | |
| if not os.path.isdir(target): | |
| os.mkdir(target) | |
| else: | |
| print("Couldn't create upload directory: {}".format(target)) | |
| print(request.files.getlist("file")) | |
| for upload in request.files.getlist("file"): | |
| print(upload) | |
| print("{} is the file name".format(upload.filename)) | |
| filename = upload.filename | |
| destination = "/".join([target, filename]) | |
| print ("Accept incoming file:", filename) | |
| print ("Save it to:", destination) | |
| upload.save(destination) | |
| # Load the model | |
| skinmodel = load_model('./model/skin.h5',compile=False) | |
| data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32) | |
| # Replace this with the path to your image | |
| folder='static' | |
| ex=folder+'/'+filename | |
| image = Image.open(ex) | |
| img=cv2.imread(ex) | |
| img = cv2.resize(img, (0, 0), fx = 0.2, fy = 0.2) | |
| #resize the image to a 224x224 with the same strategy as in TM2: | |
| #resizing the image to be at least 224x224 and then cropping from the center | |
| size = (224, 224) | |
| image = ImageOps.fit(image, size, Image.ANTIALIAS) | |
| #turn the image into a numpy array | |
| image_array = np.asarray(image) | |
| if len(image_array.shape) == 2: # ----------------Change here | |
| image_array.resize(224, 224, 1) | |
| # display the resized image | |
| #image.show() | |
| #cv2_imshow(img) | |
| # Normalize the image | |
| normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1 | |
| # Load the image into the array | |
| data[0] = normalized_image_array | |
| # run the inference | |
| prediction = skinmodel.predict(data) | |
| #print(type(prediction)) | |
| prediction = list(prediction) | |
| print(prediction) | |
| class1=round(prediction[0][0]*100,2) | |
| class2=round(prediction[0][1]*100,2) | |
| class3=round(prediction[0][2]*100,2) | |
| print(class1,class2,class3) | |
| return render_template("skin/result.html",image_name=filename,class1=class1,class2=class2,class3=class3) | |
| def brain(): | |
| # Main page | |
| return render_template('brain/index.html') | |
| def brainTumor(): | |
| target = os.path.join(APP_ROOT, 'static/') | |
| print(target) | |
| if not os.path.isdir(target): | |
| os.mkdir(target) | |
| else: | |
| print("Couldn't create upload directory: {}".format(target)) | |
| print(request.files.getlist("file")) | |
| for upload in request.files.getlist("file"): | |
| print(upload) | |
| print("{} is the file name".format(upload.filename)) | |
| filename = upload.filename | |
| destination = "/".join([target, filename]) | |
| print ("Accept incoming file:", filename) | |
| print ("Save it to:", destination) | |
| upload.save(destination) | |
| # Load the model | |
| model = tf.keras.models.load_model('./model/keras_model.h5',compile=False) | |
| data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32) | |
| # Replace this with the path to your image | |
| folder='static' | |
| ex=folder+'/'+filename | |
| image = Image.open(ex) | |
| img=cv2.imread(ex) | |
| img = cv2.resize(img, (0, 0), fx = 0.2, fy = 0.2) | |
| #resize the image to a 224x224 with the same strategy as in TM2: | |
| #resizing the image to be at least 224x224 and then cropping from the center | |
| size = (224, 224) | |
| image = ImageOps.fit(image, size, Image.ANTIALIAS) | |
| #turn the image into a numpy array | |
| image_array = np.asarray(image) | |
| if len(image_array.shape) == 2: # ----------------Change here | |
| image_array.resize(224, 224, 1) | |
| # display the resized image | |
| #image.show() | |
| #cv2_imshow(img) | |
| # Normalize the image | |
| normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1 | |
| # Load the image into the array | |
| data[0] = normalized_image_array | |
| # run the inference | |
| prediction = model.predict(data) | |
| # watershed(ex) | |
| #print(type(prediction)) | |
| prediction = list(prediction) | |
| print(prediction) | |
| class1=round(prediction[0][0]*100,2) | |
| class2=round(prediction[0][1]*100,2) | |
| class3=round(prediction[0][2]*100,2) | |
| WTSNAME = watershed(ex) | |
| print(filename) | |
| print(WTSNAME) | |
| print(class1,class2,class3) | |
| return render_template("brain/result.html",org_name=filename,class1=class1,class2=class2,class3=class3, wts_name=WTSNAME) | |
| if __name__ == '__main__': | |
| app.run(host='0.0.0.0', port=80) |