Spaces:
Runtime error
Runtime error
File size: 2,950 Bytes
13a538d |
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 |
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from contextlib import asynccontextmanager
from dotenv import load_dotenv
import base64
import requests
import os
## APPLICATION LIFESPAN
# Load the environment variables using FastAPI lifespan event so that they are available throughout the application
@asynccontextmanager
async def lifespan(app: FastAPI):
# Load the environment variables
load_dotenv()
yield
## FASTAPI APP
# Initialize the FastAPI app
app = FastAPI(lifespan=lifespan)
## PYDANTIC MODELS
# Define a Voice Pydantic model for the request body
class Voice(BaseModel):
audio_content: str
## FUNCTIONS
# Function to encode the audio
def encode_audio(audio_content):
return base64.b64encode(audio_content.encode()).decode('utf-8')
# Function to detect emotion and generate emojis
def detect_emotion_and_generate_emoji(audio_content):
try:
# Get the base64 string
base64_audio = encode_audio(audio_content)
# Make a request to the emotion detection API
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {os.environ['EMOTION_API_KEY']}"
}
payload = {
"audio_content": base64_audio
}
response = requests.post("https://api.emotion-analysis.com/detect", headers=headers, json=payload)
response_data = response.json()
# Process the emotion data and generate emojis
# Assuming the response_data contains the detected emotion (e.g., "happy", "sad", "angry", etc.)
# You would write logic here to map emotions to emojis
# For demonstration, let's assume we have a function to generate emojis based on detected emotion
emojis = generate_emojis(response_data['emotion'])
return emojis
except Exception as e:
# Handle errors
raise HTTPException(status_code=500, detail=str(e))
# Function to generate emojis based on detected emotion
def generate_emojis(emotion):
# This is just a placeholder function
# You would replace this with your actual logic to generate emojis based on the detected emotion
if emotion == "happy":
return "😊😄🥳"
elif emotion == "sad":
return "😢😔😞"
elif emotion == "angry":
return "😡😤🤬"
else:
return "😐🤔😶"
## FASTAPI ENDPOINTS
## POST - /detect_emotion
# Detect emotion from voice content and generate emojis
@app.post("/detect_emotion")
async def detect_emotion(voice: Voice):
try:
# Call the function to detect emotion and generate emojis
emojis = detect_emotion_and_generate_emoji(voice.audio_content)
return emojis
except Exception as e:
# Handle errors
raise HTTPException(status_code=500, detail=str(e)) |