register-atten / app.py
ravinder2024's picture
Update app.py
f06ef27 verified
import gradio as gr
import sqlite3
from PIL import Image
import os
import pandas as pd
# Database setup
DB_PATH = "students.db"
os.makedirs("uploads", exist_ok=True)
def setup_database():
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER,
image_path TEXT
)
""")
conn.commit()
conn.close()
def register_student(name, age, image_file):
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
# Save image to the uploads directory
if image_file is not None:
image_path = f"uploads/{name.replace(' ', '_')}_{os.path.basename(image_file)}"
os.rename(image_file, image_path) # Move file to uploads directory
else:
image_path = None
cursor.execute("INSERT INTO students (name, age, image_path) VALUES (?, ?, ?)", (name, age, image_path))
conn.commit()
conn.close()
return f"Student {name} registered successfully!"
def view_students():
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("SELECT id, name, age, image_path FROM students")
records = cursor.fetchall()
conn.close()
# Format data for display
if records:
data = []
for record in records:
student_id, name, age, image_path = record
if image_path and os.path.exists(image_path):
image = Image.open(image_path)
else:
image = None
data.append({"ID": student_id, "Name": name, "Age": age, "Image": image})
return pd.DataFrame(data).drop(columns=["Image"]).to_string(), data # Display text table without images
else:
return "No records found.", None
# Initialize the database
setup_database()
# Gradio Interface
with gr.Blocks() as demo:
with gr.Row():
gr.Markdown("### Student Registration")
with gr.Row():
name_input = gr.Textbox(label="Name", placeholder="Enter the student's name")
age_input = gr.Number(label="Age", precision=0)
image_input = gr.Image(label="Upload Image", type="filepath")
register_button = gr.Button("Register Student")
output = gr.Textbox(label="Status")
register_button.click(
register_student,
inputs=[name_input, age_input, image_input],
outputs=output,
)
with gr.Row():
gr.Markdown("### View Registered Students")
view_button = gr.Button("View Records")
record_output = gr.Textbox(label="Student Records")
image_output = gr.Image(label="Images", type="pil", visible=False) # For displaying images if needed
def view_records_handler():
records, images = view_students()
return records
view_button.click(
view_records_handler,
inputs=[],
outputs=record_output,
)
# Launch the Gradio app
demo.launch()