Spaces:
Running
Running
| from fastapi import File, UploadFile, APIRouter | |
| from audio.preprocessing import load_audio, extract_features | |
| from model.ecapa import ECAPAENCODER | |
| # from model.scorer import fatigue_score_0_to_100, prosody_score ## for prosody scoring | |
| from model.scorer import fatigue_score_0_to_100 | |
| from fastapi.responses import JSONResponse | |
| import numpy as np | |
| from utils.logger import logger | |
| from utils.file_utils import save_temp_audio | |
| from core.config import LOW_PERCENTILE, HIGH_PERCENTILE, FATIGUE_AXIS, REF_C_H, MAX_DURATION_SEC | |
| # from audio.feature_extractor import get_prosody_stats | |
| from fastapi import HTTPException, status | |
| from audio.validators import validate_audio_duration, validate_audio_file, AudioValidationError | |
| C_h = np.load(REF_C_H) | |
| fatigue_axis = np.load(FATIGUE_AXIS) | |
| low = float(np.load(LOW_PERCENTILE)["arr_0"]) | |
| high = float(np.load(HIGH_PERCENTILE)["arr_0"]) | |
| router = APIRouter() | |
| encoder = ECAPAENCODER() | |
| async def score_voice(file: UploadFile = File(...)): | |
| try: | |
| path = save_temp_audio(file) | |
| validate_audio_file( | |
| file_path=path, | |
| original_filename=file.filename | |
| ) | |
| wav = load_audio(path) | |
| # prosody_features = get_prosody_stats(wav) | |
| # p_score, report = prosody_score(prosody_features) | |
| features = extract_features(wav) | |
| wav = wav.squeeze() | |
| emb = encoder.encode(wav) | |
| score = float(fatigue_score_0_to_100(emb, C_h, fatigue_axis, low, high)) | |
| # return {"fatigue_score": score, "prosody_score": p_score, "prosody_report": report} | |
| return {"fatigue_score" : score} | |
| except AudioValidationError as e: | |
| logger.warning(str(e)) | |
| raise HTTPException( | |
| status_code= status.HTTP_400_BAD_REQUEST, | |
| detail = str(e) | |
| ) | |
| except Exception as e: | |
| logger.exception("Unexpected server error") | |
| raise HTTPException( | |
| status_code= status.HTTP_500_INTERNAL_SERVER_ERROR, | |
| detail = "Unexpected server error." | |
| ) |