Upload 6 files
Browse files
Model/linear_regression_model_bygrade_price.joblib
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:0c12c459c95bd49e53accbe033f12356a7ebad68aad40c1a153eef65a8c2bef3
|
3 |
+
size 1993
|
Model/linear_regression_model_gia_price.joblib
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:2c75f0485c37e6e8fb6b2da0ee54c2c9330f5fe90226bcc4f37226611ee8ff11
|
3 |
+
size 1993
|
Model/linear_regression_model_grade_price.joblib
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:b0cee582a12ccc467dcb0ee815831a68c2c20b460d6d7628b5d052be32b58256
|
3 |
+
size 1993
|
Model/linear_regression_model_makable_price.joblib
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:b4f0f8c8990a742daa6a0316f2da248ba34011cf156b9780ba2ca9abe4458818
|
3 |
+
size 1993
|
app.py
ADDED
@@ -0,0 +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'H:\DEV PATEL\2025\AI_In_Diamond_Industry\Model\linear_regression_model_gia_price.joblib')
|
19 |
+
grade_model = load(r'H:\DEV PATEL\2025\AI_In_Diamond_Industry\Model\linear_regression_model_grade_price.joblib')
|
20 |
+
bygrade_model = load(r'H:\DEV PATEL\2025\AI_In_Diamond_Industry\Model\linear_regression_model_bygrade_price.joblib')
|
21 |
+
makable_model = load(r'H:\DEV PATEL\2025\AI_In_Diamond_Industry\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)
|
requirement.txt
ADDED
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
absl-py
|
2 |
+
asttokens
|
3 |
+
astunparse
|
4 |
+
blinker
|
5 |
+
certifi
|
6 |
+
charset-normalizer
|
7 |
+
click
|
8 |
+
colorama
|
9 |
+
comm
|
10 |
+
contourpy
|
11 |
+
cycler
|
12 |
+
debugpy
|
13 |
+
decorator
|
14 |
+
et_xmlfile
|
15 |
+
executing
|
16 |
+
filelock
|
17 |
+
Flask
|
18 |
+
flatbuffers
|
19 |
+
fonttools
|
20 |
+
fsspec
|
21 |
+
gast
|
22 |
+
google-pasta
|
23 |
+
grpcio
|
24 |
+
h5py
|
25 |
+
idna
|
26 |
+
ipykernel
|
27 |
+
ipython
|
28 |
+
itsdangerous
|
29 |
+
jedi
|
30 |
+
Jinja2
|
31 |
+
joblib
|
32 |
+
jupyter_client
|
33 |
+
jupyter_core
|
34 |
+
keras
|
35 |
+
kiwisolver
|
36 |
+
libclang
|
37 |
+
Markdown
|
38 |
+
markdown-it-py
|
39 |
+
MarkupSafe
|
40 |
+
matplotlib
|
41 |
+
matplotlib-inline
|
42 |
+
mdurl
|
43 |
+
ml-dtypes
|
44 |
+
mpmath
|
45 |
+
namex
|
46 |
+
nest-asyncio
|
47 |
+
networkx
|
48 |
+
numpy
|
49 |
+
openpyxl
|
50 |
+
opt_einsum
|
51 |
+
optree
|
52 |
+
packaging
|
53 |
+
pandas
|
54 |
+
parso
|
55 |
+
patsy
|
56 |
+
pillow
|
57 |
+
platformdirs
|
58 |
+
prompt_toolkit
|
59 |
+
protobuf
|
60 |
+
psutil
|
61 |
+
pure_eval
|
62 |
+
Pygments
|
63 |
+
pyparsing
|
64 |
+
python-dateutil
|
65 |
+
python-dotenv
|
66 |
+
pytz
|
67 |
+
pywin32
|
68 |
+
pyzmq
|
69 |
+
requests
|
70 |
+
rich
|
71 |
+
scikit-learn
|
72 |
+
scipy
|
73 |
+
seaborn
|
74 |
+
setuptools
|
75 |
+
six
|
76 |
+
stack-data
|
77 |
+
statsmodels
|
78 |
+
sympy
|
79 |
+
tensorboard
|
80 |
+
tensorboard-data-server
|
81 |
+
tensorflow
|
82 |
+
tensorflow_intel
|
83 |
+
termcolor
|
84 |
+
threadpoolctl
|
85 |
+
torch
|
86 |
+
torchaudio
|
87 |
+
torchvision
|
88 |
+
tornado
|
89 |
+
traitlets
|
90 |
+
typing_extensions
|
91 |
+
tzdata
|
92 |
+
urllib3
|
93 |
+
wcwidth
|
94 |
+
Werkzeug
|
95 |
+
wheel
|
96 |
+
wrapt
|
97 |
+
xgboost
|