mentalmood / app.py
Deepakiitm's picture
Upload 5 files
3a9ef45 verified
Raw
History Blame Contribute Delete
3.9 kB
import streamlit as st
import joblib as j
import re as rg
from nltk.stem import PorterStemmer
import speech_recognition as sr
import os
import gdown
import joblib as j
'''
model_file = 'random_forest_model.pkl'
model_url = 'https://drive.google.com/uc?id=1suMJ0qgG5-oLhm_Jmyy7sst_myuiI2zg'
if not os.path.exists(model_file):
print("Model file not found. Downloading from Google Drive...")
gdown.download(model_url, model_file, quiet=False)
else:
print("Model file found. Proceeding to load.")
model = j.load(model_file)
'''
# -----------------------------------------------------------
# 1) Load Vectorizer & Model
# -----------------------------------------------------------
vectorizer = j.load('tfidf_vectorizer.pkl')
model = j.load('random_forest_model.pkl')
pt = PorterStemmer()
# -----------------------------------------------------------
# 2) Preprocessing Function
# -----------------------------------------------------------
def preprocessing(text):
text = rg.sub('[^a-zA-Z0-9\\s]', '', text.lower())
words = [pt.stem(word) for word in text.split()]
return " ".join(words)
# -----------------------------------------------------------
# 3) Prediction Function
# -----------------------------------------------------------
def predict(text):
preprocessed_text = preprocessing(text)
vector = vectorizer.transform([preprocessed_text])
return model.predict(vector)[0]
# -----------------------------------------------------------
# 4) Speech Recognition
# -----------------------------------------------------------
def recognize_speech():
recognizer = sr.Recognizer()
with sr.Microphone() as source:
st.write("Listening... Please speak now.")
try:
audio = recognizer.listen(source, timeout=5)
text = recognizer.recognize_google(audio)
return text
except sr.WaitTimeoutError:
st.write("Listening timed out while waiting for phrase to start.")
except sr.UnknownValueError:
st.write("Sorry, could not understand the audio.")
except sr.RequestError as e:
st.write(f"Could not request results from Google Speech Recognition service; {e}")
return ""
# -----------------------------------------------------------
# 5) Set up Session State
# -----------------------------------------------------------
# Initialize a key in session_state to store spoken text
if "spoken_text" not in st.session_state:
st.session_state["spoken_text"] = ""
# -----------------------------------------------------------
# 6) Streamlit UI
# -----------------------------------------------------------
st.title("Mental Health Sentiment Analysis")
# Radio for input method
input_option = st.radio("Choose input method:", ("Type Text", "Speak Text"))
if input_option == "Type Text":
# Use a local variable for typed text
input_text = st.text_area("Enter text for sentiment analysis:")
if st.button("Predict"):
if input_text.strip():
result = predict(input_text)
st.write(f"Predicted Sentiment: {result}")
else:
st.write("Please enter some text.")
elif input_option == "Speak Text":
# Display what is currently stored in session_state
if st.session_state["spoken_text"]:
st.write(f"You said: {st.session_state['spoken_text']}")
# Button to start recording
if st.button("Start Recording"):
recognized = recognize_speech()
if recognized:
st.session_state["spoken_text"] = recognized
st.write(f"You said: {recognized}")
# Button to predict
if st.button("Predict"):
if st.session_state["spoken_text"].strip():
result = predict(st.session_state["spoken_text"])
st.write(f"Predicted Sentiment: {result}")
else:
st.write("Please record some speech first.")