ramspheldonyango commited on
Commit
51c06eb
·
1 Parent(s): 0e0307b

Upload Smart Solar Drying System app to Hugging Face

Browse files
.gitattributes CHANGED
@@ -1,35 +0,0 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ venv/
.vscode/settings.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {}
app.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from flask import Flask, render_template, request
3
+ import joblib
4
+ import numpy as np
5
+ import pickle
6
+
7
+
8
+ app = Flask(__name__)
9
+
10
+ # Load models
11
+ regressor = joblib.load('model/regressor_model.pkl')
12
+ classifier = joblib.load('model/classifier_model.pkl')
13
+
14
+ @app.route('/')
15
+ def home():
16
+ return render_template('index.html')
17
+
18
+ @app.route('/regression')
19
+ def regression():
20
+ return render_template('regression.html')
21
+
22
+ @app.route('/classification')
23
+ def classification():
24
+ return render_template('classification.html')
25
+
26
+ @app.route('/predict_regression', methods=['POST'])
27
+ def predict_regression():
28
+ try:
29
+ input_data = [float(x) for x in request.form.values()]
30
+ features = np.array([input_data])
31
+ prediction = regressor.predict(features)[0]
32
+ return render_template('regression.html', prediction_text=f'📈 Predicted Value: {prediction:.2f}')
33
+ except Exception as e:
34
+ return render_template('regression.html', prediction_text=f"⚠️ Error: {str(e)}")
35
+
36
+ @app.route('/predict_classification', methods=['POST'])
37
+ def predict_classification():
38
+ try:
39
+ input_data = [float(x) for x in request.form.values()]
40
+ features = np.array([input_data])
41
+ prediction = classifier.predict(features)[0]
42
+ return render_template('classification.html', prediction_text=f'🎯 Predicted Class: {int(prediction)}')
43
+ except Exception as e:
44
+ return render_template('classification.html', prediction_text=f"⚠️ Error: {str(e)}")
45
+
46
+ if __name__ == '__main__':
47
+ app.run(debug=True)
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Flask
2
+ joblib
3
+ scikit-learn
4
+ numpy
5
+ pandas
6
+ matplotlib
7
+ seaborn
templates/classification.html ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Classification Prediction - Herbal Drying</title>
7
+ <!-- Bootstrap CSS -->
8
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
9
+ <!-- Custom CSS -->
10
+ <style>
11
+ body {
12
+ background: #f8f9fa;
13
+ }
14
+ .form-container {
15
+ margin-top: 50px;
16
+ }
17
+ .card {
18
+ border-radius: 15px;
19
+ box-shadow: 0 8px 16px rgba(0,0,0,0.15);
20
+ padding: 30px;
21
+ }
22
+ h2 {
23
+ font-weight: 700;
24
+ }
25
+ </style>
26
+ </head>
27
+ <body>
28
+ <div class="container form-container">
29
+ <div class="card mx-auto">
30
+ <h2 class="text-center mb-4">Classification Prediction</h2>
31
+ <form action="/predict_classification" method="POST">
32
+ <!-- Input Fields (same as regression) -->
33
+ <div class="mb-3">
34
+ <label for="Layer_Thickness_cm" class="form-label">Layer Thickness (cm)</label>
35
+ <input type="number" step="any" class="form-control" id="Layer_Thickness_cm" name="Layer_Thickness_cm" placeholder="e.g., 1.5" required>
36
+ </div>
37
+ <div class="mb-3">
38
+ <label for="Ambient_Temperature_C" class="form-label">Ambient Temperature (°C)</label>
39
+ <input type="number" step="any" class="form-control" id="Ambient_Temperature_C" name="Ambient_Temperature_C" placeholder="e.g., 30" required>
40
+ </div>
41
+ <div class="mb-3">
42
+ <label for="Humidity_Percent" class="form-label">Humidity (%)</label>
43
+ <input type="number" step="any" class="form-control" id="Humidity_Percent" name="Humidity_Percent" placeholder="e.g., 60" required>
44
+ </div>
45
+ <div class="mb-3">
46
+ <label for="Moisture_Content_Initial_%" class="form-label">Moisture Content Initial (%)</label>
47
+ <input type="number" step="any" class="form-control" id="Moisture_Content_Initial_%" name="Moisture_Content_Initial_%" placeholder="e.g., 75" required>
48
+ </div>
49
+ <div class="mb-3">
50
+ <label for="Altitude_meters" class="form-label">Altitude (meters)</label>
51
+ <input type="number" class="form-control" id="Altitude_meters" name="Altitude_meters" placeholder="e.g., 1200" required>
52
+ </div>
53
+ <div class="mb-3">
54
+ <label for="Herb_Type" class="form-label">Herb Type</label>
55
+ <select class="form-select" id="Herb_Type" name="Herb_Type" required>
56
+ <option value="" disabled selected>Select Herb Type</option>
57
+ <option value="Lemongrass">Lemongrass</option>
58
+ <option value="Mint">Mint</option>
59
+ <option value="Moringa">Moringa</option>
60
+ <option value="Neem">Neem</option>
61
+ </select>
62
+ </div>
63
+ <div class="mb-3">
64
+ <label class="form-label">Airflow Level</label>
65
+ <div class="form-check">
66
+ <input class="form-check-input" type="radio" name="Airflow_Level" id="Airflow_Low" value="Low" required>
67
+ <label class="form-check-label" for="Airflow_Low">Low</label>
68
+ </div>
69
+ <div class="form-check">
70
+ <input class="form-check-input" type="radio" name="Airflow_Level" id="Airflow_Medium" value="Medium">
71
+ <label class="form-check-label" for="Airflow_Medium">Medium</label>
72
+ </div>
73
+ <div class="form-check">
74
+ <input class="form-check-input" type="radio" name="Airflow_Level" id="Airflow_High" value="High">
75
+ <label class="form-check-label" for="Airflow_High">High</label>
76
+ </div>
77
+ </div>
78
+ <div class="mb-3">
79
+ <label class="form-label">Time of Day Start</label>
80
+ <div class="form-check">
81
+ <input class="form-check-input" type="radio" name="Time_of_Day_Start" id="Time_of_Day_Morning" value="Morning" required>
82
+ <label class="form-check-label" for="Time_of_Day_Morning">Morning</label>
83
+ </div>
84
+ <div class="form-check">
85
+ <input class="form-check-input" type="radio" name="Time_of_Day_Start" id="Time_of_Day_Noon" value="Noon">
86
+ <label class="form-check-label" for="Time_of_Day_Noon">Noon</label>
87
+ </div>
88
+ </div>
89
+ <button type="submit" class="btn btn-success w-100">Predict Drying Status</button>
90
+ </form>
91
+ <!-- Display prediction result -->
92
+ {% if prediction_text %}
93
+ <div class="alert alert-info mt-4 text-center" role="alert">
94
+ {{ prediction_text }}
95
+ </div>
96
+ {% endif %}
97
+ <div class="text-center mt-3">
98
+ <a href="index.html" class="btn btn-link">Back to Home</a>
99
+ </div>
100
+ </div>
101
+ </div>
102
+ <!-- Bootstrap Bundle JS -->
103
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
104
+ </body>
105
+ </html>
templates/index.html ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Herbal Drying Prediction App</title>
7
+ <!-- Bootstrap CSS -->
8
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
9
+ <!-- Custom CSS -->
10
+ <style>
11
+ body {
12
+ background: #f8f9fa;
13
+ }
14
+ .container {
15
+ margin-top: 80px;
16
+ }
17
+ .card {
18
+ border-radius: 15px;
19
+ box-shadow: 0 8px 16px rgba(0,0,0,0.15);
20
+ }
21
+ .btn-custom {
22
+ font-size: 1.25rem;
23
+ padding: 15px 20px;
24
+ border-radius: 10px;
25
+ }
26
+ </style>
27
+ </head>
28
+ <body>
29
+ <div class="container text-center">
30
+ <h1 class="mb-4">Herbal Drying Prediction App</h1>
31
+ <div class="row justify-content-center">
32
+ <div class="col-md-6">
33
+ <div class="card p-4">
34
+ <a href="regression.html" class="btn btn-primary btn-custom w-100 mb-3">Regression Prediction</a>
35
+ <a href="classification.html" class="btn btn-success btn-custom w-100">Classification Prediction</a>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ <!-- Bootstrap JS Bundle -->
41
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
42
+ </body>
43
+ </html>
templates/regression.html ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Regression Prediction - Herbal Drying</title>
7
+ <!-- Bootstrap CSS -->
8
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
9
+ <!-- Custom CSS -->
10
+ <style>
11
+ body {
12
+ background: #f8f9fa;
13
+ }
14
+ .form-container {
15
+ margin-top: 50px;
16
+ }
17
+ .card {
18
+ border-radius: 15px;
19
+ box-shadow: 0 8px 16px rgba(0,0,0,0.15);
20
+ padding: 30px;
21
+ }
22
+ h2 {
23
+ font-weight: 700;
24
+ }
25
+ </style>
26
+ </head>
27
+ <body>
28
+ <div class="container form-container">
29
+ <div class="card mx-auto">
30
+ <h2 class="text-center mb-4">Regression Prediction</h2>
31
+ <form action="/predict_regression" method="POST">
32
+ <!-- Input Fields -->
33
+ <div class="mb-3">
34
+ <label for="Layer_Thickness_cm" class="form-label">Layer Thickness (cm)</label>
35
+ <input type="number" step="any" class="form-control" id="Layer_Thickness_cm" name="Layer_Thickness_cm" placeholder="e.g., 1.5" required>
36
+ </div>
37
+ <div class="mb-3">
38
+ <label for="Ambient_Temperature_C" class="form-label">Ambient Temperature (°C)</label>
39
+ <input type="number" step="any" class="form-control" id="Ambient_Temperature_C" name="Ambient_Temperature_C" placeholder="e.g., 30" required>
40
+ </div>
41
+ <div class="mb-3">
42
+ <label for="Humidity_Percent" class="form-label">Humidity (%)</label>
43
+ <input type="number" step="any" class="form-control" id="Humidity_Percent" name="Humidity_Percent" placeholder="e.g., 60" required>
44
+ </div>
45
+ <div class="mb-3">
46
+ <label for="Moisture_Content_Initial_%" class="form-label">Moisture Content Initial (%)</label>
47
+ <input type="number" step="any" class="form-control" id="Moisture_Content_Initial_%" name="Moisture_Content_Initial_%" placeholder="e.g., 75" required>
48
+ </div>
49
+ <div class="mb-3">
50
+ <label for="Altitude_meters" class="form-label">Altitude (meters)</label>
51
+ <input type="number" class="form-control" id="Altitude_meters" name="Altitude_meters" placeholder="e.g., 1200" required>
52
+ </div>
53
+ <div class="mb-3">
54
+ <label for="Herb_Type" class="form-label">Herb Type</label>
55
+ <select class="form-select" id="Herb_Type" name="Herb_Type" required>
56
+ <option value="" disabled selected>Select Herb Type</option>
57
+ <option value="Lemongrass">Lemongrass</option>
58
+ <option value="Mint">Mint</option>
59
+ <option value="Moringa">Moringa</option>
60
+ <option value="Neem">Neem</option>
61
+ </select>
62
+ </div>
63
+ <div class="mb-3">
64
+ <label class="form-label">Airflow Level</label>
65
+ <div class="form-check">
66
+ <input class="form-check-input" type="radio" name="Airflow_Level" id="Airflow_Low" value="Low" required>
67
+ <label class="form-check-label" for="Airflow_Low">Low</label>
68
+ </div>
69
+ <div class="form-check">
70
+ <input class="form-check-input" type="radio" name="Airflow_Level" id="Airflow_Medium" value="Medium">
71
+ <label class="form-check-label" for="Airflow_Medium">Medium</label>
72
+ </div>
73
+ <div class="form-check">
74
+ <input class="form-check-input" type="radio" name="Airflow_Level" id="Airflow_High" value="High">
75
+ <label class="form-check-label" for="Airflow_High">High</label>
76
+ </div>
77
+ </div>
78
+ <div class="mb-3">
79
+ <label class="form-label">Time of Day Start</label>
80
+ <div class="form-check">
81
+ <input class="form-check-input" type="radio" name="Time_of_Day_Start" id="Time_of_Day_Morning" value="Morning" required>
82
+ <label class="form-check-label" for="Time_of_Day_Morning">Morning</label>
83
+ </div>
84
+ <div class="form-check">
85
+ <input class="form-check-input" type="radio" name="Time_of_Day_Start" id="Time_of_Day_Noon" value="Noon">
86
+ <label class="form-check-label" for="Time_of_Day_Noon">Noon</label>
87
+ </div>
88
+ </div>
89
+ <button type="submit" class="btn btn-primary w-100">Predict Drying Time</button>
90
+ </form>
91
+ <!-- Display prediction result -->
92
+ {% if prediction_text %}
93
+ <div class="alert alert-info mt-4 text-center" role="alert">
94
+ {{ prediction_text }}
95
+ </div>
96
+ {% endif %}
97
+ <div class="text-center mt-3">
98
+ <a href="index.html" class="btn btn-link">Back to Home</a>
99
+ </div>
100
+ </div>
101
+ </div>
102
+ <!-- Bootstrap Bundle JS -->
103
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
104
+ </body>
105
+ </html>