Truong-Phuc Nguyen
commited on
Update!
Browse files
app.py
CHANGED
|
@@ -8,18 +8,26 @@ def load_essential_models(scaler_6_path, scaler_8_path, scaler_full_path, clf_6_
|
|
| 8 |
scaler_8 = pickle.load(open(file=scaler_8_path, mode='rb'))
|
| 9 |
scaler_21 = pickle.load(open(file=scaler_full_path, mode='rb'))
|
| 10 |
clf_6 = pickle.load(open(file=clf_6_path, mode='rb'))
|
| 11 |
-
clf_8 = load_model(clf_8_path)
|
| 12 |
-
clf_21 = load_model(clf_full_path)
|
| 13 |
return scaler_6, scaler_8, scaler_21, clf_6, clf_8, clf_21
|
| 14 |
|
| 15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
st.title('Demo System for Vietnamese Woman Bra Size Classifier')
|
| 18 |
|
| 19 |
header_col_1, header_col_2 = st.columns([3, 2])
|
| 20 |
num_of_features = header_col_1.selectbox(label='Please select the number of measurements you have:', options=['6 measurements', '8 measurements', '21 measurements'])
|
| 21 |
|
| 22 |
-
h, w, bmi, vtn, vn, vcn, cn, cnnp, cnnt, cntp, cntt, ccnp, ccnt, snt, sndp, sndt, xup, xut, cl, ttp, ttt = [0.0]*21
|
| 23 |
|
| 24 |
if num_of_features == '6 measurements':
|
| 25 |
sample_options_6 = header_col_2.selectbox(label='Sample options:', options=['Sample 1 (Small)', 'Sample 2 (Medium)', 'Sample 3 (Large)'])
|
|
@@ -50,32 +58,32 @@ elif num_of_features == '8 measurements':
|
|
| 50 |
sample_options_8 = header_col_2.selectbox(label='Sample options:', options=['Sample 1 (Small)', 'Sample 2 (Medium)', 'Sample 3 (Large)'])
|
| 51 |
container_col_1, container_col_2, container_col_3, container_col_4 = st.columns([1, 1, 1, 1])
|
| 52 |
if sample_options_8 == 'Sample 1 (Small)':
|
| 53 |
-
ttp = container_col_1.number_input(label='Your ttp:', value=
|
| 54 |
-
cl = container_col_2.number_input(label='Your cl:', value=
|
| 55 |
-
cnnp = container_col_3.number_input(label='Your cnnp:', value=
|
| 56 |
-
vn = container_col_4.number_input(label='Your vn:', value=
|
| 57 |
-
vtn = container_col_1.number_input(label='Your vtn: ', value=
|
| 58 |
-
|
| 59 |
-
cntp = container_col_3.number_input(label='Your cntp:', value=8.
|
| 60 |
-
vcn = container_col_4.number_input(label='Your vcn:', value=
|
| 61 |
elif sample_options_8 == 'Sample 2 (Medium)':
|
| 62 |
-
ttp = container_col_1.number_input(label='Your ttp:', value=
|
| 63 |
-
cl = container_col_2.number_input(label='Your cl:', value=13.60, min_value=0.00, step=0.01)
|
| 64 |
-
cnnp = container_col_3.number_input(label='Your cnnp:', value=8.80, min_value=0.00, step=0.01)
|
| 65 |
-
vn = container_col_4.number_input(label='Your vn:', value=83.20, min_value=0.00, step=0.01)
|
| 66 |
-
vtn = container_col_1.number_input(label='Your vtn: ', value=82.50, min_value=0.00, step=0.01)
|
| 67 |
-
ccnt = container_col_2.number_input(label='Your ccnt:', value=9.30, min_value=0.00, step=0.01)
|
| 68 |
-
cntp = container_col_3.number_input(label='Your cntp:', value=9.10, min_value=0.00, step=0.01)
|
| 69 |
-
vcn = container_col_4.number_input(label='Your vcn:', value=69.60, min_value=0.00, step=0.01)
|
| 70 |
-
else:
|
| 71 |
-
ttp = container_col_1.number_input(label='Your ttp:', value=453.30, min_value=0.00, step=0.01)
|
| 72 |
cl = container_col_2.number_input(label='Your cl:', value=13.00, min_value=0.00, step=0.01)
|
| 73 |
-
cnnp = container_col_3.number_input(label='Your cnnp:', value=12.
|
| 74 |
-
vn = container_col_4.number_input(label='Your vn:', value=
|
| 75 |
-
vtn = container_col_1.number_input(label='Your vtn: ', value=
|
| 76 |
-
|
| 77 |
-
cntp = container_col_3.number_input(label='Your cntp:', value=
|
| 78 |
-
vcn = container_col_4.number_input(label='Your vcn:', value=
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
else:
|
| 80 |
sample_options_21 = header_col_2.selectbox(label='Sample options:', options=['Sample 1 (Small)', 'Sample 2 (Medium)', 'Sample 3 (Large)'])
|
| 81 |
container_col_1, container_col_2, container_col_3, container_col_4, container_col_5 = st.columns([1, 1, 1, 1, 1])
|
|
@@ -153,17 +161,17 @@ with col_3:
|
|
| 153 |
|
| 154 |
if predict:
|
| 155 |
if num_of_features == '6 measurements':
|
| 156 |
-
X_6 = [[vtn, vn, vcn, cl, ttp, ttt]]
|
| 157 |
X_6 = scaler_6.transform(X_6)
|
| 158 |
y_6 = clf_6.predict(X_6)
|
| 159 |
-
st.success(f'We recommend you choosing {y_6} size!')
|
| 160 |
elif num_of_features == '8 measurements':
|
| 161 |
-
X_8 = [[ttp, cl, cnnp, vn, vtn, cnnt, cntp, vcn]]
|
| 162 |
X_8 = scaler_8.transform(X_8)
|
| 163 |
y_8 = clf_8.predict(X_8)
|
| 164 |
-
st.success(f'We recommend you choosing {np.argmax(y_8, axis=1)} size!')
|
| 165 |
else:
|
| 166 |
-
X_21 = [[h, w, bmi, vtn, vn, vcn, cn, cnnp, cnnt, cntp, cntt, ccnp, ccnt, snt, sndp, sndt, xup, xut, cl, ttp, ttt]]
|
| 167 |
X_21 = scaler_21.transform(X_21)
|
| 168 |
y_21 = clf_21.predict(X_21)
|
| 169 |
-
st.success(f'We recommend you choosing {np.argmax(y_21, axis=1)} size!')
|
|
|
|
| 8 |
scaler_8 = pickle.load(open(file=scaler_8_path, mode='rb'))
|
| 9 |
scaler_21 = pickle.load(open(file=scaler_full_path, mode='rb'))
|
| 10 |
clf_6 = pickle.load(open(file=clf_6_path, mode='rb'))
|
| 11 |
+
clf_8 = load_model(clf_8_path, compile=False)
|
| 12 |
+
clf_21 = load_model(clf_full_path, compile=False)
|
| 13 |
return scaler_6, scaler_8, scaler_21, clf_6, clf_8, clf_21
|
| 14 |
|
| 15 |
+
def convert_prediction(prediction):
|
| 16 |
+
if prediction == [0]:
|
| 17 |
+
return 'S'
|
| 18 |
+
elif prediction == [1]:
|
| 19 |
+
return 'M'
|
| 20 |
+
else:
|
| 21 |
+
return 'L'
|
| 22 |
+
|
| 23 |
+
scaler_6, scaler_8, scaler_21, clf_6, clf_8, clf_21 = load_essential_models(scaler_6_path='./Models/6/scaler.pkl', scaler_8_path='./Models/8/scaler.pkl', scaler_full_path='./Models/21/scaler.pkl', clf_6_path='./Models/6/svc_fs_tune.pkl', clf_8_path='./Models/8/ANN_8.h5', clf_full_path='./Models/21/ANNs_full.h5')
|
| 24 |
|
| 25 |
st.title('Demo System for Vietnamese Woman Bra Size Classifier')
|
| 26 |
|
| 27 |
header_col_1, header_col_2 = st.columns([3, 2])
|
| 28 |
num_of_features = header_col_1.selectbox(label='Please select the number of measurements you have:', options=['6 measurements', '8 measurements', '21 measurements'])
|
| 29 |
|
| 30 |
+
# h, w, bmi, vtn, vn, vcn, cn, cnnp, cnnt, cntp, cntt, ccnp, ccnt, snt, sndp, sndt, xup, xut, cl, ttp, ttt = [0.0]*21
|
| 31 |
|
| 32 |
if num_of_features == '6 measurements':
|
| 33 |
sample_options_6 = header_col_2.selectbox(label='Sample options:', options=['Sample 1 (Small)', 'Sample 2 (Medium)', 'Sample 3 (Large)'])
|
|
|
|
| 58 |
sample_options_8 = header_col_2.selectbox(label='Sample options:', options=['Sample 1 (Small)', 'Sample 2 (Medium)', 'Sample 3 (Large)'])
|
| 59 |
container_col_1, container_col_2, container_col_3, container_col_4 = st.columns([1, 1, 1, 1])
|
| 60 |
if sample_options_8 == 'Sample 1 (Small)':
|
| 61 |
+
ttp = container_col_1.number_input(label='Your ttp:', value=287.50, min_value=0.00, step=0.01)
|
| 62 |
+
cl = container_col_2.number_input(label='Your cl:', value=7.00, min_value=0.00, step=0.01)
|
| 63 |
+
cnnp = container_col_3.number_input(label='Your cnnp:', value=8.50, min_value=0.00, step=0.01)
|
| 64 |
+
vn = container_col_4.number_input(label='Your vn:', value=74.50, min_value=0.00, step=0.01)
|
| 65 |
+
vtn = container_col_1.number_input(label='Your vtn: ', value=74.00, min_value=0.00, step=0.01)
|
| 66 |
+
cnnt = container_col_2.number_input(label='Your cnnt:', value=8.90, min_value=0.00, step=0.01)
|
| 67 |
+
cntp = container_col_3.number_input(label='Your cntp:', value=8.50, min_value=0.00, step=0.01)
|
| 68 |
+
vcn = container_col_4.number_input(label='Your vcn:', value=67.50, min_value=0.00, step=0.01)
|
| 69 |
elif sample_options_8 == 'Sample 2 (Medium)':
|
| 70 |
+
ttp = container_col_1.number_input(label='Your ttp:', value=489.60, min_value=0.00, step=0.01)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
cl = container_col_2.number_input(label='Your cl:', value=13.00, min_value=0.00, step=0.01)
|
| 72 |
+
cnnp = container_col_3.number_input(label='Your cnnp:', value=12.40, min_value=0.00, step=0.01)
|
| 73 |
+
vn = container_col_4.number_input(label='Your vn:', value=78.30, min_value=0.00, step=0.01)
|
| 74 |
+
vtn = container_col_1.number_input(label='Your vtn: ', value=77.20, min_value=0.00, step=0.01)
|
| 75 |
+
cnnt = container_col_2.number_input(label='Your cnnt:', value=11.60, min_value=0.00, step=0.01)
|
| 76 |
+
cntp = container_col_3.number_input(label='Your cntp:', value=8.70, min_value=0.00, step=0.01)
|
| 77 |
+
vcn = container_col_4.number_input(label='Your vcn:', value=65.30, min_value=0.00, step=0.01)
|
| 78 |
+
else:
|
| 79 |
+
ttp = container_col_1.number_input(label='Your ttp:', value=568.2, min_value=0.00, step=0.01)
|
| 80 |
+
cl = container_col_2.number_input(label='Your cl:', value=13.7, min_value=0.00, step=0.01)
|
| 81 |
+
cnnp = container_col_3.number_input(label='Your cnnp:', value=14.0, min_value=0.00, step=0.01)
|
| 82 |
+
vn = container_col_4.number_input(label='Your vn:', value=88.7, min_value=0.00, step=0.01)
|
| 83 |
+
vtn = container_col_1.number_input(label='Your vtn: ', value=86.5, min_value=0.00, step=0.01)
|
| 84 |
+
cnnt = container_col_2.number_input(label='Your cnnt:', value=12.5, min_value=0.00, step=0.01)
|
| 85 |
+
cntp = container_col_3.number_input(label='Your cntp:', value=10.7, min_value=0.00, step=0.01)
|
| 86 |
+
vcn = container_col_4.number_input(label='Your vcn:', value=75.0, min_value=0.00, step=0.01)
|
| 87 |
else:
|
| 88 |
sample_options_21 = header_col_2.selectbox(label='Sample options:', options=['Sample 1 (Small)', 'Sample 2 (Medium)', 'Sample 3 (Large)'])
|
| 89 |
container_col_1, container_col_2, container_col_3, container_col_4, container_col_5 = st.columns([1, 1, 1, 1, 1])
|
|
|
|
| 161 |
|
| 162 |
if predict:
|
| 163 |
if num_of_features == '6 measurements':
|
| 164 |
+
X_6 = np.array([[vtn, vn, vcn, cl, ttp, ttt]])
|
| 165 |
X_6 = scaler_6.transform(X_6)
|
| 166 |
y_6 = clf_6.predict(X_6)
|
| 167 |
+
st.success(f'We recommend you choosing {convert_prediction(y_6)} size!')
|
| 168 |
elif num_of_features == '8 measurements':
|
| 169 |
+
X_8 = np.array([[ttp, cl, cnnp, vn, vtn, cnnt, cntp, vcn]])
|
| 170 |
X_8 = scaler_8.transform(X_8)
|
| 171 |
y_8 = clf_8.predict(X_8)
|
| 172 |
+
st.success(f'We recommend you choosing {convert_prediction(np.argmax(y_8, axis=1))} size!')
|
| 173 |
else:
|
| 174 |
+
X_21 = np.array([[h, w, bmi, vtn, vn, vcn, cn, cnnp, cnnt, cntp, cntt, ccnp, ccnt, snt, sndp, sndt, xup, xut, cl, ttp, ttt]])
|
| 175 |
X_21 = scaler_21.transform(X_21)
|
| 176 |
y_21 = clf_21.predict(X_21)
|
| 177 |
+
st.success(f'We recommend you choosing {convert_prediction(np.argmax(y_21, axis=1))} size!')
|