CTP_HW9 / app.py
Lucasstranger1's picture
Update app.py
59ec3b4 verified
raw
history blame
2.58 kB
import os
import streamlit as st
import requests
from gtts import gTTS
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):
generator = pipeline('text-generation', model='gpt2')
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']
# Function to convert text to speech using gTTS
def text_to_speech(text):
tts = gTTS(text, lang='en')
tts.save("output.mp3") # Save to a file
return "output.mp3" # Return the filename for playing
# 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:
emotion = expression_output[0]['label'] # Adjust as per the actual 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