UPDRS_API / routers /analyze_router.py
UdasriHasindu
remove name from input fields
ac4efc7
Raw
History Blame Contribute Delete
2.22 kB
from fastapi import APIRouter, Form, File, UploadFile, HTTPException
from services.voice_analyze_service import process_audio_and_predict
router = APIRouter(
prefix="/analyze",
tags=["analyze"],
)
@router.post("/test")
async def test_endpoint(
age: int = Form(...),
sex: str = Form(...),
test_time: float = Form(...),
audio_file: UploadFile = File(...)):
return {
"received_data": {
"age": age,
"sex": sex,
"test_time": test_time,
"audio_file": {
"filename": audio_file.filename,
"content_type": audio_file.content_type,
"size": len(await audio_file.read()) if audio_file else 0
}
},
"status": "success"
}
@router.post("/voice")
async def analyze_voice(
age: int = Form(..., gt=10, lt=120),
sex: str = Form(..., pattern="^(male|female)$"),
test_time: float = Form(..., gt=0),
audio_file: UploadFile = File(...) ):
# for debugging
print("-" * 20)
print("RECEIVED REQUEST FROM FRONTEND:")
print(f"Age: {age}")
print(f"Sex: {sex}")
print(f"Test Time: {test_time}")
print(f"Audio File: {audio_file.filename} ")
print(f"Audio Content Type: {audio_file.content_type}")
# validation checks
if not audio_file or audio_file.filename == "":
print("---No audio file provided! ---")
raise HTTPException(status_code=400, detail="No audio file provided")
if audio_file.content_type and not audio_file.content_type.startswith(('audio/', 'application/octet-stream')):
print(f"Unusual content type: {audio_file.content_type}")
print("-" * 20)
basic_info = {"age": age, "sex": sex, "test_time": test_time}
print(f"Basic info being passed to service: {basic_info}")
try:
result = await process_audio_and_predict(audio_file, basic_info)
print("\nSENDING RESPONSE TO FRONTEND:")
print(f"Response: {result}\n")
return result
except Exception as e:
print("=" * 50)
print("ERROR OCCURRED:")
print(f"Error: {str(e)}")
print(f"Error type: {type(e).__name__}\n")
raise e