from flask import Flask, request, render_template import pandas as pd import joblib import numpy as np app = Flask(__name__) # Load model, encoders, and optional scaler model = joblib.load('placement_model.pkl') le_placement = joblib.load('le_placement.pkl') le_internship = joblib.load('le_internship.pkl') # scaler = joblib.load('scaler.pkl') # Uncomment if you used scaling # Feature columns in exact order used during training features = ['IQ', 'Prev_Sem_Result', 'CGPA', 'Academic_Performance', 'Extra_Curricular_Score', 'Communication_Skills', 'Projects_Completed', 'Internship_Encoded'] @app.route('/', methods=['GET', 'POST']) def index(): prediction = None if request.method == 'POST': try: # Collect inputs and convert to proper type IQ = float(request.form['IQ']) Prev_Sem_Result = float(request.form['Prev_Sem_Result']) CGPA = float(request.form['CGPA']) Academic_Performance = float(request.form['Academic_Performance']) Extra_Curricular_Score = float(request.form['Extra_Curricular_Score']) Communication_Skills = float(request.form['Communication_Skills']) Projects_Completed = int(request.form['Projects_Completed']) Internship_Experience = request.form['Internship_Experience'].strip() # Handle unknown internship category if Internship_Experience not in le_internship.classes_: # Assign most frequent category from training Internship_Experience = le_internship.classes_[0] internship_encoded = le_internship.transform([Internship_Experience])[0] # Prepare DataFrame in the same feature order as training X = pd.DataFrame([[IQ, Prev_Sem_Result, CGPA, Academic_Performance, Extra_Curricular_Score, Communication_Skills, Projects_Completed, internship_encoded]], columns=features) # Optional: scale features if model expects it # X = pd.DataFrame(scaler.transform(X), columns=features) # Make prediction pred_encoded = model.predict(X)[0] pred_label = le_placement.inverse_transform([pred_encoded])[0] prediction = f'Predicted Placement: {pred_label}' except ValueError: prediction = "Invalid input! Please enter numeric values." except Exception as e: # Catch any unexpected error prediction = f"Error in prediction: {str(e)}" return render_template('index.html', prediction=prediction) @app.route('/about') def about(): return render_template('about.html') @app.route('/canva') def canva(): return render_template('canva.html') if __name__ == '__main__': app.run(debug=True)