Spaces:
Runtime error
Runtime error
Commit
·
51c06eb
1
Parent(s):
0e0307b
Upload Smart Solar Drying System app to Hugging Face
Browse files- .gitattributes +0 -35
- .gitignore +1 -0
- .vscode/settings.json +1 -0
- app.py +47 -0
- requirements.txt +7 -0
- templates/classification.html +105 -0
- templates/index.html +43 -0
- templates/regression.html +105 -0
.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>
|