File size: 2,891 Bytes
e1d89e6
 
e436a2e
e1d89e6
 
 
 
4a17310
 
e1d89e6
4a17310
e436a2e
4a17310
d9c2f6c
4a17310
e1d89e6
 
 
 
 
 
 
 
 
 
 
 
 
4a17310
e436a2e
4a17310
 
 
 
 
 
 
e1d89e6
e436a2e
 
 
 
 
 
 
 
e1d89e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e436a2e
4a17310
e1d89e6
 
 
 
 
 
e436a2e
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import os
import requests
import streamlit as st
from transformers import pipeline
from PIL import Image
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

# Set up the Hugging Face API URL and your API key
API_URL = "https://api-inference.huggingface.co/models/trpakov/vit-face-expression"
headers = {"Authorization": f"Bearer {os.getenv('HUGGINGFACE_API_KEY')}"}

# Function to query the Hugging Face model for facial expression
def query(filename):
    with open(filename, "rb") as f:
        data = f.read()
    response = requests.post(API_URL, headers=headers, data=data)
    
    if response.status_code == 200:
        return response.json()
    else:
        st.error("Error detecting facial expression: " + response.text)
        return None

# Function to generate a joke or uplifting text based on the mood
def generate_text_based_on_mood(emotion):
    try:
        # Use GPT-Neo model for text generation
        generator = pipeline('text-generation', model='EleutherAI/gpt-neo-125M')
        prompt = f"Tell a joke that would cheer someone who is feeling {emotion}."
        response = generator(prompt, max_length=50, num_return_sequences=1)
        return response[0]['generated_text']
    except Exception as e:
        st.error(f"Error generating text: {e}")
        return "Sorry, I couldn't come up with a joke at this moment."

# Function to convert text to speech using gTTS
def text_to_speech(text):
    from gtts import gTTS
    tts = gTTS(text, lang='en')
    audio_file = "output.mp3"
    tts.save(audio_file)  # Save the audio file
    return audio_file

# Streamlit UI
st.title("Facial Expression Mood Detector")
st.write("Upload an image of a face to detect mood and receive uplifting messages or jokes.")

# Upload image
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])

if uploaded_file is not None:
    # Load and display the image
    image = Image.open(uploaded_file)
    st.image(image, caption='Uploaded Image', use_column_width=True)

    # Save the uploaded file temporarily
    with open("uploaded_image.jpg", "wb") as f:
        f.write(uploaded_file.getbuffer())

    # Detect facial expression
    expression_output = query("uploaded_image.jpg")
    if expression_output:
        # Assuming the response has a 'label' field with the detected emotion
        emotion = expression_output[0]['label']  # Adjust based on response structure
        st.write(f"Detected emotion: {emotion}")

        # Generate text based on detected emotion
        joke = generate_text_based_on_mood(emotion)
        st.write("Here's something to cheer you up:")
        st.write(joke)

        # Convert the generated joke to audio
        audio_file = text_to_speech(joke)

        # Provide an audio player in the Streamlit app
        st.audio(audio_file)  # Streamlit will handle playback