Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import google.generativeai as genai | |
| import os | |
| from PIL import Image | |
| import cv2 | |
| from io import BytesIO | |
| import base64 | |
| from dotenv import load_dotenv | |
| import numpy as np | |
| from fer import FER | |
| load_dotenv() | |
| genai.configure(api_key=("AIzaSyC0E5Tcbp3V6LXmw0ZuD2ih_nJkBronHhw")) | |
| # gemini function for general content generation | |
| def get_gemini_response(input): | |
| try: | |
| model = genai.GenerativeModel('gemini-pro') | |
| response = model.generate_content(input) | |
| return response | |
| except Exception as e: | |
| st.error(f"Error: {e}") | |
| return None | |
| # Function to analyze image for depression and emotion detection using FER | |
| def detect_emotions(image): | |
| detector = FER(mtcnn=True) | |
| # Convert PIL Image to NumPy array | |
| image_np = np.array(image) | |
| emotions = detector.detect_emotions(image_np) | |
| if emotions: | |
| return emotions[0]['emotions'] | |
| return None | |
| # Function to analyze detected emotions with LLM | |
| def analyze_emotions_with_llm(emotions): | |
| emotion_analysis = ", ".join([f"{emotion}: {score:.2f}" for emotion, score in emotions.items()]) | |
| analysis_prompt = f""" | |
| ### As a mental health and emotional well-being expert, analyze the following detected emotions. | |
| ### Detected Emotions: | |
| {emotion_analysis} | |
| ### Analysis Output: | |
| 1. Identify any potential signs of depression based on the detected emotions. | |
| 2. Explain the reasoning behind your identification. | |
| 3. Provide recommendations for addressing any identified issues. | |
| """ | |
| response = get_gemini_response(analysis_prompt) | |
| return response | |
| # Function to capture live video frame for analysis | |
| def capture_video_frame(): | |
| video_capture = cv2.VideoCapture(0) | |
| ret, frame = video_capture.read() | |
| if ret: | |
| frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
| return Image.fromarray(frame_rgb) | |
| return None | |
| # Function to parse and display response content | |
| def display_response_content(response): | |
| st.subheader("Response Output") | |
| if response and response.candidates: | |
| response_content = response.candidates[0].content.parts[0].text if response.candidates[0].content.parts else "" | |
| sections = response_content.split('###') | |
| for section in sections: | |
| if section.strip(): | |
| section_lines = section.split('\n') | |
| section_title = section_lines[0].strip() | |
| section_body = '\n'.join(line.strip() for line in section_lines[1:] if line.strip()) | |
| if section_title: | |
| st.markdown(f"**{section_title}**") | |
| if section_body: | |
| st.write(section_body) | |
| else: | |
| st.write("No response received from the model or quota exceeded.") | |
| ## Streamlit App | |
| st.title("AI-Powered Depression and Emotion Detection System") | |
| st.text("Use the AI system for detecting depression and emotions from images and live video.") | |
| # Tabs for different functionalities | |
| tab1, tab2 = st.tabs(["Image Analysis", "Live Video Analysis"]) | |
| with tab1: | |
| st.header("Image Analysis") | |
| uploaded_file = st.file_uploader("Upload an image for analysis", type=["jpg", "jpeg", "png"], help="Please upload an image file.") | |
| submit_image = st.button('Analyze Image') | |
| if submit_image: | |
| if uploaded_file is not None: | |
| image = Image.open(uploaded_file) | |
| emotions = detect_emotions(image) | |
| if emotions: | |
| response = analyze_emotions_with_llm(emotions) | |
| # Parse and display response in a structured way | |
| display_response_content(response) | |
| else: | |
| st.write("No emotions detected in the image.") | |
| with tab2: | |
| st.header("Live Video Analysis") | |
| capture_frame = st.button('Capture and Analyze Frame') | |
| if capture_frame: | |
| image = capture_video_frame() | |
| if image is not None: | |
| emotions = detect_emotions(image) | |
| if emotions: | |
| response = analyze_emotions_with_llm(emotions) | |
| # Parse and display response in a structured way | |
| display_response_content(response) | |
| else: | |
| st.write("No emotions detected in the video frame.") | |
| else: | |
| st.write("Failed to capture video frame.") | |