Spaces:
Running
Running
from flask import Flask, request, render_template, redirect, url_for, send_from_directory, jsonify | |
import os | |
import sys | |
root = '/Users/jianpingye/Desktop/Marketing_Research/XGBoost_Gaze_Prediction_Platform/Gaze-Time-Prediction-for-Advertisement/XGBoost_Prediction_Model' | |
sys.path.append(root) | |
import Predict | |
import numpy as np | |
General_Category = {'Potatoes / Vegetables / Fruit': 0, 'Chemical products': 1, 'Photo / Film / Optical items': 2, 'Catering industry': 3, 'Industrial products other': 4, 'Media': 5, 'Real estate': 6, 'Government': 7, 'Personnel advertisements': 8, 'Cars / Commercial vehicles': 9, 'Cleaning products': 10, 'Retail': 11, 'Fragrances': 12, 'Footwear / Leather goods': 13, 'Software / Automation': 14, 'Telecommunication equipment': 15, 'Tourism': 16, 'Transport/Communication companies': 17, 'Transport services': 18, 'Insurances': 19, 'Meat / Fish / Poultry': 20, 'Detergents': 21, 'Foods General': 22, 'Other services': 23, 'Banks and Financial Services': 24, 'Office Products': 25, 'Household Items': 26, 'Non-alcoholic beverages': 27, 'Hair, Oral and Personal Care': 28, 'Fashion and Clothing': 29, 'Other products and Services': 30, 'Paper products': 31, 'Alcohol and Other Stimulants': 32, 'Medicines': 33, 'Recreation and Leisure': 34, 'Electronics': 35, 'Home Furnishings': 36, 'Products for Business Use': 37} | |
app = Flask(__name__) | |
app.config['UPLOAD_FOLDER'] = os.path.join(os.getcwd(), 'uploads') | |
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # Set max upload size to 16MB | |
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) | |
def index(): | |
return render_template('index.html') | |
def upload_file(): | |
if 'image' not in request.files: | |
return redirect(request.url) | |
file = request.files['image'] | |
if file.filename == '': | |
return redirect(request.url) | |
if file: | |
filename = file.filename | |
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) | |
file.save(filepath) | |
# Get additional input numbers and option from the form | |
brand_size = request.form.get('brand_size', type=float) | |
pictorial_size = request.form.get('pictorial_size', type=float) | |
text_size = request.form.get('text_size', type=float) | |
ad_size = request.form.get('ad_size', type=float) | |
ad_location = request.form.get('ad_location') | |
gaze_type = request.form.get('gaze_type') | |
option = request.form.get('option') | |
processed_value = process_image_function(filepath, brand_size, pictorial_size, text_size, ad_size, option, ad_location, gaze_type) | |
formatted_value = f"{processed_value:.2f} sec" | |
return render_template('index.html', filename=filename, processed_value=formatted_value) | |
def process_image_function(image_path, brand_size, pictorial_size, text_size, ad_size, option, ad_location, gaze_type): | |
text_detection_model_path = 'EAST-Text-Detection/frozen_east_text_detection.pb' | |
LDA_model_pth = 'LDA_Model_trained/lda_model_best_tot.model' | |
training_ad_text_dictionary_path = 'LDA_Model_trained/object_word_dictionary' | |
training_lang_preposition_path = 'LDA_Model_trained/dutch_preposition' | |
global General_Category | |
prod_group = np.zeros(38) | |
prod_group[General_Category[option]] = 1 | |
if ad_location == 'left': | |
ad_loc = 0 | |
elif ad_location == 'right': | |
ad_loc = 1 | |
else: | |
ad_loc = None | |
predicted_gaze = Predict.Ad_Gaze_Prediction(input_ad_path=image_path, input_ctpg_path=None, ad_location=ad_loc, | |
text_detection_model_path=text_detection_model_path, LDA_model_pth=LDA_model_pth, | |
training_ad_text_dictionary_path=training_ad_text_dictionary_path, training_lang_preposition_path=training_lang_preposition_path, training_language='dutch', | |
surface_sizes=[brand_size,pictorial_size,text_size,ad_size], Product_Group=prod_group, | |
obj_detection_model_pth=None, num_topic=20, Gaze_Time_Type=gaze_type) | |
return predicted_gaze | |
def uploaded_file(filename): | |
temp = send_from_directory(app.config['UPLOAD_FOLDER'], filename) | |
return temp #send_from_directory(app.config['UPLOAD_FOLDER'], filename) | |
if __name__ == '__main__': | |
app.run(port=5000) | |