Files
COE379L_Project2/part3/api.py

56 lines
1.9 KiB
Python
Raw Normal View History

2025-11-14 15:53:55 -06:00
from flask import Flask, request
import numpy as np
import tensorflow as tf
from PIL import Image
import io
app = Flask(__name__)
model = tf.keras.models.load_model('vgg16Variant.keras')
@app.route('/summary', methods=['GET'])
def model_info():
return {
"version": "vgg16Variant",
"name": "Katrina_damage",
"description": "Classify satellite images of buildings in the aftermath of a hurricane into 'damage' or 'no_damage' categories",
"number_of_parameters": 16812353
}
# def model_info():
# return {
# "version": "leNet5Variant",
# "name": "Katrina_damage",
# "description": "Classify satellite images of buildings in the aftermath of a hurricane into 'damage' or 'no_damage' categories",
# "number_of_parameters": 2601153
# }
@app.route('/inference', methods=['POST'])
def upload_file():
# check if the post request has the file part
if 'image' not in request.files:
# if the user did not pass the image under `image`, we don't know what they are
# don't, so return an error.
return {"error": "Invalid request; pass a binary image file as a multi-part form under the image key."}, 404
# get the data
data = request.files['image']
# do something with data...
print(data) # apparently this is a FileStorage object??
# Googled how to deal with it and got the following code to turn it into a numpy array
image_bytes = data.read()
image_stream = io.BytesIO(image_bytes)
with Image.open(image_stream).convert("RGB") as pil_image:
data = np.asarray(pil_image)
print(data.shape)
2025-11-14 17:20:26 -06:00
data = data / 255.0
2025-11-14 15:53:55 -06:00
data = data.reshape(1,128,128,3)
prediction = model.predict(data)[0][0]
if prediction < 0.5:
return {"prediction": "damage"}
else:
return {"prediction": "no_damage"}
# start the development server
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')