from __future__ import division, print_function
# coding=utf-8
import sys
import os
import glob
import re
import numpy as np
import tensorflow as tf
import tensorflow as tf

#from tensorflow.compat.v1 import ConfigProto
#cls
# from tensorflow.compat.v1 import InteractiveSession

#config = ConfigProto()
#config.gpu_options.per_process_gpu_memory_fraction = 0.2
#config.gpu_options.allow_growth = True
#session = InteractiveSession(config=config)
# Keras
from tensorflow.keras.applications.resnet50 import preprocess_input
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image

# Flask utils
from flask import Flask, redirect, url_for, request, render_template
from werkzeug.utils import secure_filename
#from gevent.pywsgi import WSGIServer

# Define a flask app
app = Flask(__name__)

# Model saved with Keras model.save()
MODEL_PATH ='model_inception.h5'


# Load your trained model
model = load_model(MODEL_PATH)

def model_predict(img_path, model):
    print(img_path)
    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)
    ## Scaling
    x=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)

    preds = model.predict(x)
    preds=np.argmax(preds, axis=1)
    if preds==0:
        preds="We are sorry to inform that your lungs are affected by 'Covid'"
    elif preds==1:
        preds="YaY!!Your reports are'Normal'"
    else:
        preds="We are sorry to inform that your lungs affected by 'Pneumonia'"
    
    return  preds

@app.route('/', methods=['GET'])
def index():
    # Main page
    if request.method == 'POST':
        # Get the file from post request
        print(request.files, request.form, request.args)
        f = None
        if 'image' in request.files: f = request.files['image']
        if f:
            # Save the file to ./uploads
            file_path = os.path.join(
                app.config['UPLOAD_FOLDER'], secure_filename(f.filename))
            f.save(file_path)

            # Make prediction
            preds = model_predict(file_path, model)
            result = preds
            return render_template('index.html', result=result, img=secure_filename(f.filename))
        return render_template('index.html', result=None, err='Failed to receive file')
    # First time
    return render_template('index.html', result=None)



@app.route('/predict', methods=['GET', 'POST'])


def upload():
    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 = model_predict(file_path, model)
        result=preds
        return result
    
  

if __name__ == '__main__':
    app.run(port=5001,debug=True)