krushimitravit's picture
Update app.py
ed79256 verified
import numpy as np
from flask import Flask, request, jsonify, render_template
import joblib
import os
# Initialize Flask app
app = Flask(__name__)
# Load the trained Random Forest model
rf_model = joblib.load('random_forest_model.pkl')
# Encoder classes
soil_type_classes = ['Alluvial Soil', 'Black Soil', 'Clay Soil', 'Red Soil']
crop_classes = ['All vegetables Tea Coffee Rubber Coconut Cashew Avocado',
'Cotton Blackgram Oilseeds Pigeonpea',
'Cotton Jowar Pigeonpea Blackgram',
'Cotton Rice Pigeonpea Blackgram Sunflower',
'Cotton Sorghum CerealCrops Blackgram',
'Cotton Sugarcane Pigeonpea Sorghum',
'Pearlmillet Basil Blackgram Sorghum',
'Pearlmillet Maize Pigeonpea Greengram Garlic',
'Pearlmillet Ragi Groundnut Potato All vegetables',
'Soybean Pigeonpea Millets Greengram',
'Soybean Pigeonpea Maize Sorghum']
# Route for the home page
@app.route('/')
def index():
return render_template('index.html', soil_types=soil_type_classes)
# Route to handle the prediction
@app.route('/predict', methods=['POST'])
def predict():
try:
# Get form data
soil_type = request.form.get('soil_type')
soil_depth = float(request.form.get('soil_depth'))
ph = float(request.form.get('ph'))
bulk_density = float(request.form.get('bulk_density'))
ec = float(request.form.get('ec'))
organic_carbon = float(request.form.get('organic_carbon'))
soil_moisture_retention = float(request.form.get('soil_moisture_retention'))
available_water_capacity = float(request.form.get('available_water_capacity'))
infiltration_rate = float(request.form.get('infiltration_rate'))
clay_percentage = float(request.form.get('clay_percentage'))
# Encode soil type
soil_type_encoded = soil_type_classes.index(soil_type)
# Create feature array
features = np.array([[soil_type_encoded, soil_depth, ph, bulk_density, ec, organic_carbon,
soil_moisture_retention, available_water_capacity, infiltration_rate, clay_percentage]])
# Make prediction
predicted_crop_index = rf_model.predict(features)[0]
predicted_crop = crop_classes[predicted_crop_index]
# Split the crops into separate columns (based on spaces)
predicted_crop_list = predicted_crop.split()
# Return the predicted crops as a list to the front-end
return jsonify({'predicted_crop_list': predicted_crop_list})
except Exception as e:
return jsonify({'error': str(e)})
if __name__ == '__main__':
port = int(os.environ.get("PORT", 7860))
app.run(host="0.0.0.0", port=port)