Spaces:
Runtime error
Runtime error
File size: 2,488 Bytes
edc4276 01e4bba c4d5407 401d1a7 62a9143 d69f584 01e4bba 1b42e45 d69f584 6955253 edc4276 d69f584 c4d5407 577a126 d69f584 c4d5407 577a126 edc4276 577a126 edc4276 577a126 d69f584 577a126 d69f584 01e4bba d69f584 577a126 d69f584 577a126 d69f584 577a126 d69f584 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
import streamlit as st
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing.sequence import pad_sequences
import joblib
import pandas as pd
import numpy as np
try:
import sklearn
st.write("scikit-learn is installed.")
except ImportError:
st.error("scikit-learn is not installed.")
# Load your emotion prediction model
emotion_model = load_model('lstm_model.h5')
# Load the KNN recommender model
#recommender_model = joblib.load('knn_model.pkl')
# Load the KNN recommender model
try:
recommender_model = joblib.load('knn_model.pkl')
except Exception as e:
st.error(f"Error loading model: {e}")
# Load the tokenizer (ensure it's the one used during training)
# tokenizer = joblib.load('tokenizer.pkl') # Update this to the correct path
# Load the dataset
df = pd.read_csv('df1.csv') # Ensure this is the correct DataFrame
# Set up the title of the app
st.title('Emotion and Audio Feature-based Song Recommendation System')
# Input field for lyrics
st.header('Enter Song Lyrics')
lyrics = st.text_area("Input the lyrics of the song here:")
# Input fields for audio features
st.header('Enter Audio Features')
audio_features = []
for feature_name in df.columns: # Ensure this matches your DataFrame's structure
feature = st.number_input(f"Enter value for {feature_name}:", step=0.01)
audio_features.append(feature)
# Predict and Recommend button
if st.button('Predict Emotion and Recommend Songs'):
if lyrics and all(audio_features):
# Process the lyrics
sequence = tokenizer.texts_to_sequences([lyrics])
padded_sequence = pad_sequences(sequence, maxlen=128)
emotion = emotion_model.predict(padded_sequence).flatten()
# Combine emotion and audio features for recommendation
combined_features = np.concatenate([emotion, audio_features]) # Ensure the concatenation logic matches your model's expectation
# Generate recommendations using the KNN model
distances, indices = recommender_model.kneighbors([combined_features], n_neighbors=5)
recommended_songs = df.iloc[indices.flatten()]
# Display emotion and recommendations
st.write("Emotion Detected:", emotion[0]) # Adjust as per your model's output
st.header('Recommended Songs')
for _, song in recommended_songs.iterrows():
st.write(song) # Customize this to display relevant song info
else:
st.error("Please fill in all the fields.") |