pranit144's picture
Upload 84 files
07629a7 verified
from flask import Flask, render_template, request, flash
import os
from werkzeug.utils import secure_filename
from keras.models import load_model
from keras.layers import DepthwiseConv2D
from PIL import Image, ImageOps
import numpy as np
app = Flask(__name__)
app.secret_key = 'secret-key'
UPLOAD_FOLDER = os.path.abspath('uploads/')
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
FACILITIES = [
{
"name": "Audi",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\audi model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\audi model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Audi.pdf"
},
{
"name": "Canteen",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\canteen model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\canteen model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Canteen.pdf"
},
{
"name": "Classroom",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\classroom model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\classroom model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Classroom.pdf"
},
{
"name": "Computer Lab",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\computer lab model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\computer lab model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Computer Lab.pdf"
},
{
"name": "Conference Hall",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\conference hall model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\conference hall model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Conference Hall.pdf"
},
{
"name": "Drawing Halls",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\drawing halls model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\drawing halls model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Drawing Halls.pdf"
},
{
"name": "Faculty Cabin",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\faculty cabin model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\faculty cabin model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Faculty Cabin.pdf"
},
{
"name": "Fire Extinguishers",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\fire extinguishers model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\fire extinguishers model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Fire Extinguishers.pdf"
},
{
"name": "Generator",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\generator model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\generator model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Generator.pdf"
},
{
"name": "Grounds",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\grounds model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\grounds model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Grounds.pdf"
},
{
"name": "Library",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\library model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\library model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Library.pdf"
},
{
"name": "Medical Room",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\medical room model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\medical room model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Medical Room.pdf"
},
{
"name": "Parking",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\parking model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\parking model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Parking.pdf"
},
{
"name": "Pothole Management",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\pothole management model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\pothole management model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Pothole Management.pdf"
},
{
"name": "Restroom",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\restroom model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\restroom model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Restroom.pdf"
},
{
"name": "Seminar Hall",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\seminar hall model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\seminar hall model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Seminar Hall.pdf"
},
{
"name": "Server Room",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\server room model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\server room model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Server Room.pdf"
},
{
"name": "Sports Equipment",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\sports equipment model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\sports equipment model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Sports Equipment.pdf"
},
{
"name": "TPO (Training and Placement Office)",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\tpo model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\tpo model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\TPO (Training and Placement Office).pdf"
},
{
"name": "Workshop",
"type": "image_processing",
"model": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\workshop model\keras_model.h5",
"labels": r"C:\Users\Pranit\PycharmProjects\infrastructure\MODELS\workshop model\labels.txt",
"pdf": r"C:\Users\Pranit\PycharmProjects\infrastructure\pdfs\Workshop.pdf"
}
]
def calculate_required_facilities(num_students, num_divisions, num_courses, course_duration):
# 1. Classrooms Required
classrooms_required = num_divisions * course_duration * 0.5
# 2. Total Labs Required
base_labs = 2 * num_courses * course_duration
if num_students > 180 * num_courses:
extra_students_per_course = (num_students - (180 * num_courses)) // 50
base_labs += extra_students_per_course
additional_labs = (num_students - 600) // 150 if num_students > 600 else 0
total_labs = base_labs + additional_labs
# 3. Workshops Required
workshops_required = 1 if num_students <= 600 else 1 + (num_students - 600) // 600
# 4. CAD Centres Required
cad_centres_required = 1 if num_students <= 600 else 1 + (num_students - 600) // 600
# 5. Computer Centres Required
computer_centres_required = 1 if num_students <= 600 else 1 + (num_students - 600) // 600
# 6. Seminar Halls Required
seminar_halls_required = 1
# 7. Library Required
library_required = 1
# 8. Language Labs Required
language_labs_required = 1
# 9. PCs/Laptops Required
pcs_laptops_required = max(20, num_students // 10)
# 10. Additional Facilities (Single Requirement)
auditorium_required = 1
faculty_cabins_required = 1
medical_room_required = 1
sports_facilities_required = 1
canteen_required = 1
generator_required = 1
bicycle_stand_required = 1
bus_transport_required = 1
# 11. Other Derived Formulas
dispensers_required = 1
fire_extinguishers_required = 1
grounds_required = 1
parking_areas_required = 1
road_condition_check = 1
# Returning the required facilities as a dictionary
return {
"classrooms_required": int(classrooms_required),
"labs_required": int(total_labs),
"workshops_required": int(workshops_required),
"cad_centres_required": int(cad_centres_required),
"computer_centres_required": int(computer_centres_required),
"seminar_halls_required": int(seminar_halls_required),
"library_required": int(library_required),
"language_labs_required": int(language_labs_required),
"pcs_laptops_required": int(pcs_laptops_required),
"auditorium_required": int(auditorium_required),
"faculty_cabins_required": int(faculty_cabins_required),
"medical_room_required": int(medical_room_required),
"sports_facilities_required": int(sports_facilities_required),
"canteen_required": int(canteen_required),
"generator_required": int(generator_required),
"bicycle_stand_required": int(bicycle_stand_required),
"bus_transport_required": int(bus_transport_required),
"dispensers_required": int(dispensers_required),
"fire_extinguishers_required": int(fire_extinguishers_required),
"grounds_required": int(grounds_required),
"parking_areas_required": int(parking_areas_required),
"road_condition_check": int(road_condition_check),
}
def process_image_with_model(model_path, labels_path, image_path):
try:
model = load_model(model_path, compile=False)
with open(labels_path, "r") as file:
class_names = file.readlines()
image = Image.open(image_path).convert("RGB")
image = ImageOps.fit(image, (224, 224), Image.Resampling.LANCZOS)
image_array = np.asarray(image).astype(np.float32) / 127.5 - 1
data = np.expand_dims(image_array, axis=0)
prediction = model.predict(data)
index = np.argmax(prediction)
class_name = class_names[index].strip()
confidence_score = prediction[0][index]
return {"class": class_name, "confidence": round(confidence_score * 100, 2)}
except Exception as e:
return {"error": f"Failed to process image. Reason: {str(e)}"}
@app.route('/', methods=['GET', 'POST'])
def home():
required_facilities = {}
if request.method == 'POST' and 'calculate_facilities' in request.form:
# Fetch inputs for calculation
num_students = int(request.form['num_students'])
num_divisions = int(request.form['num_divisions'])
num_courses = int(request.form['num_courses'])
course_duration = int(request.form['course_duration'])
# Calculate facilities
required_facilities = calculate_required_facilities(
num_students, num_divisions, num_courses, course_duration
)
# Handle verification for each facility
elif request.method == 'POST' and 'facility' in request.form:
selected_facility = request.form.get('facility')
facility = next((f for f in FACILITIES if f['name'] == selected_facility), None)
if facility:
files = request.files.getlist("files")
if files:
save_dir = os.path.join(app.config['UPLOAD_FOLDER'], selected_facility)
os.makedirs(save_dir, exist_ok=True)
for file in files:
if file.filename == "":
flash("No file selected for uploading.", "warning")
continue
filename = secure_filename(file.filename)
file_path = os.path.join(save_dir, filename)
file.save(file_path)
result = process_image_with_model(facility["model"], facility["labels"], file_path)
if 'error' in result:
flash(result['error'], "danger")
else:
flash(f"{result['class']} detected with {result['confidence']}% confidence.", "success")
return render_template(
'index.html',
facilities=FACILITIES,
required_facilities=required_facilities
)
if __name__ == '__main__':
app.run(debug=True)