mrifat commited on
Commit
bd16f42
·
verified ·
1 Parent(s): dc0ba93

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -38
app.py CHANGED
@@ -3,63 +3,88 @@ from PIL import Image
3
  import numpy as np
4
  import cv2
5
  from deepface import DeepFace
 
6
 
7
  # --- পেজ কনফিগারেশন ---
8
- st.set_page_config(page_title="Face Analyzer", layout="centered")
9
 
10
  # --- মূল ইন্টারফেস ---
11
- st.title("🔍 AI Face Analyzer")
12
- st.write("আপলোড করা ছবিতে মুখ বিশ্লেষণ করে বয়স, লিঙ্গ, এবং আবেগ বের করা হয়।")
13
  st.write("---")
14
 
 
 
 
 
 
 
 
 
 
 
15
  uploaded_file = st.file_uploader("📤 একটি ছবি আপলোড করুন", type=["jpg", "png", "jpeg"])
16
 
17
  if uploaded_file is not None:
18
  try:
19
- # ছবিটি ওপেন এবং ডিসপ্লে করা
20
- image = Image.open(uploaded_file)
21
- st.image(image, caption="আপলোড করা ছবি", use_column_width=True)
 
 
 
22
 
23
  # ইমেজটিকে OpenCV ফরম্যাটে রূপান্তর করা
24
  img_array = np.array(image.convert("RGB"))
25
  img_bgr = cv2.cvtColor(img_array, cv2.COLOR_RGB2BGR)
26
 
27
- st.write("---")
28
- # DeepFace দিয়ে বিশ্লেষণ করা
29
- with st.spinner("মুখ বিশ্লেষণ করা হচ্ছে... অনুগ্রহ করে অপেক্ষা করুন।"):
30
- # enforce_detection=False দিলে মুখ খুঁজে না পেলে এরর দেবে না
31
- results = DeepFace.analyze(img_path=img_bgr, actions=['age', 'gender', 'emotion'], enforce_detection=False)
 
 
 
 
32
 
33
- # ফলাফল চেক এবং প্রদর্শন
34
- if results and isinstance(results, list) and len(results) > 0:
35
- # প্রথম মুখটির ফলাফল নেওয়া
36
- result = results[0]
37
-
38
- # জেন্ডাএবং ইমোশন অনুবাদ কর
39
- gender = "পুরুষ (Male)" if result.get('dominant_gender') == 'Man' else "মহিলা (Female)"
40
- emotion_map = {
41
- 'angry': 'রাগান্বিত (Angry) 😠',
42
- 'disgust': 'বি্ত (Disgust) 🤢',
43
- 'fear': 'ভীত (Fear) 😨',
44
- 'happy': 'খুশি (Happy) 😊',
45
- 'sad': 'দুঃখিত (Sad) 😢',
46
- 'surprise': 'অবাক (Surprise) 😮',
47
- 'neutral': 'নিরপেক্ষ (Neutral) 😐'
48
- }
49
- emotion = emotion_map.get(result.get('dominant_emotion'), result.get('dominant_emotion').capitalize())
 
 
 
 
 
 
 
 
 
 
 
 
 
50
 
51
- st.subheader("📊 বিশ্লেষণ ফলাফল:")
52
- st.markdown(f"""
53
- - **👤 আনুমানিক বয়স:** {result.get('age', 'N/A')}
54
- - **🚻 লিঙ্গ:** {gender}
55
- - **😊 প্রধান আবেগ:** {emotion}
56
- """)
57
- else:
58
- st.warning("⚠️ দুঃখিত, এই ছবিতে কোনো মুখ খুঁজে পাওয়া যায়নি। অনুগ্রহ করে অন্য একটি ছবি চেষ্টা করুন।")
59
 
60
  except Exception as e:
61
  st.error(f"❌ একটি অপ্রত্যাশিত সমস্যা হয়েছে: {e}")
62
- st.info("অ্যাপটি রিবুট করার চষ্টা করুন অথবা একটি অন্য ছবি আপলোড করন।")
63
 
64
  else:
65
- st.info("শুরু করতে, পরেরক্স্যবহার কএকটি ছবি আপলোড করুন।")
 
3
  import numpy as np
4
  import cv2
5
  from deepface import DeepFace
6
+ import pandas as pd
7
 
8
  # --- পেজ কনফিগারেশন ---
9
+ st.set_page_config(page_title="Advanced Face Analyzer", layout="wide")
10
 
11
  # --- মূল ইন্টারফেস ---
12
+ st.title("🔍 Advanced AI Face Analyzer")
13
+ st.write("আপলোড করা ছবিতে মুখ বিশ্লেষণ করে বয়স, লিঙ্গ, এবং বিভিন্ন মডেল ব্যবহার করে আবেগ বের করা হয়।")
14
  st.write("---")
15
 
16
+ # --- সাইডবার ---
17
+ st.sidebar.header("⚙️ সেটিংস")
18
+ # বিভিন্ন মডেল থেকে বেছে নেওয়ার অপশন
19
+ emotion_model = st.sidebar.selectbox(
20
+ "আবেগ বিশ্লেষণের জন্য একটি মডেল বেছে নিন:",
21
+ ("VGG-Face", "Facenet", "DeepFace", "ArcFace", "Dlib"),
22
+ index=2 # ডিফল্ট হিসেবে 'DeepFace' মডেল
23
+ )
24
+
25
+ # --- ফাইল আপলোডার ---
26
  uploaded_file = st.file_uploader("📤 একটি ছবি আপলোড করুন", type=["jpg", "png", "jpeg"])
27
 
28
  if uploaded_file is not None:
29
  try:
30
+ col1, col2 = st.columns(2)
31
+
32
+ with col1:
33
+ # ছবিটি ওপেন এবং ডিসপ্লে করা
34
+ image = Image.open(uploaded_file)
35
+ st.image(image, caption="আপলোড করা ছবি", use_column_width=True)
36
 
37
  # ইমেজটিকে OpenCV ফরম্যাটে রূপান্তর করা
38
  img_array = np.array(image.convert("RGB"))
39
  img_bgr = cv2.cvtColor(img_array, cv2.COLOR_RGB2BGR)
40
 
41
+ with col2:
42
+ # DeepFace দিয়ে বিশ্লেষণ করা
43
+ with st.spinner(f"`{emotion_model}` ডেল ব্যবহার করে মুখ বিশ্লেষণ করা হচ্ছে..."):
44
+ results = DeepFace.analyze(
45
+ img_path=img_bgr,
46
+ actions=['age', 'gender', 'emotion'],
47
+ models={'emotion': emotion_model}, # ইউজারের বেছে নেওয়া মডেল ব্যবহার
48
+ enforce_detection=False
49
+ )
50
 
51
+ # ফলাফল চেক এবং প্রদর্শন
52
+ if results and isinstance(results, list) and len(results) > 0:
53
+ result = results[0]
54
+
55
+ # জেন্ডার অনুবাদ
56
+ gender = "পুুষ (Male)" if result.get('dominant_gender') == 'Man' else "মহিল (Female)"
57
+
58
+ st.subheader("📊 বিশ্লেষণ ফলাফল:")
59
+ st.markdown(f"""
60
+ - **👤 আনুমানিক বয়স:** `{result.get('age', 'N/A')}`
61
+ - **🚻 লিঙ্গ:** `{gender}`
62
+ - **😊 প্রধান আবেগ:** `{result.get('dominant_emotion', 'N/A').capitalize()}`
63
+ """)
64
+
65
+ st.write("---")
66
+
67
+ # আবেগের বিস্তারিত স্কোর দেখানো
68
+ st.subheader("ემოციების დეტალური ანალიზი (Emotion Score Details):")
69
+ emotion_scores = result.get('emotion', {})
70
+ if emotion_scores:
71
+ # DataFrame তৈরি করা
72
+ df_emotions = pd.DataFrame(emotion_scores.items(), columns=['আবেগ (Emotion)', 'স্কোর (Score %)'
73
+ ])
74
+ df_emotions['স্কোর (Score %)'] = df_emotions['স্কোর (Score %)'].round(2)
75
+
76
+ # বার চার্ট দেখানো
77
+ st.dataframe(df_emotions.style.highlight_max(subset=['স্কোর (Score %)'], color='lightgreen'))
78
+ st.bar_chart(df_emotions.set_index('আবেগ (Emotion)'))
79
+ else:
80
+ st.write("আবেগের বিস্তারিত স্কোর পাওয়া যায়নি।")
81
 
82
+ else:
83
+ st.warning("⚠️ দুঃখিত, এই ছবিতে কোনো মুখ খুঁজে পাওয়া যায়নি।")
 
 
 
 
 
 
84
 
85
  except Exception as e:
86
  st.error(f"❌ একটি অপ্রত্যাশিত সমস্যা হয়েছে: {e}")
87
+ st.info("অ্য মড বা অন্য ছবি চেষ্টা করে দেখতে পারেন।")
88
 
89
  else:
90
+ st.info("শুরু করতে, একটি ছবি আলোড কুন সাইডবার থেকে সেটিংস পরিবর্তন করুন।")