sdsd / Backend /app.py
ayush-goud's picture
Upload 21186 files
20c2c8a verified
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
@app.route('/', methods=['GET'])
def homepage():
# Main page
return render_template('base/index.html')
@app.route('/pneumonia/', methods=['GET'])
def pneumonia():
# Main page
return render_template('pneumonia/home.html')
@app.route('/pneumonia/home.html', methods=['GET'])
def pneumoniahome():
# Main page
return render_template('pneumonia/home.html')
@app.route('/pneumonia/test',methods=['GET'])
def pneumoniatest():
return render_template('pneumonia/predict.html')
@app.route('/pneumonia/predict', methods=['GET', 'POST'])
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
@app.route("/heart/test", methods=['GET'])
def cancer():
return render_template("heart/index.html")
@app.route('/heart/predict', methods = ["POST"])
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))
@app.route('/malaria/test', methods=['GET'])
def malaria():
# Main page
return render_template("malaria/index.html")
@app.route('/malaria/predict', methods=['GET', 'POST'])
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
@app.route("/skin/test" ,methods=['GET'])
def skin():
return render_template("skin/upload.html")
@app.route("/skin/predict", methods=["POST"])
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)
@app.route("/brain/test" ,methods=['GET'])
def brain():
# Main page
return render_template('brain/index.html')
@app.route('/brain/predict', methods=['GET', 'POST'])
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)