Update app.py
Browse files
app.py
CHANGED
@@ -1,124 +1,124 @@
|
|
1 |
-
from flask import Flask, render_template, request, redirect, url_for, flash
|
2 |
-
import os
|
3 |
-
from joblib import load
|
4 |
-
import numpy as np
|
5 |
-
|
6 |
-
app = Flask(__name__)
|
7 |
-
|
8 |
-
# Set the secret key for session management
|
9 |
-
app.secret_key = os.urandom(24)
|
10 |
-
|
11 |
-
# Configurations
|
12 |
-
UPLOAD_FOLDER = "uploads/"
|
13 |
-
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
|
14 |
-
app.config['DEBUG'] = True # Enable debugging during development
|
15 |
-
app.config['ENV'] = 'development'
|
16 |
-
|
17 |
-
# Load models
|
18 |
-
gia_model = load(r'
|
19 |
-
grade_model = load(r'
|
20 |
-
bygrade_model = load(r'
|
21 |
-
makable_model = load(r'
|
22 |
-
|
23 |
-
# Load label encoders for categorical features (renamed variable to avoid conflict with built-in list)
|
24 |
-
encoder_list = ['Tag', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngLab']
|
25 |
-
loaded_label_encoder = {}
|
26 |
-
for val in encoder_list:
|
27 |
-
encoder_path = f"H:/DEV PATEL/2025/AI_In_Diamond_Industry/Label_encoders/label_encoder_{val}.joblib"
|
28 |
-
loaded_label_encoder[val] = load(encoder_path)
|
29 |
-
|
30 |
-
@app.route('/', methods=['GET'])
|
31 |
-
def home():
|
32 |
-
return render_template('home.html')
|
33 |
-
|
34 |
-
@app.route('/predict', methods=['GET', 'POST'])
|
35 |
-
def predict():
|
36 |
-
# Redirect GET requests back to the home page
|
37 |
-
if request.method == 'GET':
|
38 |
-
return redirect(url_for('home'))
|
39 |
-
|
40 |
-
try:
|
41 |
-
# Retrieve form data and strip any extra spaces ['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngLab', 'EngAmt',
|
42 |
-
Tag = request.form.get('Tag', '').strip()
|
43 |
-
# ICarat = request.form.get('ICarat', '').strip()
|
44 |
-
# MkblCarat = request.form.get('MkblCarat', '').strip()
|
45 |
-
# SawLossCarat = request.form.get('SawLossCarat', '').strip()
|
46 |
-
# CrapsCarat = request.form.get('CrapsCarat', '').strip()
|
47 |
-
# EngGraphCts = request.form.get('EngGraphCts', '').strip()
|
48 |
-
EngCts = request.form.get('EngCts', '').strip()
|
49 |
-
EngShp = request.form.get('EngShp', '').strip()
|
50 |
-
EngQua = request.form.get('EngQua', '').strip()
|
51 |
-
EngCol = request.form.get('EngCol', '').strip()
|
52 |
-
EngCut = request.form.get('EngCut', '').strip()
|
53 |
-
EngPol = request.form.get('EngPol', '').strip()
|
54 |
-
EngSym = request.form.get('EngSym', '').strip()
|
55 |
-
EngFlo = request.form.get('EngFlo', '').strip()
|
56 |
-
EngNts = request.form.get('EngNts', '').strip()
|
57 |
-
EngMikly = request.form.get('EngMikly', '').strip()
|
58 |
-
EngLab = request.form.get('EngLab', '').strip()
|
59 |
-
EngAmt = request.form.get('EngAmt', '').strip()
|
60 |
-
|
61 |
-
if EngLab == "nan": # or if not EngLab:
|
62 |
-
EngLab = np.nan
|
63 |
-
else:
|
64 |
-
EngLab = EngLab # remains the same
|
65 |
-
|
66 |
-
# Check if any required field is empty
|
67 |
-
if not all([Tag,
|
68 |
-
#ICarat, MkblCarat, SawLossCarat, CrapsCarat, EngGraphCts,
|
69 |
-
EngCts, EngShp, EngQua, EngCol,
|
70 |
-
EngCut, EngPol, EngSym, EngFlo, EngNts, EngMikly,
|
71 |
-
EngLab, EngAmt]):
|
72 |
-
flash("Please fill all the fields", "error")
|
73 |
-
return redirect(url_for('home'))
|
74 |
-
|
75 |
-
# Transform categorical features using loaded label encoders
|
76 |
-
Tag = loaded_label_encoder['Tag'].transform([Tag])[0]
|
77 |
-
EngShp = loaded_label_encoder['EngShp'].transform([EngShp])[0]
|
78 |
-
EngQua = loaded_label_encoder['EngQua'].transform([EngQua])[0]
|
79 |
-
EngCol = loaded_label_encoder['EngCol'].transform([EngCol])[0]
|
80 |
-
EngCut = loaded_label_encoder['EngCut'].transform([EngCut])[0]
|
81 |
-
EngPol = loaded_label_encoder['EngPol'].transform([EngPol])[0]
|
82 |
-
EngSym = loaded_label_encoder['EngSym'].transform([EngSym])[0]
|
83 |
-
EngFlo = loaded_label_encoder['EngFlo'].transform([EngFlo])[0]
|
84 |
-
EngNts = loaded_label_encoder['EngNts'].transform([EngNts])[0]
|
85 |
-
EngMikly = loaded_label_encoder['EngMikly'].transform([EngMikly])[0]
|
86 |
-
EngLab = loaded_label_encoder['EngLab'].transform([EngLab])[0]
|
87 |
-
|
88 |
-
# Convert numeric fields to float
|
89 |
-
# ICarat = float(ICarat)
|
90 |
-
# MkblCarat = float(MkblCarat)
|
91 |
-
# SawLossCarat = float(SawLossCarat)
|
92 |
-
# CrapsCarat = float(CrapsCarat)
|
93 |
-
# EngGraphCts = float(EngGraphCts)
|
94 |
-
EngCts = float(EngCts)
|
95 |
-
EngAmt = float(EngAmt)
|
96 |
-
|
97 |
-
# Prepare input data for prediction
|
98 |
-
input_features = [[Tag,
|
99 |
-
#ICarat, MkblCarat, SawLossCarat, CrapsCarat, EngGraphCts,
|
100 |
-
EngCts, EngShp, EngQua, EngCol, EngCut,
|
101 |
-
EngPol, EngSym, EngFlo, EngNts, EngMikly, EngLab, EngAmt]]
|
102 |
-
|
103 |
-
# Make predictions
|
104 |
-
gia_price = gia_model.predict(input_features)[0]
|
105 |
-
grade_price = grade_model.predict(input_features)[0]
|
106 |
-
bygrade_price = bygrade_model.predict(input_features)[0]
|
107 |
-
makable_price = makable_model.predict(input_features)[0]
|
108 |
-
|
109 |
-
gia_diff = EngAmt - gia_price
|
110 |
-
grade_diff = EngAmt - grade_price
|
111 |
-
bygrade_diff = EngAmt - bygrade_price
|
112 |
-
makable_diff = EngAmt - makable_price
|
113 |
-
|
114 |
-
except Exception as e:
|
115 |
-
flash(f"Error in calculating the price: {e}", "error")
|
116 |
-
return redirect(url_for('home'))
|
117 |
-
|
118 |
-
return render_template('results.html', gia_price=gia_price, grade_price=grade_price,
|
119 |
-
bygrade_price=bygrade_price, makable_price=makable_price,
|
120 |
-
gia_diff=gia_diff,grade_diff=grade_diff,bygrade_diff=bygrade_diff,
|
121 |
-
makable_diff=makable_diff)
|
122 |
-
|
123 |
-
if __name__ == "__main__":
|
124 |
-
app.run(debug=True, use_reloader=False)
|
|
|
1 |
+
from flask import Flask, render_template, request, redirect, url_for, flash
|
2 |
+
import os
|
3 |
+
from joblib import load
|
4 |
+
import numpy as np
|
5 |
+
|
6 |
+
app = Flask(__name__)
|
7 |
+
|
8 |
+
# Set the secret key for session management
|
9 |
+
app.secret_key = os.urandom(24)
|
10 |
+
|
11 |
+
# Configurations
|
12 |
+
UPLOAD_FOLDER = "uploads/"
|
13 |
+
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
|
14 |
+
app.config['DEBUG'] = True # Enable debugging during development
|
15 |
+
app.config['ENV'] = 'development'
|
16 |
+
|
17 |
+
# Load models
|
18 |
+
gia_model = load(r'.\Model\linear_regression_model_gia_price.joblib')
|
19 |
+
grade_model = load(r'.\Model\linear_regression_model_grade_price.joblib')
|
20 |
+
bygrade_model = load(r'.\Model\linear_regression_model_bygrade_price.joblib')
|
21 |
+
makable_model = load(r'.\Model\linear_regression_model_makable_price.joblib')
|
22 |
+
|
23 |
+
# Load label encoders for categorical features (renamed variable to avoid conflict with built-in list)
|
24 |
+
encoder_list = ['Tag', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngLab']
|
25 |
+
loaded_label_encoder = {}
|
26 |
+
for val in encoder_list:
|
27 |
+
encoder_path = f"H:/DEV PATEL/2025/AI_In_Diamond_Industry/Label_encoders/label_encoder_{val}.joblib"
|
28 |
+
loaded_label_encoder[val] = load(encoder_path)
|
29 |
+
|
30 |
+
@app.route('/', methods=['GET'])
|
31 |
+
def home():
|
32 |
+
return render_template('home.html')
|
33 |
+
|
34 |
+
@app.route('/predict', methods=['GET', 'POST'])
|
35 |
+
def predict():
|
36 |
+
# Redirect GET requests back to the home page
|
37 |
+
if request.method == 'GET':
|
38 |
+
return redirect(url_for('home'))
|
39 |
+
|
40 |
+
try:
|
41 |
+
# Retrieve form data and strip any extra spaces ['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngLab', 'EngAmt',
|
42 |
+
Tag = request.form.get('Tag', '').strip()
|
43 |
+
# ICarat = request.form.get('ICarat', '').strip()
|
44 |
+
# MkblCarat = request.form.get('MkblCarat', '').strip()
|
45 |
+
# SawLossCarat = request.form.get('SawLossCarat', '').strip()
|
46 |
+
# CrapsCarat = request.form.get('CrapsCarat', '').strip()
|
47 |
+
# EngGraphCts = request.form.get('EngGraphCts', '').strip()
|
48 |
+
EngCts = request.form.get('EngCts', '').strip()
|
49 |
+
EngShp = request.form.get('EngShp', '').strip()
|
50 |
+
EngQua = request.form.get('EngQua', '').strip()
|
51 |
+
EngCol = request.form.get('EngCol', '').strip()
|
52 |
+
EngCut = request.form.get('EngCut', '').strip()
|
53 |
+
EngPol = request.form.get('EngPol', '').strip()
|
54 |
+
EngSym = request.form.get('EngSym', '').strip()
|
55 |
+
EngFlo = request.form.get('EngFlo', '').strip()
|
56 |
+
EngNts = request.form.get('EngNts', '').strip()
|
57 |
+
EngMikly = request.form.get('EngMikly', '').strip()
|
58 |
+
EngLab = request.form.get('EngLab', '').strip()
|
59 |
+
EngAmt = request.form.get('EngAmt', '').strip()
|
60 |
+
|
61 |
+
if EngLab == "nan": # or if not EngLab:
|
62 |
+
EngLab = np.nan
|
63 |
+
else:
|
64 |
+
EngLab = EngLab # remains the same
|
65 |
+
|
66 |
+
# Check if any required field is empty
|
67 |
+
if not all([Tag,
|
68 |
+
#ICarat, MkblCarat, SawLossCarat, CrapsCarat, EngGraphCts,
|
69 |
+
EngCts, EngShp, EngQua, EngCol,
|
70 |
+
EngCut, EngPol, EngSym, EngFlo, EngNts, EngMikly,
|
71 |
+
EngLab, EngAmt]):
|
72 |
+
flash("Please fill all the fields", "error")
|
73 |
+
return redirect(url_for('home'))
|
74 |
+
|
75 |
+
# Transform categorical features using loaded label encoders
|
76 |
+
Tag = loaded_label_encoder['Tag'].transform([Tag])[0]
|
77 |
+
EngShp = loaded_label_encoder['EngShp'].transform([EngShp])[0]
|
78 |
+
EngQua = loaded_label_encoder['EngQua'].transform([EngQua])[0]
|
79 |
+
EngCol = loaded_label_encoder['EngCol'].transform([EngCol])[0]
|
80 |
+
EngCut = loaded_label_encoder['EngCut'].transform([EngCut])[0]
|
81 |
+
EngPol = loaded_label_encoder['EngPol'].transform([EngPol])[0]
|
82 |
+
EngSym = loaded_label_encoder['EngSym'].transform([EngSym])[0]
|
83 |
+
EngFlo = loaded_label_encoder['EngFlo'].transform([EngFlo])[0]
|
84 |
+
EngNts = loaded_label_encoder['EngNts'].transform([EngNts])[0]
|
85 |
+
EngMikly = loaded_label_encoder['EngMikly'].transform([EngMikly])[0]
|
86 |
+
EngLab = loaded_label_encoder['EngLab'].transform([EngLab])[0]
|
87 |
+
|
88 |
+
# Convert numeric fields to float
|
89 |
+
# ICarat = float(ICarat)
|
90 |
+
# MkblCarat = float(MkblCarat)
|
91 |
+
# SawLossCarat = float(SawLossCarat)
|
92 |
+
# CrapsCarat = float(CrapsCarat)
|
93 |
+
# EngGraphCts = float(EngGraphCts)
|
94 |
+
EngCts = float(EngCts)
|
95 |
+
EngAmt = float(EngAmt)
|
96 |
+
|
97 |
+
# Prepare input data for prediction
|
98 |
+
input_features = [[Tag,
|
99 |
+
#ICarat, MkblCarat, SawLossCarat, CrapsCarat, EngGraphCts,
|
100 |
+
EngCts, EngShp, EngQua, EngCol, EngCut,
|
101 |
+
EngPol, EngSym, EngFlo, EngNts, EngMikly, EngLab, EngAmt]]
|
102 |
+
|
103 |
+
# Make predictions
|
104 |
+
gia_price = gia_model.predict(input_features)[0]
|
105 |
+
grade_price = grade_model.predict(input_features)[0]
|
106 |
+
bygrade_price = bygrade_model.predict(input_features)[0]
|
107 |
+
makable_price = makable_model.predict(input_features)[0]
|
108 |
+
|
109 |
+
gia_diff = EngAmt - gia_price
|
110 |
+
grade_diff = EngAmt - grade_price
|
111 |
+
bygrade_diff = EngAmt - bygrade_price
|
112 |
+
makable_diff = EngAmt - makable_price
|
113 |
+
|
114 |
+
except Exception as e:
|
115 |
+
flash(f"Error in calculating the price: {e}", "error")
|
116 |
+
return redirect(url_for('home'))
|
117 |
+
|
118 |
+
return render_template('results.html', gia_price=gia_price, grade_price=grade_price,
|
119 |
+
bygrade_price=bygrade_price, makable_price=makable_price,
|
120 |
+
gia_diff=gia_diff,grade_diff=grade_diff,bygrade_diff=bygrade_diff,
|
121 |
+
makable_diff=makable_diff)
|
122 |
+
|
123 |
+
if __name__ == "__main__":
|
124 |
+
app.run(debug=True, use_reloader=False)
|