lumicero commited on
Commit
b68d4b5
·
verified ·
1 Parent(s): 8773dc6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +123 -47
app.py CHANGED
@@ -1,56 +1,132 @@
1
-
2
- import streamlit as st
3
- import pandas as pd
4
  import pickle
5
 
6
- # Load the fitted model
7
- model = pickle.load(open('model (10).pkl', 'rb'))
 
8
 
9
  # Mapping antara kelas dan nama tipe almond
10
  class_mapping = {
11
- 0: 'Sanora',
12
- 1: 'Mamra',
13
- 2: 'Regular',
14
  # tambahkan kelas lainnya sesuai kebutuhan
15
  }
16
 
17
- st.title('Almond Classification')
18
- st.write('This web app classifies almonds based on your input features.')
19
-
20
- # Input untuk setiap fitur
21
- length_major_axis = st.number_input('Length (major axis)', min_value=269.356903, max_value=279.879883)
22
- width_minor_axis = st.number_input('Width (minor axis)', min_value=176.023636, max_value=227.940628)
23
- thickness_depth = st.number_input('Thickness (depth)', min_value=107.253448, max_value=127.795132)
24
- area = st.number_input('Area', min_value=18471.5, max_value=36683.0)
25
- perimeter = st.number_input('Perimeter', min_value=551.688379, max_value=887.310743)
26
- roundness = st.slider('Roundness', min_value=0.472718, max_value=0.643761, step=0.01)
27
- solidity = st.slider('Solidity', min_value=0.931800, max_value=0.973384, step=0.01)
28
- compactness = st.slider('Compactness', min_value=1.383965, max_value=1.764701, step=0.01)
29
- aspect_ratio = st.slider('Aspect Ratio', min_value=1.530231, max_value=1.705716, step=0.01)
30
- eccentricity = st.slider('Eccentricity', min_value=0.75693, max_value=0.81012, step=0.01)
31
- extent = st.slider('Extent', min_value=0.656535, max_value=0.725739, step=0.01)
32
- convex_area = st.number_input('Convex hull (convex area)', min_value=18068.0, max_value=36683.0, step=0.01)
33
-
34
- # Tombol untuk memprediksi
35
- if st.button('Predict'):
36
- # Muat scaler
37
- scaler = pickle.load(open('scaler.pkl', 'rb'))
38
-
39
- # Input dari pengguna
40
- input_features = [[length_major_axis, width_minor_axis, thickness_depth, area,
41
- perimeter, roundness, solidity, compactness, aspect_ratio,
42
- eccentricity, extent, convex_area]]
43
-
44
- # Lakukan scaling pada input
45
- input_features_scaled = scaler.transform(input_features)
46
-
47
- # Prediksi menggunakan model
48
- prediction = model.predict(input_features_scaled)
49
-
50
-
51
-
52
- # Menggunakan mapping untuk mendapatkan nama tipe almond
53
- predicted_class_name = class_mapping[prediction[0]]
54
-
55
- st.write(f'The predicted class is: {predicted_class_name}')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
 
 
 
 
1
+ import gradio as gr
 
 
2
  import pickle
3
 
4
+ # Load model + scaler (lebih efisien: sekali di awal)
5
+ model = pickle.load(open("model (10).pkl", "rb"))
6
+ scaler = pickle.load(open("scaler.pkl", "rb"))
7
 
8
  # Mapping antara kelas dan nama tipe almond
9
  class_mapping = {
10
+ 0: "Sanora",
11
+ 1: "Mamra",
12
+ 2: "Regular",
13
  # tambahkan kelas lainnya sesuai kebutuhan
14
  }
15
 
16
+ def predict_almond(
17
+ length_major_axis,
18
+ width_minor_axis,
19
+ thickness_depth,
20
+ area,
21
+ perimeter,
22
+ roundness,
23
+ solidity,
24
+ compactness,
25
+ aspect_ratio,
26
+ eccentricity,
27
+ extent,
28
+ convex_area,
29
+ ):
30
+ # Susun input sesuai urutan fitur saat training
31
+ X = [[
32
+ length_major_axis, width_minor_axis, thickness_depth, area,
33
+ perimeter, roundness, solidity, compactness, aspect_ratio,
34
+ eccentricity, extent, convex_area
35
+ ]]
36
+
37
+ # Scaling + prediksi
38
+ X_scaled = scaler.transform(X)
39
+ pred = model.predict(X_scaled)[0]
40
+
41
+ return class_mapping.get(int(pred), f"Unknown class: {pred}")
42
+
43
+ with gr.Blocks(title="Almond Classification") as demo:
44
+ gr.Markdown("# Almond Classification")
45
+ gr.Markdown("This web app classifies almonds based on your input features.")
46
+
47
+ with gr.Row():
48
+ with gr.Column():
49
+ length_major_axis = gr.Number(
50
+ label="Length (major axis)",
51
+ minimum=269.356903, maximum=279.879883,
52
+ value=(269.356903 + 279.879883) / 2,
53
+ step=0.001,
54
+ )
55
+ width_minor_axis = gr.Number(
56
+ label="Width (minor axis)",
57
+ minimum=176.023636, maximum=227.940628,
58
+ value=(176.023636 + 227.940628) / 2,
59
+ step=0.001,
60
+ )
61
+ thickness_depth = gr.Number(
62
+ label="Thickness (depth)",
63
+ minimum=107.253448, maximum=127.795132,
64
+ value=(107.253448 + 127.795132) / 2,
65
+ step=0.001,
66
+ )
67
+ area = gr.Number(
68
+ label="Area",
69
+ minimum=18471.5, maximum=36683.0,
70
+ value=(18471.5 + 36683.0) / 2,
71
+ step=0.1,
72
+ )
73
+ perimeter = gr.Number(
74
+ label="Perimeter",
75
+ minimum=551.688379, maximum=887.310743,
76
+ value=(551.688379 + 887.310743) / 2,
77
+ step=0.001,
78
+ )
79
+ convex_area = gr.Number(
80
+ label="Convex hull (convex area)",
81
+ minimum=18068.0, maximum=36683.0,
82
+ value=(18068.0 + 36683.0) / 2,
83
+ step=0.1,
84
+ )
85
+
86
+ with gr.Column():
87
+ roundness = gr.Slider(
88
+ label="Roundness",
89
+ minimum=0.472718, maximum=0.643761, step=0.01,
90
+ value=(0.472718 + 0.643761) / 2,
91
+ )
92
+ solidity = gr.Slider(
93
+ label="Solidity",
94
+ minimum=0.931800, maximum=0.973384, step=0.01,
95
+ value=(0.931800 + 0.973384) / 2,
96
+ )
97
+ compactness = gr.Slider(
98
+ label="Compactness",
99
+ minimum=1.383965, maximum=1.764701, step=0.01,
100
+ value=(1.383965 + 1.764701) / 2,
101
+ )
102
+ aspect_ratio = gr.Slider(
103
+ label="Aspect Ratio",
104
+ minimum=1.530231, maximum=1.705716, step=0.01,
105
+ value=(1.530231 + 1.705716) / 2,
106
+ )
107
+ eccentricity = gr.Slider(
108
+ label="Eccentricity",
109
+ minimum=0.75693, maximum=0.81012, step=0.01,
110
+ value=(0.75693 + 0.81012) / 2,
111
+ )
112
+ extent = gr.Slider(
113
+ label="Extent",
114
+ minimum=0.656535, maximum=0.725739, step=0.01,
115
+ value=(0.656535 + 0.725739) / 2,
116
+ )
117
+
118
+ btn = gr.Button("Predict")
119
+ out = gr.Textbox(label="The predicted class is:", interactive=False)
120
+
121
+ btn.click(
122
+ fn=predict_almond,
123
+ inputs=[
124
+ length_major_axis, width_minor_axis, thickness_depth, area,
125
+ perimeter, roundness, solidity, compactness, aspect_ratio,
126
+ eccentricity, extent, convex_area
127
+ ],
128
+ outputs=out,
129
+ )
130
 
131
+ if __name__ == "__main__":
132
+ demo.launch()