Spaces:
Running
Running
File size: 3,400 Bytes
e1d89e6 c884652 e436a2e e1d89e6 3e57df9 e1d89e6 4a17310 e1d89e6 3e57df9 acaac68 4a17310 d9c2f6c c884652 acaac68 3e57df9 e1d89e6 3e57df9 e1d89e6 a1b1b7f e1d89e6 4a17310 a1b1b7f 3e57df9 edbb580 3e57df9 c884652 edbb580 c884652 edbb580 c884652 4a17310 a1b1b7f e1d89e6 e436a2e dc26248 ceb1369 e436a2e e1d89e6 edbb580 e1d89e6 3e57df9 |
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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
import os
import requests
import openai
import streamlit as st
from PIL import Image
from dotenv import load_dotenv
import torch
from transformers import AutoProcessor, AutoModelForImageClassification
# Load environment variables from .env file
load_dotenv()
# Set up the Hugging Face API for emotion detection
emotion_model_url = "https://api-inference.huggingface.co/models/trpakov/vit-face-expression"
headers = {"Authorization": f"Bearer {os.getenv('HUGGINGFACE_API_KEY')}"}
# Set up OpenAI API key
openai.api_key = os.getenv('OPENAI_API_KEY')
# Function to query the facial expression recognition model
def query_emotion(image):
# Load the processor and model
processor = AutoProcessor.from_pretrained("trpakov/vit-face-expression")
model = AutoModelForImageClassification.from_pretrained("trpakov/vit-face-expression")
# Preprocess the image
inputs = processor(images=image, return_tensors="pt")
# Perform inference
with torch.no_grad():
outputs = model(**inputs)
# Get predicted class index
logits = outputs.logits
predicted_class_idx = torch.argmax(logits, dim=-1).item()
# Get the predicted label
predicted_label = processor.decode(predicted_class_idx)
return predicted_label
# Function to generate a response using OpenAI based on detected emotion
def generate_text_based_on_mood(emotion):
try:
# Create a dynamic prompt based on the detected emotion
prompt = f"Generate a light-hearted joke or motivational message for someone who is feeling {emotion}."
# Call OpenAI's API using GPT-4
response = openai.ChatCompletion.create(
model="gpt-4", # Specify the GPT-4 model
messages=[
{"role": "user", "content": prompt}
]
)
# Extract the generated text
generated_text = response['choices'][0]['message']['content']
return generated_text.strip()
except Exception as e:
st.error(f"Error generating text: {e}")
return "Sorry, I couldn't come up with a message at this moment."
# Function to convert text to speech using gTTS
def text_to_speech(text):
from gtts import gTTS
try:
tts = gTTS(text, lang='en')
audio_file = "output.mp3"
tts.save(audio_file) # Save the audio file
return audio_file
except Exception as e:
st.error(f"Error with TTS: {e}")
return None
# 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)
# Detect facial expression
emotion = query_emotion(image)
st.write(f"Detected emotion: {emotion}")
# Generate text based on detected emotion
message = generate_text_based_on_mood(emotion)
st.write("Here's something to cheer you up:")
st.write(message)
# Convert the generated message to audio
audio_file = text_to_speech(message)
# Provide an audio player in the Streamlit app if audio file exists
if audio_file:
st.audio(audio_file) # Streamlit will handle playback
|