Rutson commited on
Commit
1e8ae02
·
verified ·
1 Parent(s): 8f710eb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -14
app.py CHANGED
@@ -1,23 +1,60 @@
1
  import streamlit as st
2
  import pandas as pd
3
- # Aqui depois vamos colocar a lógica da API do Spotify
4
- # Por enquanto, é a estrutura da nossa interface
5
 
 
6
  st.set_page_config(page_title="DNA Sonoro", page_icon="🎵")
7
 
8
  st.title("🎵 DNA Sonoro: Recomendação por Vibe")
9
- st.markdown("Chega de recomendações genéricas. Digite uma música e vamos achar o 'esqueleto' acústico dela.")
10
 
11
- song_name = st.text_input("Qual música você tem na cabeça agora?", placeholder="Ex: My Dear - Chen")
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
- if song_name:
14
- st.write(f"Analisando a estrutura de '{song_name}'...")
15
- # Aqui o código vai buscar os Audio Features e comparar
16
- st.info("Buscando B-sides e raridades com a mesma pegada acústica...")
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
- # Exemplo de como os resultados vão aparecer
19
- col1, col2 = st.columns(2)
20
- with col1:
21
- st.success("Recomendação 1: Focada em Timbre")
22
- with col2:
23
- st.success("Recomendação 2: Focada em Melancolia")
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import pandas as pd
3
+ from sklearn.preprocessing import StandardScaler
4
+ from sklearn.neighbors import NearestNeighbors
5
 
6
+ # Configuração da página
7
  st.set_page_config(page_title="DNA Sonoro", page_icon="🎵")
8
 
9
  st.title("🎵 DNA Sonoro: Recomendação por Vibe")
10
+ st.markdown("Chega de recomendações por marketing. Digite uma música e vamos achar o 'esqueleto' acústico dela.")
11
 
12
+ # Base de Dados Exemplo (DNA das Músicas)
13
+ # Em um projeto maior, carregaríamos um CSV com 100k músicas aqui.
14
+ @st.cache_data
15
+ def load_data():
16
+ data = {
17
+ 'name': ['My Dear', 'Love Shot', 'Dynamite', 'Blue Hour', 'Growl', 'Seven', 'Ditto', 'Perfect Night'],
18
+ 'artist': ['Chen', 'EXO', 'BTS', 'TXT', 'EXO', 'Jungkook', 'NewJeans', 'LE SSERAFIM'],
19
+ # DNA: [Danceability, Energy, Acousticness, Valence]
20
+ 'danceability': [0.4, 0.8, 0.7, 0.6, 0.7, 0.7, 0.6, 0.6],
21
+ 'energy': [0.3, 0.9, 0.8, 0.7, 0.8, 0.8, 0.5, 0.7],
22
+ 'acousticness': [0.8, 0.1, 0.0, 0.1, 0.1, 0.1, 0.7, 0.2],
23
+ 'valence': [0.3, 0.7, 0.9, 0.6, 0.7, 0.8, 0.4, 0.5]
24
+ }
25
+ return pd.DataFrame(data)
26
 
27
+ df = load_data()
28
+
29
+ # Preparação dos dados para a IA
30
+ features = ['danceability', 'energy', 'acousticness', 'valence']
31
+ scaler = StandardScaler()
32
+ df_scaled = scaler.fit_transform(df[features])
33
+
34
+ # Treinando o modelo de vizinhos mais próximos
35
+ model = NearestNeighbors(n_neighbors=3, metric='euclidean')
36
+ model.fit(df_scaled)
37
+
38
+ # Interface de Busca
39
+ target_song = st.text_input("Qual música você tem na cabeça agora?", placeholder="Ex: My Dear - Chen")
40
+
41
+ if target_song:
42
+ # Busca simples pelo nome
43
+ match = df[df['name'].str.contains(target_song.split(' - ')[0], case=False, na=False)]
44
 
45
+ if not match.empty:
46
+ idx = match.index[0]
47
+ st.write(f"🧬 **DNA Identificado:** {df.iloc[idx]['name']} ({df.iloc[idx]['artist']})")
48
+
49
+ # Encontrando similares
50
+ distances, indices = model.kneighbors([df_scaled[idx]])
51
+
52
+ st.subheader("Sugestões com DNA próximo:")
53
+ for i in indices[0]:
54
+ if i != idx:
55
+ st.write(f"✨ **{df.iloc[i]['name']}** — {df.iloc[i]['artist']}")
56
+ st.caption(f"Vibe similar em {(1 - distances[0][1])*100:.1f}%")
57
+ else:
58
+ st.error("Ainda não tenho essa música no meu banco de dados. Tente uma das sugestões acima!")
59
+
60
+ st.info("💡 Este é o motor inicial. No próximo passo, vamos conectar uma base de dados com 1 milhão de músicas.")