ESMATUGBA commited on
Commit
727ac17
·
verified ·
1 Parent(s): 11b76a8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -23
app.py CHANGED
@@ -16,7 +16,8 @@ def load_data():
16
  model_data = load_data()
17
  movie_dict = model_data['movie_dict'] if model_data else {}
18
 
19
- # --- 2. OYUNCU DNA VERİTABANI (Sıralama Stallone ile başlar) ---
 
20
  tum_unlu_verileri = {
21
  "Sylvester Stallone": {"c": "Male / Erkek", "v": [0.9, 0.2, 0.1, 0.1, 0.1, 0.8]},
22
  "Robert De Niro": {"c": "Male / Erkek", "v": [0.2, 0.1, 0.1, 0.9, 0.1, 0.8]},
@@ -74,63 +75,80 @@ def get_image_path(actor_name):
74
  return os.path.join(ana_dizin, f)
75
  return None
76
 
77
- # --- SOL PANEL ---
78
- st.sidebar.title("🔍 Control Panel")
79
  st.sidebar.markdown("---")
80
- gender_choice = st.sidebar.radio("Kategori Seçin:", ["Male / Erkek", "Female / Kadın"])
81
 
82
- # Sıralamayı bozmadan (Stallone ilk sırada) filtreleme
 
 
 
 
 
83
  filtered_names = [name for name in tum_unlu_verileri.keys() if tum_unlu_verileri[name]['c'] == gender_choice]
84
 
 
 
 
 
85
  # --- ANA EKRAN ---
86
- st.title("🎬 CastMatch AI")
 
87
  st.markdown("---")
88
 
89
  col_actor, col_match = st.columns([1, 2])
90
 
91
  with col_actor:
92
- st.subheader("👤 Oyuncu Seç")
93
  options = ["Choose... / Seçiniz..."] + filtered_names
94
- selected_actor = st.selectbox("Listeden seçin:", options)
95
 
96
- # Titreme önleyici resim alanı
97
- image_container = st.container()
98
  if selected_actor != "Choose... / Seçiniz...":
99
  path = get_image_path(selected_actor)
100
  if path:
101
- image_container.image(path, use_container_width=True)
 
 
102
  else:
103
- image_container.info("Lütfen bir oyuncu seçin.")
104
 
105
  with col_match:
106
- st.subheader("🎯 Kariyer Eşleşmeleri")
 
107
 
108
- if st.button("🚀 Eşleştir ve Öner"):
109
  if selected_actor == "Choose... / Seçiniz...":
110
- st.warning("Önce oyuncu seçmelisiniz!")
111
  elif movie_dict:
112
  actor_v = tum_unlu_verileri[selected_actor]['v']
113
  results = []
114
 
115
  for i in movie_dict:
116
- # 1. Mesafe hesapla
117
  dist = spatial.distance.cosine(actor_v, movie_dict[i][1][:6])
118
 
119
- # 2. Skor hatalarını engelle (0-1 arasına sabitle)
120
  dist = max(0, min(1, dist))
121
 
122
- # 3. Minik noise ekle (sıralama için)
123
  noise = random.uniform(0, 0.00001)
124
  results.append((movie_dict[i][0], dist + noise))
125
 
126
- # 4. Mesafeye göre en yakınları (en küçükleri) seç
127
  top_matches = sorted(results, key=lambda x: x[1])[:5]
128
 
129
  for i, (film, score) in enumerate(top_matches, 1):
130
- # Doğru Yüzde Hesabı: (1 - mesafe) * 100
131
  pct = (1 - score) * 100
132
- pct = max(0, min(100, pct)) # %0-100 dışına asla çıkamaz
 
133
 
134
  st.success(f"**{i}. {film}**")
135
- st.write(f"Uyum Skoru: **%{pct:.1f}**")
136
- st.progress(pct / 100)
 
 
 
 
 
 
16
  model_data = load_data()
17
  movie_dict = model_data['movie_dict'] if model_data else {}
18
 
19
+ # --- 2. OYUNCU DNA VERİTABANI ---
20
+ # Sıralama Stallone ile başlar
21
  tum_unlu_verileri = {
22
  "Sylvester Stallone": {"c": "Male / Erkek", "v": [0.9, 0.2, 0.1, 0.1, 0.1, 0.8]},
23
  "Robert De Niro": {"c": "Male / Erkek", "v": [0.2, 0.1, 0.1, 0.9, 0.1, 0.8]},
 
75
  return os.path.join(ana_dizin, f)
76
  return None
77
 
78
+ # --- SOL PANEL (BİLGİLER BURADA) ---
79
+ st.sidebar.title("🔍 Control Panel / Kontrol Paneli")
80
  st.sidebar.markdown("---")
 
81
 
82
+ gender_choice = st.sidebar.radio(
83
+ "1. Select Category / Kategori Seçin:",
84
+ ["Male / Erkek", "Female / Kadın"]
85
+ )
86
+
87
+ # Oyuncu listesi (Alfabetik değil, Stallone başa gelecek şekilde filtreleme)
88
  filtered_names = [name for name in tum_unlu_verileri.keys() if tum_unlu_verileri[name]['c'] == gender_choice]
89
 
90
+ st.sidebar.markdown(f"### 📋 Available Cast / Mevcut Oyuncular")
91
+ for n in filtered_names:
92
+ st.sidebar.write(f"• {n}")
93
+
94
  # --- ANA EKRAN ---
95
+ st.title("🎬 CastMatch AI: Talent Matching System / Yetenek Eşleştirme Sistemi")
96
+ st.markdown("#### Discover the perfect roles for global stars! / Dünya yıldızları için en ideal rolleri keşfedin!")
97
  st.markdown("---")
98
 
99
  col_actor, col_match = st.columns([1, 2])
100
 
101
  with col_actor:
102
+ st.subheader("👤 Pick an Actor / Oyuncu Seç")
103
  options = ["Choose... / Seçiniz..."] + filtered_names
104
+ selected_actor = st.selectbox("Select from list / Listeden seçin:", options)
105
 
106
+ # Brad Pitt ve diğerlerinde titremeyi önlemek için alanı ayırıyoruz
 
107
  if selected_actor != "Choose... / Seçiniz...":
108
  path = get_image_path(selected_actor)
109
  if path:
110
+ st.image(path, caption=f"Profile: {selected_actor}", use_container_width=True)
111
+ else:
112
+ st.warning(f"⚠️ Resim bulunamadı: {selected_actor}")
113
  else:
114
+ st.info("Please select an actor to see the profile. / Profili görmek için bir oyuncu seçin.")
115
 
116
  with col_match:
117
+ st.subheader("🎯 Best Career Matches / En İyi Kariyer Eşleşmeleri")
118
+ st.write("Comparing the star's DNA with movie roles... / Yıldızın DNA'sı film rolleriyle karşılaştırılıyor...")
119
 
120
+ if st.button("🚀 Match and Recommend / Eşleştir ve Öner"):
121
  if selected_actor == "Choose... / Seçiniz...":
122
+ st.warning("Please pick an actor first! / Lütfen önce bir oyuncu seçin!")
123
  elif movie_dict:
124
  actor_v = tum_unlu_verileri[selected_actor]['v']
125
  results = []
126
 
127
  for i in movie_dict:
128
+ # Orijinal vektör analizi
129
  dist = spatial.distance.cosine(actor_v, movie_dict[i][1][:6])
130
 
131
+ # 11.5 skoru hatasını engellemek için mesafeyi 0-1 arasına hapsediyoruz
132
  dist = max(0, min(1, dist))
133
 
134
+ # Sıralama kararlılığı için minik bir gürültü
135
  noise = random.uniform(0, 0.00001)
136
  results.append((movie_dict[i][0], dist + noise))
137
 
138
+ # En iyi 5 eşleşmeyi (en küçük mesafe) al
139
  top_matches = sorted(results, key=lambda x: x[1])[:5]
140
 
141
  for i, (film, score) in enumerate(top_matches, 1):
142
+ # Skoru % cinsinden hesapla: (1 - mesafe) * 100
143
  pct = (1 - score) * 100
144
+ # %0-%100 arası kalmasını garanti et
145
+ pct = max(0, min(100, pct))
146
 
147
  st.success(f"**{i}. {film}**")
148
+ st.write(f"Match Score / Uyum Skoru: **%{pct:.1f}**")
149
+ st.progress(pct / 100)
150
+ else:
151
+ st.error("Model dosyası eksik!")
152
+
153
+ st.markdown("---")
154
+ st.info("💡 **How it works? / Nasıl çalışır?**: This AI analyzes career vectors based on available local assets. / Bu yapay zeka kariyer vektörlerini analiz eder.")