Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from PIL import Image | |
| import numpy as np | |
| import cv2 | |
| from deepface import DeepFace | |
| import pandas as pd | |
| # --- পেজ কনফিগারেশন --- | |
| st.set_page_config(page_title="Advanced Face Analyzer", layout="wide") | |
| # --- মূল ইন্টারফেস --- | |
| st.title("🔍 Advanced AI Face Analyzer") | |
| st.write("আপলোড করা ছবিতে মুখ বিশ্লেষণ করে বয়স, লিঙ্গ, এবং বিভিন্ন মডেল ব্যবহার করে আবেগ বের করা হয়।") | |
| st.write("---") | |
| # --- সাইডবার --- | |
| st.sidebar.header("⚙️ সেটিংস") | |
| # বিভিন্ন মডেল থেকে বেছে নেওয়ার অপশন | |
| emotion_model = st.sidebar.selectbox( | |
| "আবেগ বিশ্লেষণের জন্য একটি মডেল বেছে নিন:", | |
| ("VGG-Face", "Facenet", "DeepFace", "ArcFace", "Dlib"), | |
| index=2 # ডিফল্ট হিসেবে 'DeepFace' মডেল | |
| ) | |
| # --- ফাইল আপলোডার --- | |
| uploaded_file = st.file_uploader("📤 একটি ছবি আপলোড করুন", type=["jpg", "png", "jpeg"]) | |
| if uploaded_file is not None: | |
| try: | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| # ছবিটি ওপেন এবং ডিসপ্লে করা | |
| image = Image.open(uploaded_file) | |
| st.image(image, caption="আপলোড করা ছবি", use_column_width=True) | |
| # ইমেজটিকে OpenCV ফরম্যাটে রূপান্তর করা | |
| img_array = np.array(image.convert("RGB")) | |
| img_bgr = cv2.cvtColor(img_array, cv2.COLOR_RGB2BGR) | |
| with col2: | |
| # DeepFace দিয়ে বিশ্লেষণ করা | |
| with st.spinner(f"`{emotion_model}` মডেল ব্যবহার করে মুখ বিশ্লেষণ করা হচ্ছে..."): | |
| results = DeepFace.analyze( | |
| img_path=img_bgr, | |
| actions=['age', 'gender', 'emotion'], | |
| models={'emotion': emotion_model}, # ইউজারের বেছে নেওয়া মডেল ব্যবহার | |
| enforce_detection=False | |
| ) | |
| # ফলাফল চেক এবং প্রদর্শন | |
| if results and isinstance(results, list) and len(results) > 0: | |
| result = results[0] | |
| # জেন্ডার অনুবাদ | |
| gender = "পুরুষ (Male)" if result.get('dominant_gender') == 'Man' else "মহিলা (Female)" | |
| st.subheader("📊 বিশ্লেষণ ফলাফল:") | |
| st.markdown(f""" | |
| - **👤 আনুমানিক বয়স:** `{result.get('age', 'N/A')}` | |
| - **🚻 লিঙ্গ:** `{gender}` | |
| - **😊 প্রধান আবেগ:** `{result.get('dominant_emotion', 'N/A').capitalize()}` | |
| """) | |
| st.write("---") | |
| # আবেগের বিস্তারিত স্কোর দেখানো | |
| st.subheader("ემოციების დეტალური ანალიზი (Emotion Score Details):") | |
| emotion_scores = result.get('emotion', {}) | |
| if emotion_scores: | |
| # DataFrame তৈরি করা | |
| df_emotions = pd.DataFrame(emotion_scores.items(), columns=['আবেগ (Emotion)', 'স্কোর (Score %)' | |
| ]) | |
| df_emotions['স্কোর (Score %)'] = df_emotions['স্কোর (Score %)'].round(2) | |
| # বার চার্ট দেখানো | |
| st.dataframe(df_emotions.style.highlight_max(subset=['স্কোর (Score %)'], color='lightgreen')) | |
| st.bar_chart(df_emotions.set_index('আবেগ (Emotion)')) | |
| else: | |
| st.write("আবেগের বিস্তারিত স্কোর পাওয়া যায়নি।") | |
| else: | |
| st.warning("⚠️ দুঃখিত, এই ছবিতে কোনো মুখ খুঁজে পাওয়া যায়নি।") | |
| except Exception as e: | |
| st.error(f"❌ একটি অপ্রত্যাশিত সমস্যা হয়েছে: {e}") | |
| st.info("অন্য মডেল বা অন্য ছবি চেষ্টা করে দেখতে পারেন।") | |
| else: | |
| st.info("শুরু করতে, একটি ছবি আপলোড করুন এবং সাইডবার থেকে সেটিংস পরিবর্তন করুন।") |