Spaces:
Sleeping
Sleeping
import os | |
import uuid | |
import logging | |
from flask import Flask, flash, render_template, request, jsonify, url_for | |
from flask.templating import TemplateNotFound | |
from flask_cors import CORS | |
from modules import Module | |
from emotion_data import emotion_data | |
model = Module() | |
app = Flask(__name__) | |
CORS(app) | |
app.secret_key = "Testing" | |
app.config['STATIC_FOLDER'] = 'static' | |
emotion_categories = { | |
"admiration": "soothieanduplift", | |
"amusement": "soothieanduplift", | |
"anger": "distractandchange", | |
"annoyance": "distractandchange", | |
"approval": "soothieanduplift", | |
"caring": "soothieanduplift", | |
"confusion": "engageandexplore", | |
"curiosity": "engageandexplore", | |
"desire": "engageandexplore", | |
"disappointment": "reflectiveandunderstand", | |
"disapproval": "distractandchange", | |
"disgust": "distractandchange", | |
"embarrassment": "distractandchange", | |
"excitement": "energeticandmotivate", | |
"fear": "distractandchange", | |
"gratitude": "soothieanduplift", | |
"grief": "reflectiveandunderstand", | |
"joy": "energeticandmotivate", | |
"love": "soothieanduplift", | |
"nervousness": "distractandchange", | |
"optimism": "energeticandmotivate", | |
"pride": "energeticandmotivate", | |
"realization": "engageandexplore", | |
"relief": "soothieanduplift", | |
"remorse": "reflectiveandunderstand", | |
"sadness": "reflectiveandunderstand", | |
"surprise": "engageandexplore", | |
"neutral": "soothieanduplift" | |
} | |
def index(): | |
return render_template('index.html') | |
def audio_to_text(): | |
return render_template('audio_to_text.html') | |
def audio(): | |
if request.method == 'POST': | |
try: | |
output_file = f"./tmp/{uuid.uuid4()}.wav" | |
open(output_file, 'wb').write(request.data) | |
text, emotion = model.predict(audio_path=output_file) | |
os.remove(output_file) | |
predicted_category = emotion_categories.get(emotion, "defaultcategory") | |
return jsonify({ | |
"url": url_for(predicted_category, text=text, emotion=emotion) | |
}) | |
print("Predicted Category:", predicted_category) # Print predicted category | |
print("Text:", text) # Print predicted text | |
print("Emotion:", emotion) # Print predicted emotion | |
logging.info("Predicted Category: %s", predicted_category) | |
logging.info("Text: %s", text) | |
logging.info("Emotion: %s", emotion) | |
return jsonify({"url": url_for(predicted_category)}) | |
except (FileNotFoundError, TemplateNotFound) as e: | |
logging.error(e) | |
return jsonify({"error": "Template file not found."}), 404 | |
except Exception as e: | |
logging.error(e) | |
return jsonify({"error": "An error occurred"}), 500 | |
elif request.method == 'GET': | |
return jsonify({"message": "This route only accepts POST requests."}), 405 | |
def reflectiveandunderstand(): | |
text = request.args.get('text', '') # Get predicted text | |
emotion = request.args.get('emotion', '') # Get predicted emotion | |
if emotion in emotion_data: | |
emotionInfo = emotion_data[emotion] | |
return render_template('reflectiveandunderstand.html', text=text, emotion=emotion, emotionInfo=emotionInfo) | |
else: | |
return jsonify({"error": "Emotion not found"}), 404 | |
def distractandchange(): | |
text = request.args.get('text', '') # Get predicted text | |
emotion = request.args.get('emotion', '') # Get predicted emotion | |
if emotion in emotion_data: | |
emotionInfo = emotion_data[emotion] | |
return render_template('distractandchange.html', text=text, emotion=emotion, emotionInfo=emotionInfo) | |
else: | |
return jsonify({"error": "Emotion not found"}), 404 | |
def energeticandmotivate(): | |
text = request.args.get('text', '') # Get predicted text | |
emotion = request.args.get('emotion', '') # Get predicted emotion | |
if emotion in emotion_data: | |
emotionInfo = emotion_data[emotion] | |
return render_template('energeticandmotivate.html', text=text, emotion=emotion, emotionInfo=emotionInfo) | |
else: | |
return jsonify({"error": "Emotion not found"}), 404 | |
def engageandexplore(): | |
text = request.args.get('text', '') # Get predicted text | |
emotion = request.args.get('emotion', '') # Get predicted emotion | |
if emotion in emotion_data: | |
emotionInfo = emotion_data[emotion] | |
return render_template('engageandexplore.html', text=text, emotion=emotion, emotionInfo=emotionInfo) | |
else: | |
return jsonify({"error": "Emotion not found"}), 404 | |
# Add more routes as needed, mirroring your category names | |
def soothieanduplift(): | |
text = request.args.get('text', '') # Get predicted text | |
emotion = request.args.get('emotion', '') # Get predicted emotion | |
if emotion in emotion_data: | |
emotionInfo = emotion_data[emotion] | |
return render_template('soothieanduplift.html', text=text, emotion=emotion, emotionInfo=emotionInfo) | |
else: | |
return jsonify({"error": "Emotion not found"}), 404 | |
# Add more routes as needed, mirroring your category names | |
if __name__ == "__main__": | |
# Configure logging for Hugging Face environment | |
logging.basicConfig(level=logging.DEBUG) | |
app.run(debug=True, port=7860, host='0.0.0.0') | |