Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
chromium
37 changes: 20 additions & 17 deletions app.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
from flask import Flask,request,render_template
from flask import Flask, request, render_template
import numpy as np
import pandas
import sklearn
import pickle

# importing model
model = pickle.load(open('model.pkl','rb'))
sc = pickle.load(open('standscaler.pkl','rb'))
ms = pickle.load(open('minmaxscaler.pkl','rb'))
# Create the Flask app instance with the template and static folder set to the project root
app = Flask(__name__, template_folder='.', static_folder='.')

# creating flask app
app = Flask(__name__)
# Importing the model and scalers
model = pickle.load(open('model.pkl', 'rb'))
sc = pickle.load(open('standscaler.pkl', 'rb'))
ms = pickle.load(open('minmaxscaler.pkl', 'rb'))

@app.route('/')
def index():
return render_template("index.html")

@app.route("/predict",methods=['POST'])
@app.route("/predict", methods=['POST'])
def predict():
# Retrieve form data
N = request.form['Nitrogen']
P = request.form['Phosporus']
K = request.form['Potassium']
Expand All @@ -26,28 +27,30 @@ def predict():
ph = request.form['Ph']
rainfall = request.form['Rainfall']

# Prepare features for prediction
feature_list = [N, P, K, temp, humidity, ph, rainfall]
single_pred = np.array(feature_list).reshape(1, -1)

# Scaling features
scaled_features = ms.transform(single_pred)
final_features = sc.transform(scaled_features)
prediction = model.predict(final_features)

crop_dict = {1: "Rice", 2: "Maize", 3: "Jute", 4: "Cotton", 5: "Coconut", 6: "Papaya", 7: "Orange",
8: "Apple", 9: "Muskmelon", 10: "Watermelon", 11: "Grapes", 12: "Mango", 13: "Banana",
14: "Pomegranate", 15: "Lentil", 16: "Blackgram", 17: "Mungbean", 18: "Mothbeans",
19: "Pigeonpeas", 20: "Kidneybeans", 21: "Chickpea", 22: "Coffee"}
# Crop recommendation based on prediction output
crop_dict = {
1: "Rice", 2: "Maize", 3: "Jute", 4: "Cotton", 5: "Coconut", 6: "Papaya", 7: "Orange",
8: "Apple", 9: "Muskmelon", 10: "Watermelon", 11: "Grapes", 12: "Mango", 13: "Banana",
14: "Pomegranate", 15: "Lentil", 16: "Blackgram", 17: "Mungbean", 18: "Mothbeans",
19: "Pigeonpeas", 20: "Kidneybeans", 21: "Chickpea", 22: "Coffee"
}

if prediction[0] in crop_dict:
crop = crop_dict[prediction[0]]
result = "{} is the best crop to be cultivated right there".format(crop)
else:
result = "Sorry, we could not determine the best crop to be cultivated with the provided data."
return render_template('index.html',result = result)

return render_template("index.html", result=result)




# python main
if __name__ == "__main__":
app.run(debug=True)
237 changes: 121 additions & 116 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,130 +3,135 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
<title>Crop Recommendation System</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ"
crossorigin="anonymous">
<style>
body {
background: #BCBBB8;
}
h1 {
color: mediumseagreen;
text-align: center;
margin-bottom: 20px;
}
.container {
background: #edf2f7;
font-weight: bold;
padding: 20px;
border-radius: 15px;
margin-top: 30px;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
.card {
margin: 20px auto;
max-width: 22rem;
color: white;
}
</style>
</head>
<style>
h1 {
color: mediumseagreen;
text-align: center;
}

.warning {
color: red;
font-weight: bold;
text-align: center;
}
.card{
margin-left:410px;
margin-top: 20px;
color: white;
}
.container{
background:#edf2f7;
font-weight: bold;
padding-bottom:10px;
border-radius: 15px;
}
</style>




<body style="background:#BCBBB8">
<!--=======================navbar=====================================================-->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="/">Crop Recommendation</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Contact</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">About</a>
</li>
</ul>
<form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</div>
</nav>

<!--==========================================================================================-->
<div class="container my-3 mt-3">
<h1 class="text-success">Crop Recommendation System <span class="text-success">🌱</span></h1>

<!-- adding form-->
<body>
<!-- Navbar -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="/">Crop Recommendation</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Contact</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">About</a>
</li>
</ul>
<form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</div>
</nav>

<!-- Main Content -->
<div class="container">
<h1>Crop Recommendation System <span>🌱</span></h1>
<!-- Form for input -->
<form action="/predict" method="POST">
<div class="row">
<div class="col-md-4">
<label for="Nitrogen">Nitrogen</label>
<input type="number" id="Nitrogen" name="Nitrogen" placeholder="Enter Nitrogen" class="form-control" required step="0">
</div>
<div class="col-md-4">
<label for="Phosporus">Phosphorus</label>
<input type="number" id="Phosporus" name="Phosporus" placeholder="Enter Phosphorus" class="form-control" required step="00">
</div>
<div class="col-md-4">
<label for="Potassium">Potassium</label>
<input type="number" id="Potassium" name="Potassium" placeholder="Enter Potassium" class="form-control" required step="0">
</div>
<div class="row mb-3">
<div class="col-md-4">
<label for="Nitrogen" class="form-label">Nitrogen</label>
<input type="number" id="Nitrogen" name="Nitrogen" placeholder="Enter Nitrogen"
class="form-control" required>
</div>
<div class="col-md-4">
<label for="Phosporus" class="form-label">Phosphorus</label>
<input type="number" id="Phosporus" name="Phosporus" placeholder="Enter Phosphorus"
class="form-control" required>
</div>
<div class="col-md-4">
<label for="Potassium" class="form-label">Potassium</label>
<input type="number" id="Potassium" name="Potassium" placeholder="Enter Potassium"
class="form-control" required>
</div>
</div>

<div class="row mt-4">
<div class="col-md-4">
<label for="Temperature">Temperature</label>
<input type="number" step="0.01" id="Temperature" name="Temperature" placeholder="Enter Temperature in °C" class="form-control" required step="0">
</div>
<div class="col-md-4">
<label for="Humidity">Humidity</label>
<input type="number" step="0.01" id="Humidity" name="Humidity" placeholder="Enter Humidity in %" class="form-control" required step="0">
</div>
<div class="col-md-4">
<label for="pH">pH</label>
<input type="number" step="0.01" id="Ph" name="Ph" placeholder="Enter pH value" class="form-control" required step="0">
</div>
</div>

<div class="row mt-4">
<div class="col-md-4">
<label for="Rainfall">Rainfall</label>
<input type="number" step="0.01" id="Rainfall" name="Rainfall" placeholder="Enter Rainfall in mm" class="form-control" required>
</div>
</div>


<div class="row mb-3">
<div class="col-md-4">
<label for="Temperature" class="form-label">Temperature (°C)</label>
<input type="number" step="0.01" id="Temperature" name="Temperature"
placeholder="Enter Temperature in °C" class="form-control" required>
</div>
<div class="col-md-4">
<label for="Humidity" class="form-label">Humidity (%)</label>
<input type="number" step="0.01" id="Humidity" name="Humidity"
placeholder="Enter Humidity in %" class="form-control" required>
</div>
<div class="col-md-4">
<label for="Ph" class="form-label">pH Value</label>
<input type="number" step="0.01" id="Ph" name="Ph" placeholder="Enter pH value"
class="form-control" required>
</div>
</div>

<div class="row mt-4">
<div class="row mb-4">
<div class="col-md-4">
<label for="Rainfall" class="form-label">Rainfall (mm)</label>
<input type="number" step="0.01" id="Rainfall" name="Rainfall"
placeholder="Enter Rainfall in mm" class="form-control" required>
</div>
</div>

<div class="col-md-12 text-center">
<button type="submit" class="btn btn-primary btn-lg">Get Recommendation</button>
</div>
</div>
<div class="row text-center">
<div class="col">
<button type="submit" class="btn btn-primary btn-lg">Get Recommendation</button>
</div>
</div>
</form>

<!-- Display Result -->
{% if result %}
<div class="card bg-dark">
<img src="{{ url_for('static', filename='img.jpg') }}" class="card-img-top" alt="Crop Image">
<div class="card-body">
<h5 class="card-title">Recommended Crop for Cultivation:</h5>
<p class="card-text">{{ result }}</p>
</div>
</div>
{% endif %}
</div>


{% if result %}
<div class="card bg-dark" style="width: 18rem;">
<img src="{{url_for('static', filename='img.jpg')}}" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">Recommend Crop for cultivation is:</h5>
<p class="card-text">{{ result }}</p>
</div>
</div>
{% endif %}
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe"
crossorigin="anonymous"></script>
</body>
</html>
4 changes: 4 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Flask==3.1.0
numpy==2.2.3
pandas==2.2.3
scikit_learn==1.6.1