|
import os |
|
import tensorflow as tf |
|
import pandas as pd |
|
import gradio as gr |
|
|
|
|
|
|
|
model_path = "model.keras" |
|
|
|
try: |
|
model = tf.keras.models.load_model(model_path) |
|
print(f"Model loaded successfully from: {model_path}") |
|
except Exception as e: |
|
raise RuntimeError(f"Failed to load the model from {model_path}: {e}") |
|
|
|
|
|
classes = [ |
|
'No Immediate Risk: No urgent concerns detected. Maintain self-care and regular check-ups.', |
|
'Medium Risk of Harm - Needs Monitoring: Consider consulting a psychiatrist or mental health professional for guidance and treatment.', |
|
'Immediate Concern - Needs Urgent Support: Seek immediate help from a psychiatrist or mental health crisis intervention services.' |
|
] |
|
|
|
|
|
|
|
yes_no_mapping = { |
|
'q1': {'yes': 0.1, 'no': 0}, 'q2': {'yes': 0.1, 'no': 0}, 'q3': {'yes': 0.1, 'no': 0}, |
|
'q4': {'yes': 0.1, 'no': 0}, 'q5': {'yes': 0.1, 'no': 0}, 'q6': {'yes': 0.1, 'no': 0}, |
|
'q7': {'yes': 0.1, 'no': 0}, 'q8': {'yes': 0.1, 'no': 0}, 'q9': {'yes': 0.1, 'no': 0}, |
|
'q10': {'yes': 0.1, 'no': 0}, 'q11': {'yes': 0.5, 'no': 0}, 'q12': {'yes': 0.7, 'no': 0}, |
|
'q13': {'yes': 0.5, 'no': 0}, 'q14': {'yes': 0.5, 'no': 0}, 'q15': {'yes': 0.5, 'no': 0}, |
|
'q16': {'yes': 0.5, 'no': 0}, 'q17': {'yes': 0.7, 'no': 0}, 'q18': {'yes': 0.7, 'no': 0}, |
|
'q19': {'yes': 0.7, 'no': 0}, 'q20': {'yes': 0.7, 'no': 0}, 'q21': {'yes': 0.7, 'no': 0}, |
|
'q22': {'yes': 0.7, 'no': 0}, 'q23': {'yes': 0.7, 'no': 0}, 'q24': {'yes': 0.7, 'no': 0}, |
|
'q25': {'yes': 0.7, 'no': 0}, 'q26': {'yes': 0.7, 'no': 0}, 'q27': {'yes': 0.9, 'no': 0}, |
|
'q28': {'yes': 0.9, 'no': 0}, 'q29': {'yes': 0.9, 'no': 0}, 'q30': {'yes': 0.9, 'no': 0}, |
|
'q31': {'yes': 1, 'no': 0}, 'q32': {'yes': 1, 'no': 0}, 'q33': {'yes': 1, 'no': 0} |
|
} |
|
|
|
|
|
responses_df = pd.DataFrame(columns=["Name", "ID", "Predicted Risk Level"]) |
|
|
|
|
|
def predict_from_form(name, id_number, *responses): |
|
global responses_df |
|
try: |
|
|
|
processed_data = [yes_no_mapping[f'q{i+1}'][response.lower()] for i, response in enumerate(responses)] |
|
input_data = pd.DataFrame([processed_data], columns=[f'q{i+1}' for i in range(len(responses))]) |
|
|
|
|
|
predictions = model.predict(input_data) |
|
predicted_class = predictions.argmax(axis=1)[0] |
|
|
|
|
|
new_entry = {"Name": name or "N/A", "ID": id_number or "N/A", "Predicted Risk Level": classes[predicted_class]} |
|
responses_df = pd.concat([responses_df, pd.DataFrame([new_entry])], ignore_index=True) |
|
|
|
return f"Prediction for {name or 'Anonymous'}: {classes[predicted_class]}" |
|
except Exception as e: |
|
return f"Error: {e}" |
|
|
|
|
|
def view_responses(): |
|
if responses_df.empty: |
|
return "No responses recorded yet." |
|
return responses_df |
|
|
|
|
|
def download_responses(): |
|
file_path = "results.csv" |
|
try: |
|
|
|
responses_df.to_csv(file_path, index=False) |
|
print(f"Responses saved to {file_path}") |
|
return file_path |
|
except Exception as e: |
|
return f"Error saving file: {e}" |
|
|
|
|
|
|
|
form_inputs = [ |
|
gr.Textbox(label="Name (Optional)"), gr.Textbox(label="ID (Optional)") |
|
] |
|
form_inputs.extend([ |
|
gr.Radio(["Yes", "No"], |
|
label="Is your age less than 18 years?", |
|
info="**Select 'Yes' if you are under 18. Otherwise, select 'No'.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Are you Male?", |
|
info="**Select 'Yes' if you identify as male. Otherwise, select 'No'.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have financial concerns been a source of stress for you or your family?", |
|
info="**This includes challenges like debt, job loss, tuition fees, or difficulty covering daily expenses.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Are you currently living alone, and unsatisfied with your living situation?", |
|
info="**Select 'Yes' if you live alone and feel unhappy or unsupported in your environment.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Are you living in a hostel or dormitory and unsatisfied with your living situation?", |
|
info="**Select 'Yes' if you live in shared accommodations like a hostel or dorm and feel unhappy.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Do you feel like you are pursuing your current path mainly because of your family’s expectations?", |
|
info="**This includes academic, career, or personal decisions made primarily to satisfy family expectations.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been feeling disappointed with your performance recently?", |
|
info="**This applies to academic, professional, or personal performance where you feel dissatisfied with yourself.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Do you feel like your family is unhappy with your performance or choices?", |
|
info="**Consider whether you feel judged or unsupported by your family for academic, professional, or personal reasons.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Are there several problems in your family, or is your family environment very stressful?", |
|
info="**This includes frequent arguments, lack of support, or other issues causing emotional stress at home.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Does your family not support your decisions or choices?", |
|
info="**Select 'Yes' if your family has expressed disapproval of significant life choices like career or relationships.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you recently experienced a breakup?", |
|
info="**This includes the end of romantic relationships or close friendships.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you ever suffered from any mental illness in the past or are you currently suffering?", |
|
info="**This includes diagnosed or undiagnosed conditions like depression, anxiety, or PTSD.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Is there any history of psychiatric illness in your family?", |
|
info="**Consider conditions like depression, bipolar disorder, or anxiety disorders among close family members.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Has any close family member recently or in the past committed suicide?", |
|
info="**Select 'Yes' if you've lost a family member to suicide.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Has any close friend recently committed suicide?", |
|
info="**Select 'Yes' if you've lost a friend or close acquaintance to suicide.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Are you suffering from any medical illness like diabetes, asthma, hypertension, or other chronic illness?", |
|
info="**This includes long-term physical health conditions that might impact your mental well-being.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you found yourself using alcohol, drugs, or online gaming to cope with stress recently?", |
|
info="**This includes any substance or behavior used to escape stress or emotions.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you ever experienced any form of abuse?", |
|
info="**This includes physical, emotional, sexual, or verbal abuse at any stage of life.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been feeling emotionally numb or disconnected over the past few days?", |
|
info="**Consider whether you've felt detached from emotions, others, or reality recently.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Are you feeling very sad or anxious over the last few days?", |
|
info="**This includes persistent feelings of sadness, worry, or unease.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been feeling hurt or embarrassed by things others have said recently?", |
|
info="**Consider if recent comments or actions from others have affected your emotional well-being.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been feeling trapped in your current situation?", |
|
info="**Select 'Yes' if you've felt unable to escape a stressful or challenging situation.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been feeling particularly lonely over the past few days?", |
|
info="**Consider whether you've felt isolated or without companionship recently.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been feeling uncertain or hopeless about your future?", |
|
info="**Select 'Yes' if you've felt unsure or negative about what lies ahead.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you lost interest in things you usually enjoy over the past few days?", |
|
info="**This includes hobbies, activities, or relationships that normally bring you happiness.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been struggling with sleep recently, either finding it hard to fall asleep or stay asleep?", |
|
info="**This includes difficulty falling asleep, staying asleep, or waking up too early.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have thoughts about hurting yourself crossed your mind?", |
|
info="**Select 'Yes' if you've had any thoughts about self-harm, even if fleeting.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you felt like life has been overwhelming recently?", |
|
info="**Consider whether you've felt unable to manage daily stressors effectively.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been feeling a lack of motivation or desire to keep going in life?", |
|
info="**This includes a general sense of apathy or disinterest in life.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been feeling like hurting yourself recently?", |
|
info="**Select 'Yes' if you've had persistent or recent thoughts about self-harm.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been searching online for information related to suicide?", |
|
info="**Select 'Yes' if you've researched suicide methods or related topics online.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you been feeling so distressed that you’ve considered or planned how to end your life?", |
|
info="**Select 'Yes' if you've had specific thoughts or plans about ending your life.**"), |
|
|
|
gr.Radio(["Yes", "No"], |
|
label="Have you previously had moments where you tried to harm yourself or end your life?", |
|
info="**Select 'Yes' if you've attempted self-harm or suicide in the past.**"), |
|
]) |
|
|
|
import gradio as gr |
|
|
|
|
|
interface = gr.TabbedInterface( |
|
[ |
|
|
|
gr.Interface( |
|
fn=predict_from_form, |
|
inputs=form_inputs, |
|
outputs="text", |
|
title="PsyRiskAI – AI-Based Assessment of 33 Mental Health Risk Factors", |
|
description=( |
|
"### Instructions\n" |
|
"1. **For Individual Users**: Use a unique and special name instead of your real name to maintain privacy.\n" |
|
"2. **For Administrators/Mental Health Professionals**: Assign a unique special ID to each individual to ensure confidentiality, particularly for mass screenings.\n" |
|
"3. **Mass Screening**: Share the following link with all participants: " |
|
"[Self-Harm Risk Evaluator](https://huggingface.co/spaces/drvikasgaur/Self-Harm-Risk-Evaluator). " |
|
"Participants can complete the questionnaire anytime or simultaneously. Results are instantly analyzed and securely accessible by administrators.\n" |
|
"4. Respond to all 33 questions by selecting **'Yes'** or **'No'**. **All questions must be answered to generate a result.**\n" |
|
"5. **Click 'Submit'**: The result will be displayed immediately in the output section. Please scroll up again to output section to view the result.\n\n" |
|
"**Your responses will be analyzed using a deep learning model (Artificial Neural Network) to determine the predicted risk level.**" |
|
), |
|
article=( |
|
"### Disclaimer\n" |
|
"**This application is for educational purposes only and is not a substitute for professional medical advice, diagnosis, or treatment.** " |
|
"Always seek advice from a psychiatrist or qualified health provider regarding any psychiatric or medical condition.\n\n" |
|
"**If you are in crisis or think you may have an emergency, contact a doctor or emergency services immediately.**" |
|
), |
|
|
|
), |
|
|
|
|
|
gr.Interface( |
|
fn=view_responses, |
|
inputs=None, |
|
outputs="dataframe", |
|
title="View All Responses", |
|
description=( |
|
"### Instructions\n" |
|
"1. **For Administrators / Mental Health Professionals:** Use this section to view all recorded responses and their predicted risk levels.\n" |
|
"2. Responses are stored only for this session and will not persist after the app is closed." |
|
), |
|
), |
|
|
|
|
|
gr.Interface( |
|
fn=download_responses, |
|
inputs=None, |
|
outputs=gr.File(label="Download Results"), |
|
title="Download Results", |
|
description=( |
|
"### Instructions\n" |
|
"1. **For Administrators / Mental Health Professionals:** Use this section to download all recorded responses as a CSV file.\n" |
|
"2. **Click Generate**: This will allow you to save and analyze the data offline." |
|
), |
|
), |
|
], |
|
tab_names=["Manual Form Submission", "View All Responses", "Download Results"], |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
interface.launch() |
|
|
|
|
|
|
|
|