| from fastapi import FastAPI, File, UploadFile |
| from modelscope.pipelines import pipeline |
| from modelscope.utils.constant import Tasks |
| import numpy as np |
|
|
| app = FastAPI() |
|
|
| mapper = ["angry", "disgust", "fear", "happy", |
| "neutral", "other", "sad", "surprised", "unknown"] |
|
|
| inference_pipeline = pipeline( |
| task=Tasks.emotion_recognition, |
| model="iic/emotion2vec_base_finetuned", model_revision="v2.0.4") |
|
|
|
|
| @app.post("/emotion_recognition") |
| async def emotion_recognition(audio_file: UploadFile = File(...)): |
| audio_bytes = await audio_file.read() |
| rec_result = inference_pipeline( |
| audio_bytes, output_dir="./outputs", granularity="utterance", extract_embedding=False) |
| max_emotion_score = np.argmax(rec_result[0]["scores"]) |
| return { |
| "emotion": mapper[max_emotion_score], |
| "confidence":rec_result[0]["scores"][max_emotion_score] |
| } |
|
|