ESMATUGBA commited on
Commit
9c011d2
·
verified ·
1 Parent(s): e457956

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -103
app.py CHANGED
@@ -1,109 +1,22 @@
1
- import streamlit as st
2
- import pickle
3
- from scipy.spatial.distance import cosine
4
- import os
5
 
6
- # -------------------------------
7
- # 1. MODELİ YÜKLE
8
- # -------------------------------
9
- @st.cache_resource
10
- def load_data():
11
- try:
12
- with open('movie_model.pkl', 'rb') as f:
13
- return pickle.load(f)
14
- except:
15
- return None
16
 
17
- model_data = load_data()
18
- movie_dict = model_data['movie_dict'] if model_data else {}
19
 
20
- # -------------------------------
21
- # 2. AKTÖR DNA VERİLERİ
22
- # -------------------------------
23
- actors = {
24
- "Sylvester Stallone": {"gender": "Male", "vec": [0.9,0.2,0.1,0.1,0.1,0.8]},
25
- "Robert De Niro": {"gender": "Male", "vec": [0.2,0.1,0.1,0.9,0.1,0.8]},
26
- "Johnny Depp": {"gender": "Male", "vec": [0.1,0.9,0.8,0.4,0.1,0.1]},
27
- "Jason Statham": {"gender": "Male", "vec": [0.95,0.3,0.1,0.1,0.1,0.7]},
28
- "Keanu Reeves": {"gender": "Male", "vec": [0.9,0.4,0.1,0.2,0.9,0.6]},
29
- "Angelina Jolie": {"gender": "Female", "vec": [0.9,0.7,0.1,0.8,0.1,0.6]},
30
- "Scarlett Johansson": {"gender": "Female", "vec": [0.9,0.6,0.2,0.7,0.8,0.5]},
31
- "Meryl Streep": {"gender": "Female", "vec": [0.1,0.1,0.4,0.95,0.1,0.1]},
32
- "Jennifer Lawrence": {"gender": "Female", "vec": [0.7,0.8,0.3,0.9,0.4,0.2]}
33
- }
34
 
35
- # -------------------------------
36
- # 3. RESİM KLASÖRÜ
37
- # -------------------------------
38
- image_folder = "40 resim"
39
 
40
- def get_actor_image(name):
41
- if not os.path.exists(image_folder):
42
- return None
43
- for f in os.listdir(image_folder):
44
- if name.lower().replace(" ", "_") in f.lower():
45
- return os.path.join(image_folder, f)
46
- return None
47
-
48
- # -------------------------------
49
- # 4. STREAMLIT UI
50
- # -------------------------------
51
- st.set_page_config(page_title="CastMatch AI", layout="wide")
52
-
53
- st.title("🎬 CastMatch AI")
54
- st.markdown("### Actor → Movie Matching System")
55
- st.markdown("Oyuncuya en uygun filmi bulur / Finds best movie for actor")
56
-
57
- # Sidebar
58
- gender = st.sidebar.radio("Select Gender / Cinsiyet", ["Male", "Female"])
59
-
60
- filtered = [a for a in actors if actors[a]["gender"] == gender]
61
-
62
- actor_name = st.selectbox("Choose Actor / Oyuncu Seç", filtered)
63
-
64
- col1, col2 = st.columns(2)
65
-
66
- # -------------------------------
67
- # 5. AKTÖR GÖSTER
68
- # -------------------------------
69
- with col1:
70
- st.subheader("Actor / Oyuncu")
71
-
72
- img_path = get_actor_image(actor_name)
73
- if img_path:
74
- st.image(img_path, use_container_width=True)
75
  else:
76
- st.warning("Image not found")
77
-
78
- # -------------------------------
79
- # 6. ÖNERİ SİSTEMİ
80
- # -------------------------------
81
- with col2:
82
- st.subheader("Best Matches / En İyi Eşleşmeler")
83
-
84
- if st.button("Recommend / Öner"):
85
- if not movie_dict:
86
- st.error("Model bulunamadı!")
87
- else:
88
- actor_vec = actors[actor_name]["vec"]
89
-
90
- results = []
91
-
92
- for i in movie_dict:
93
- movie_vec = movie_dict[i][1][:6]
94
-
95
- # COSINE DISTANCE (DAHA STABİL)
96
- dist = cosine(actor_vec, movie_vec)
97
-
98
- # SCORE (0-100)
99
- score = (1 - dist) * 100
100
-
101
- results.append((movie_dict[i][0], score))
102
-
103
- # EN İYİ 5
104
- results = sorted(results, key=lambda x: x[1], reverse=True)[:5]
105
-
106
- for i, (movie, score) in enumerate(results, 1):
107
- st.write(f"### {i}. {movie}")
108
- st.write(f"Score: %{round(score,2)}")
109
- st.progress(score / 100)
 
1
+ if st.button("🚀 Match and Recommend / Eşleştir ve Öner") and selected_actor != "Yok":
2
+ if movie_dict:
3
+ actor_v = unlu_verileri[selected_actor]['v']
4
+ results = []
5
 
6
+ for i in movie_dict:
7
+ dist = spatial.distance.cosine(actor_v, movie_dict[i][1][:6])
 
 
 
 
 
 
 
 
8
 
9
+ # skor = benzerlik yüzdesi
10
+ score = (1 - dist) * 100
11
 
12
+ results.append((movie_dict[i][0], score))
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
+ top_matches = sorted(results, key=lambda x: x[1], reverse=True)[:5]
 
 
 
15
 
16
+ for i, (film, score) in enumerate(top_matches, 1):
17
+ pct = round(score, 1)
18
+ st.success(f"**{i}. {film}**")
19
+ st.write(f"Match Score / Uyum Skoru: **%{pct}**")
20
+ st.progress(pct / 100)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  else:
22
+ st.error("Model dosyası eksik! / Model file missing!")