ESMATUGBA commited on
Commit
3ba034d
·
verified ·
1 Parent(s): bbb64cd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -42
app.py CHANGED
@@ -16,7 +16,7 @@ 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 ---
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]},
@@ -60,7 +60,6 @@ tum_unlu_verileri = {
60
  # --- ARAYÜZ AYARLARI ---
61
  st.set_page_config(page_title="CastMatch AI", layout="wide")
62
 
63
- # RESİM CACHE (TİTREMEYİ ÖNLER)
64
  @st.cache_data
65
  def get_image_path(actor_name):
66
  if not actor_name or actor_name == "Choose... / Seçiniz...":
@@ -76,71 +75,62 @@ def get_image_path(actor_name):
76
  return None
77
 
78
  # --- SOL PANEL ---
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
- # SIRALAMAYI BOZMADAN FİLTRELEME (Stallone ilk sırada kalır)
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!")
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
-
104
- # "Choose..." seçeneği en başa, ardından veritabanındaki sıra (Stallone 1. sırada)
105
  options = ["Choose... / Seçiniz..."] + filtered_names
106
- selected_actor = st.selectbox("Select from list / Listeden seçin:", options)
107
-
108
- image_placeholder = st.empty() # Titremeyi önleyen konteyner
109
 
 
 
110
  if selected_actor != "Choose... / Seçiniz...":
111
- found_path = get_image_path(selected_actor)
112
- if found_path:
113
- image_placeholder.image(found_path, caption=f"Profile: {selected_actor}", use_container_width=True)
114
- else:
115
- image_placeholder.warning(f"⚠️ Resim bulunamadı: {selected_actor}")
116
  else:
117
- image_placeholder.info("Please select an actor to see the profile.")
118
 
119
  with col_match:
120
- st.subheader("🎯 Best Career Matches / En İyi Kariyer Eşleşmeleri")
121
- st.write("Comparing the star's DNA with movie roles...")
122
 
123
- if st.button("🚀 Match and Recommend / Eşleştir ve Öner"):
124
  if selected_actor == "Choose... / Seçiniz...":
125
- st.warning("Please pick an actor first!")
126
  elif movie_dict:
127
  actor_v = tum_unlu_verileri[selected_actor]['v']
128
  results = []
 
129
  for i in movie_dict:
130
- # Saf Cosine Similarity - Tüm kişiler için eşit matematik
131
  dist = spatial.distance.cosine(actor_v, movie_dict[i][1][:6])
132
- results.append((movie_dict[i][0], dist))
 
 
 
 
 
 
133
 
134
- # En iyi 5 eşleşmeyi getir (Küçük mesafe = Yüksek uyum)
135
  top_matches = sorted(results, key=lambda x: x[1])[:5]
136
 
137
  for i, (film, score) in enumerate(top_matches, 1):
138
- pct = round((1 - score) * 100, 1)
 
 
 
139
  st.success(f"**{i}. {film}**")
140
- st.write(f"Match Score: **%{pct}**")
141
- st.progress(pct / 100)
142
- else:
143
- st.error("Model dosyası eksik!")
144
-
145
- st.markdown("---")
146
- st.info("💡 **How it works?**: This AI analyzes career vectors based on available local assets.")
 
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]},
 
60
  # --- ARAYÜZ AYARLARI ---
61
  st.set_page_config(page_title="CastMatch AI", layout="wide")
62
 
 
63
  @st.cache_data
64
  def get_image_path(actor_name):
65
  if not actor_name or actor_name == "Choose... / Seçiniz...":
 
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)