subramaniansrc's picture
Update app.py
8125c72 verified
Raw
History Blame Contribute Delete
6.01 kB
import gradio as gr
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import os
from sklearn.ensemble import RandomForestRegressor
from PIL import Image
# --------------------------------------------------
# LOGO PATH
# --------------------------------------------------
LOGO_PATH = r"C:\Users\SASTRA\Desktop\sastra_logo.jpg"
logo_img = Image.open(LOGO_PATH) if os.path.exists(LOGO_PATH) else None
CSV_FILE = "student_analysis_database.csv"
# --------------------------------------------------
# MODEL TRAINING
# --------------------------------------------------
np.random.seed(42)
X_train = np.random.uniform(1,10,(400,15))
y_train = (
0.15*X_train[:,1] +
0.15*X_train[:,2] +
0.18*X_train[:,3] +
0.14*X_train[:,4] +
0.10*X_train[:,5] +
0.10*X_train[:,6] +
0.18*X_train[:,7]
) * 8
model = RandomForestRegressor(n_estimators=150, random_state=42)
model.fit(X_train,y_train)
# --------------------------------------------------
# IQ CALCULATION
# --------------------------------------------------
def calculate_iq(reasoning, aptitude, problem_solving,
verbal, communication, understanding):
return round((
0.25*reasoning +
0.20*aptitude +
0.20*problem_solving +
0.15*verbal +
0.10*communication +
0.10*understanding
) * 10, 2)
# --------------------------------------------------
# MAIN FUNCTION
# --------------------------------------------------
def institutional_ai(
name, regno, vision, mission, arrears,
sg1, sg2, sg3, sg4, sg5, sg6,
cgpa,
understanding, coding, problem_solving,
presentation, aptitude, reasoning,
verbal, communication, team_building,
group_discussion, study_time):
iq = calculate_iq(reasoning, aptitude,
problem_solving, verbal,
communication, understanding)
features = np.array([[
arrears, sg1, sg2, sg3, sg4, sg5,
sg6, cgpa, coding, problem_solving,
aptitude, communication, iq,
study_time, presentation
]])
performance = float(model.predict(features)[0])
weak=[]
if coding<5: weak.append("Coding")
if aptitude<5: weak.append("Aptitude")
if communication<5: weak.append("Communication")
concentration=", ".join(weak) if weak else "Balanced Skill Profile"
placement = (
"High Probability → Product Companies"
if performance>=80 and cgpa>=8
else "Moderate Probability → Service Companies"
if performance>=65
else "Needs Skill Improvement"
)
advice="Improve weak areas and maintain academic consistency."
# ---------- Graphs ----------
fig1=plt.figure()
plt.bar(["Performance"],[performance])
plt.ylim(0,100)
fig2=plt.figure()
plt.plot(range(1,7),[sg1,sg2,sg3,sg4,sg5,sg6],marker='o')
labels=['Understanding','Coding','ProblemSolving',
'Aptitude','Communication','Presentation']
skills=[understanding,coding,problem_solving,
aptitude,communication,presentation]
angles=np.linspace(0,2*np.pi,len(labels),endpoint=False)
skills=np.concatenate((skills,[skills[0]]))
angles=np.concatenate((angles,[angles[0]]))
fig3=plt.figure()
ax=fig3.add_subplot(111,polar=True)
ax.plot(angles,skills)
ax.fill(angles,skills,alpha=0.2)
report=f"Student: {name}\nPerformance: {round(performance,2)}\nIQ: {iq}"
return performance, iq, concentration, placement, advice, report, fig1, fig2, fig3
# --------------------------------------------------
# UI USING BLOCKS ONLY (KEY FIX)
# --------------------------------------------------
with gr.Blocks() as demo:
# LOGO CENTERED
if logo_img is not None:
gr.Image(value=logo_img, show_label=False, height=160)
gr.Markdown(
"""
<div style='text-align:center'>
<h2>Srinivasa Ramanujan Centre,<br>
SASTRA Deemed to be University, Kumbakonam</h2>
<h3>Student Performance Analysis</h3>
</div>
"""
)
# INPUTS
name = gr.Textbox(label="Student Name")
regno = gr.Textbox(label="Register Number")
vision = gr.Textbox(label="Vision")
mission = gr.Textbox(label="Mission")
arrears = gr.Slider(0,10,label="Arrears")
sg1 = gr.Slider(0,10,label="SGPA 1")
sg2 = gr.Slider(0,10,label="SGPA 2")
sg3 = gr.Slider(0,10,label="SGPA 3")
sg4 = gr.Slider(0,10,label="SGPA 4")
sg5 = gr.Slider(0,10,label="SGPA 5")
sg6 = gr.Slider(0,10,label="SGPA 6")
cgpa = gr.Slider(0,10,label="CGPA")
understanding = gr.Slider(1,10,label="Understanding")
coding = gr.Slider(1,10,label="Coding")
problem_solving = gr.Slider(1,10,label="Problem Solving")
presentation = gr.Slider(1,10,label="Presentation")
aptitude = gr.Slider(1,10,label="Aptitude")
reasoning = gr.Slider(1,10,label="Reasoning")
verbal = gr.Slider(1,10,label="Verbal")
communication = gr.Slider(1,10,label="Communication")
team_building = gr.Slider(1,10,label="Team Building")
group_discussion = gr.Slider(1,10,label="Group Discussion")
study_time = gr.Slider(1,10,label="Daily Study Time")
submit = gr.Button("Analyze Student")
# OUTPUTS
out1 = gr.Number(label="Predicted Performance")
out2 = gr.Number(label="Estimated IQ")
out3 = gr.Textbox(label="Concentration Areas")
out4 = gr.Textbox(label="Placement")
out5 = gr.Textbox(label="Advice")
out6 = gr.Textbox(label="Report")
plot1 = gr.Plot()
plot2 = gr.Plot()
plot3 = gr.Plot()
submit.click(
institutional_ai,
inputs=[name,regno,vision,mission,arrears,
sg1,sg2,sg3,sg4,sg5,sg6,cgpa,
understanding,coding,problem_solving,
presentation,aptitude,reasoning,
verbal,communication,team_building,
group_discussion,study_time],
outputs=[out1,out2,out3,out4,out5,out6,plot1,plot2,plot3]
)
demo.launch(inbrowser=True)