vitorcalvi commited on
Commit
cec245f
·
1 Parent(s): 03548eb
Files changed (1) hide show
  1. app.py +17 -1
app.py CHANGED
@@ -7,6 +7,7 @@ import tempfile
7
  import os
8
  import warnings
9
  from pydub import AudioSegment
 
10
 
11
  warnings.filterwarnings("ignore")
12
 
@@ -52,7 +53,7 @@ def analyze_voice_stress(audio_file_path):
52
  z_energy = (mean_energy - norm_mean_energy) / norm_std_energy
53
  z_speech_rate = (speech_rate - norm_speech_rate) / norm_std_speech_rate
54
  stress_score = (0.4 * z_f0) + (0.4 * z_speech_rate) + (0.2 * z_energy)
55
- stress_level = float(1 / (1 + np.exp(-stress_score)) * 100)
56
  categories = ["Very Low Stress", "Low Stress", "Moderate Stress", "High Stress", "Very High Stress"]
57
  category_idx = min(int(stress_level / 20), 4)
58
  stress_category = categories[category_idx]
@@ -71,6 +72,9 @@ class StressResponse(BaseModel):
71
  stress_level: float
72
  category: str
73
  gender: str = None # Optional, only for audio analysis
 
 
 
74
 
75
  @app.post("/analyze-stress/", response_model=StressResponse)
76
  async def analyze_stress(
@@ -89,12 +93,14 @@ async def analyze_stress(
89
  with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(file.filename)[-1]) as temp_file:
90
  temp_file.write(await file.read())
91
  temp_audio_path = temp_file.name
 
92
  else:
93
  if not (file_path.endswith(".wav") or file_path.endswith(".mp3")):
94
  raise HTTPException(status_code=400, detail="Only .wav and .mp3 files are supported.")
95
  if not os.path.exists(file_path):
96
  raise HTTPException(status_code=400, detail="File path does not exist.")
97
  temp_audio_path = file_path
 
98
 
99
  # Convert MP3 to WAV if needed
100
  if temp_audio_path.endswith(".mp3"):
@@ -102,6 +108,11 @@ async def analyze_stress(
102
 
103
  try:
104
  result = analyze_voice_stress(temp_audio_path)
 
 
 
 
 
105
  return JSONResponse(content=result)
106
  except Exception as e:
107
  raise HTTPException(status_code=500, detail=str(e))
@@ -113,6 +124,11 @@ async def analyze_stress(
113
  # Handle text analysis
114
  elif text:
115
  result = analyze_text_stress(text)
 
 
 
 
 
116
  return JSONResponse(content=result)
117
 
118
  if __name__ == "__main__":
 
7
  import os
8
  import warnings
9
  from pydub import AudioSegment
10
+ from datetime import datetime
11
 
12
  warnings.filterwarnings("ignore")
13
 
 
53
  z_energy = (mean_energy - norm_mean_energy) / norm_std_energy
54
  z_speech_rate = (speech_rate - norm_speech_rate) / norm_std_speech_rate
55
  stress_score = (0.4 * z_f0) + (0.4 * z_speech_rate) + (0.2 * z_energy)
56
+ stress_level = round(float(1 / (1 + np.exp(-stress_score)) * 100), 2) # Rounded to 2 decimal places
57
  categories = ["Very Low Stress", "Low Stress", "Moderate Stress", "High Stress", "Very High Stress"]
58
  category_idx = min(int(stress_level / 20), 4)
59
  stress_category = categories[category_idx]
 
72
  stress_level: float
73
  category: str
74
  gender: str = None # Optional, only for audio analysis
75
+ status: str
76
+ time: str
77
+ size: str
78
 
79
  @app.post("/analyze-stress/", response_model=StressResponse)
80
  async def analyze_stress(
 
93
  with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(file.filename)[-1]) as temp_file:
94
  temp_file.write(await file.read())
95
  temp_audio_path = temp_file.name
96
+ file_size = os.path.getsize(temp_audio_path)
97
  else:
98
  if not (file_path.endswith(".wav") or file_path.endswith(".mp3")):
99
  raise HTTPException(status_code=400, detail="Only .wav and .mp3 files are supported.")
100
  if not os.path.exists(file_path):
101
  raise HTTPException(status_code=400, detail="File path does not exist.")
102
  temp_audio_path = file_path
103
+ file_size = os.path.getsize(file_path)
104
 
105
  # Convert MP3 to WAV if needed
106
  if temp_audio_path.endswith(".mp3"):
 
108
 
109
  try:
110
  result = analyze_voice_stress(temp_audio_path)
111
+ result.update({
112
+ "status": "Success",
113
+ "time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
114
+ "size": f"{round(file_size / 1024, 2)} KB" # Convert size to KB and round to 2 decimal places
115
+ })
116
  return JSONResponse(content=result)
117
  except Exception as e:
118
  raise HTTPException(status_code=500, detail=str(e))
 
124
  # Handle text analysis
125
  elif text:
126
  result = analyze_text_stress(text)
127
+ result.update({
128
+ "status": "Success",
129
+ "time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
130
+ "size": "N/A" # Size is not applicable for text input
131
+ })
132
  return JSONResponse(content=result)
133
 
134
  if __name__ == "__main__":