import streamlit as st import pickle from scipy import spatial import os import glob # --- 1. MODELİ YÜKLE --- @st.cache_resource def load_data(): try: # Model dosyasını kontrol et if os.path.exists('movie_model.pkl'): with open('movie_model.pkl', 'rb') as f: return pickle.load(f) return None except: return None model_data = load_data() movie_dict = model_data['movie_dict'] if model_data else {} # --- 2. OYUNCU DNA VERİTABANI --- tum_unlu_verileri = { "Sylvester Stallone": {"c": "Male / Erkek", "v": [0.9, 0.2, 0.1, 0.1, 0.1, 0.8]}, "Robert De Niro": {"c": "Male / Erkek", "v": [0.2, 0.1, 0.1, 0.9, 0.1, 0.8]}, "Johnny Depp": {"c": "Male / Erkek", "v": [0.1, 0.9, 0.8, 0.4, 0.1, 0.1]}, "Jason Statham": {"c": "Male / Erkek", "v": [0.95, 0.3, 0.1, 0.1, 0.1, 0.7]}, "Keanu Reeves": {"c": "Male / Erkek", "v": [0.9, 0.4, 0.1, 0.2, 0.9, 0.6]}, "Brad Pitt": {"c": "Male / Erkek", "v": [0.7, 0.5, 0.3, 0.8, 0.2, 0.4]}, "Tom Cruise": {"c": "Male / Erkek", "v": [0.9, 0.8, 0.2, 0.1, 0.4, 0.5]}, "Anthony Hopkins": {"c": "Male / Erkek", "v": [0.1, 0.1, 0.1, 0.95, 0.1, 0.9]}, "Arnold Schwarzenegger": {"c": "Male / Erkek", "v": [0.95, 0.6, 0.2, 0.1, 0.8, 0.1]}, "Bruce Willis": {"c": "Male / Erkek", "v": [0.9, 0.2, 0.1, 0.3, 0.4, 0.7]}, "Christian Bale": {"c": "Male / Erkek", "v": [0.8, 0.2, 0.1, 0.9, 0.1, 0.7]}, "Tom Hanks": {"c": "Male / Erkek", "v": [0.2, 0.6, 0.5, 0.9, 0.1, 0.1]}, "Morgan Freeman": {"c": "Male / Erkek", "v": [0.1, 0.3, 0.1, 0.9, 0.1, 0.6]}, "Al Pacino": {"c": "Male / Erkek", "v": [0.2, 0.1, 0.1, 0.95, 0.1, 0.8]}, "Jackie Chan": {"c": "Male / Erkek", "v": [0.9, 0.7, 0.9, 0.1, 0.1, 0.1]}, "Denzel Washington": {"c": "Male / Erkek", "v": [0.8, 0.2, 0.1, 0.9, 0.1, 0.7]}, "Pierce Brosnan": {"c": "Male / Erkek", "v": [0.8, 0.7, 0.3, 0.4, 0.1, 0.6]}, "Leonardo DiCaprio": {"c": "Male / Erkek", "v": [0.3, 0.1, 0.1, 0.95, 0.1, 0.8]}, "Matt Damon": {"c": "Male / Erkek", "v": [0.8, 0.3, 0.2, 0.9, 0.2, 0.6]}, "Will Smith": {"c": "Male / Erkek", "v": [0.9, 0.6, 0.8, 0.5, 0.1, 0.2]}, "Angelina Jolie": {"c": "Female / Kadın", "v": [0.9, 0.7, 0.1, 0.8, 0.1, 0.6]}, "Natalie Portman": {"c": "Female / Kadın", "v": [0.3, 0.2, 0.1, 0.9, 0.6, 0.7]}, "Scarlett Johansson": {"c": "Female / Kadın", "v": [0.9, 0.6, 0.2, 0.7, 0.8, 0.5]}, "Charlize Theron": {"c": "Female / Kadın", "v": [0.8, 0.3, 0.1, 0.9, 0.2, 0.7]}, "Sandra Bullock": {"c": "Female / Kadın", "v": [0.2, 0.1, 0.9, 0.8, 0.1, 0.6]}, "Nicole Kidman": {"c": "Female / Kadın", "v": [0.1, 0.2, 0.1, 0.95, 0.1, 0.7]}, "Meryl Streep": {"c": "Female / Kadın", "v": [0.1, 0.1, 0.4, 0.95, 0.1, 0.1]}, "Anne Hathaway": {"c": "Female / Kadın", "v": [0.2, 0.7, 0.8, 0.8, 0.1, 0.1]}, "Julia Roberts": {"c": "Female / Kadın", "v": [0.1, 0.2, 0.9, 0.9, 0.1, 0.1]}, "Penelope Cruz": {"c": "Female / Kadın", "v": [0.2, 0.3, 0.6, 0.9, 0.1, 0.6]}, "Emma Watson": {"c": "Female / Kadın", "v": [0.1, 0.8, 0.2, 0.9, 0.6, 0.1]} } # --- ARAYÜZ AYARLARI --- st.set_page_config(page_title="CastMatch AI", layout="wide") # CSS: Titreme önleme ve resim sabitleme st.markdown(""" """, unsafe_allow_html=True) # --- SIDEBAR (YAN PANEL) --- st.sidebar.title("🔍 Control Panel / Kontrol Paneli") st.sidebar.markdown("---") gender_choice = st.sidebar.radio("1. Select Category / Kategori Seçin:", ["Male / Erkek", "Female / Kadın"]) filtered_names = sorted([name for name in tum_unlu_verileri.keys() if tum_unlu_verileri[name]['c'] == gender_choice]) st.sidebar.markdown(f"### 📋 Available Cast / Mevcut Oyuncular") for n in filtered_names: st.sidebar.write(f"• {n}") # --- ANA EKRAN --- st.title("🎬 CastMatch AI: Talent Matching System / Yetenek Eşleştirme Sistemi") st.markdown("---") col_actor, col_match = st.columns([1, 2]) with col_actor: st.subheader("👤 Pick an Actor / Oyuncu Seç") selected_actor = st.selectbox("Select from list / Listeden seçin:", ["Choose... / Seçiniz..."] + filtered_names) if selected_actor != "Choose... / Seçiniz...": # HEM LOKAL HEM HF İÇİN AKILLI DOSYA ARAMA found_path = None # Oyuncu isminin muhtemel dosya adı varyasyonları name_variants = [ selected_actor.replace(" ", "_").lower(), selected_actor.replace(" ", " ").lower(), selected_actor.lower() ] # Mevcut dizin ve tüm alt dizinlerdeki resimleri tara all_images = glob.glob("**/*.*", recursive=True) for img_path in all_images: if img_path.lower().endswith(('.jpg', '.png', '.jpeg')): for variant in name_variants: if variant in img_path.lower(): found_path = img_path break if found_path: break if found_path: st.image(found_path, use_container_width=False) else: st.warning(f"Image not found / Resim bulunamadı: {selected_actor}") st.markdown('
', unsafe_allow_html=True) else: st.markdown('