68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
import os
|
|
|
|
from datetime import datetime
|
|
from flask import Flask, jsonify, request
|
|
import config
|
|
from werkzeug.utils import secure_filename
|
|
from imageProcessing import extract_metadata
|
|
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'}
|
|
|
|
app = Flask("P! Vision Metadata Engine")
|
|
app.config["UPLOAD_FOLDER"] = config.DATA_FOLDER
|
|
router = '/metadata/' + config.ENV
|
|
|
|
|
|
def allowed_file(file_name):
|
|
return '.' in file_name and \
|
|
file_name.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
|
|
|
|
|
|
@app.route(router + '/hello', methods=['GET'])
|
|
def hello():
|
|
return "Hello from P! Metadata Engine"
|
|
|
|
|
|
@app.route(router + '/calculate-image-metadata',
|
|
methods=['GET', 'POST'])
|
|
def calculate_image_metadata():
|
|
try:
|
|
if request.method == 'POST':
|
|
print()
|
|
print("request.form:\t", request.form)
|
|
print("request.files:\t", request.files)
|
|
request_id = request.form.get("request_id", 100)
|
|
print("request_id:\t", request_id)
|
|
if "image_file" not in request.files:
|
|
msg = "No file part: 'image_file' in POST request."
|
|
print(msg)
|
|
return msg
|
|
file = request.files["image_file"]
|
|
if file.filename == '':
|
|
msg = "File name is empty."
|
|
print(msg)
|
|
return msg
|
|
if file and allowed_file(file.filename):
|
|
print("Uploaded file:\t", file.filename)
|
|
image_file_name = str(datetime.now()).replace(':', '') + \
|
|
f'_{request_id}_' + secure_filename(file.filename)
|
|
image_file_path = os.path.join(
|
|
app.config["UPLOAD_FOLDER"], image_file_name)
|
|
file.save(image_file_path)
|
|
print(f"Image file is saved at {image_file_path}")
|
|
|
|
modelResponse =extract_metadata(image_file_path)
|
|
print("Response :\t", modelResponse)
|
|
return jsonify({"request_id": request_id, "metadata": modelResponse})
|
|
else:
|
|
msg = "POST the image file. Don't GET it."
|
|
print(msg)
|
|
return msg
|
|
except Exception as e:
|
|
msg = str(type(e).__name__) + ': ' + str(e)
|
|
print(msg)
|
|
return msg
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=False, host="0.0.0.0", port=4455)
|