music_recomendation / index.html
manikarthik1's picture
Upload 3 files
57e5e1c verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Real-time Emotion Detection</title>
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600&display=swap" rel="stylesheet">
<style>
:root {
--primary-color: #6C63FF;
--secondary-color: #4CAF50;
--background-color: #f8f9fa;
--text-color: #333;
--card-background: #ffffff;
--shadow-color: rgba(0, 0, 0, 0.1);
}
body {
font-family: 'Poppins', sans-serif;
color: var(--text-color);
margin: 0;
padding: 0;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
background-color: #f3f4f6;
background-image:
radial-gradient(at 47% 33%, hsl(262.00, 83%, 91%) 0, transparent 59%),
radial-gradient(at 82% 65%, hsl(218.00, 39%, 91%) 0, transparent 55%);
}
.container {
max-width: 700px;
width: 100%;
padding: 2rem;
box-sizing: border-box;
}
h1 {
font-size: 2.5rem;
font-weight: 600;
color: var(--primary-color);
margin-bottom: 2rem;
text-align: center;
}
.video-container {
background-color: var(--card-background);
border-radius: 12px;
overflow: hidden;
box-shadow: 0 10px 20px var(--shadow-color);
transition: transform 0.3s ease;
}
.video-container:hover {
transform: translateY(-5px);
}
img {
display: block;
max-width: 100%;
height: auto;
}
#music-recommendations {
margin-top: 2rem;
background-color: var(--card-background);
border-radius: 12px;
padding: 1.5rem;
box-shadow: 0 10px 20px var(--shadow-color);
}
#music-recommendations h2 {
color: var(--primary-color);
font-size: 1.5rem;
margin-bottom: 1rem;
}
#recommendations-list {
list-style: none;
padding: 0;
}
#recommendations-list li {
background-color: rgba(255, 255, 255, 0.7);
margin: 0.5rem 0;
padding: 0.75rem 1rem;
border-radius: 6px;
font-size: 0.9rem;
transition: background-color 0.3s ease;
}
#recommendations-list li:hover {
background-color: rgba(255, 255, 255, 0.9);
}
#music-player {
margin-top: 2rem;
width: 100%;
}
button {
background-color: var(--primary-color);
color: white;
border: none;
padding: 0.75rem 1.5rem;
font-size: 1rem;
border-radius: 30px;
cursor: pointer;
transition: background-color 0.3s ease, transform 0.2s ease;
margin-top: 2rem;
font-weight: 600;
box-shadow: 0 4px 6px var(--shadow-color);
align-self: center;
/* Center the button */
}
button:hover {
background-color: #5753e0;
transform: translateY(-2px);
}
@media (max-width: 768px) {
.container {
padding: 1rem;
}
h1 {
font-size: 2rem;
}
button {
width: 100%;
}
}
</style>
</head>
<body>
<div class="container">
<h1>Real-time Emotion Detection</h1>
<div class="video-container">
<img src="{{ url_for('video_feed') }}" alt="Real-time emotion detection feed">
</div>
<div id="music-recommendations">
<h2>Music Recommendations</h2>
<ul id="recommendations-list"></ul>
</div>
<div id="music-player"></div>
<button onclick="fetchAndPlayMusic()">Get Recommendations & Play</button>
</div>
<script>
async function fetchRecommendations() {
try {
const response = await fetch('/get_music_recommendation');
const data = await response.json();
const recommendationsList = document.getElementById('recommendations-list');
recommendationsList.innerHTML = '';
data.recommendations.forEach(song => {
const li = document.createElement('li');
li.textContent = song;
recommendationsList.appendChild(li);
});
} catch (error) {
console.error('Error fetching recommendations:', error);
}
}
async function playMusic() {
try {
const response = await fetch('/play_music');
const data = await response.json();
console.log('Video URL:', data.video_url);
if (data.video_url) {
window.open(data.video_url, '_blank');
}
} catch (error) {
console.error('Error playing music:', error);
}
}
async function fetchAndPlayMusic() {
await fetchRecommendations();
await playMusic();
}
</script>
</body>
</html>