h3rsh commited on
Commit
47f9296
·
verified ·
1 Parent(s): ed874e7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -51
app.py CHANGED
@@ -51,7 +51,7 @@ class HeartPredictor:
51
 
52
  def load_normalization_params(self):
53
  """Load the saved normalization parameters from training"""
54
- norm_file = "heart_norm_params.pkl"
55
  if os.path.exists(norm_file):
56
  with open(norm_file, 'rb') as f:
57
  self.norm_params = pickle.load(f)
@@ -233,59 +233,43 @@ class HeartPredictor:
233
 
234
  def _predict_segment(self, audio_segment, debug=False):
235
  """Predict on a single segment using training methodology"""
236
- print("Starting segment prediction")
237
- try:
238
- # Apply same denoising as training
239
- print("Applying denoising...")
240
- denoised_audio = self.denoise_audio(audio_segment, TARGET_SR)
241
- print(f"Denoised audio stats: mean={np.mean(denoised_audio):.6f}, std={np.std(denoised_audio):.6f}")
242
-
243
- # Extract features exactly as in training
244
- print("Extracting features...")
245
- features = self.extract_features(denoised_audio, TARGET_SR)
246
-
247
- # Prepare inputs exactly as in training
248
- print("Preparing inputs...")
249
- X_mfcc, X_chroma, X_mspec = self.prepare_input(features)
250
 
251
- # FIXED: Use training normalization approach
252
- print("Normalizing features...")
253
- X_mfcc_norm = self.normalize_with_training_stats(X_mfcc, 'mfcc')
254
- X_chroma_norm = self.normalize_with_training_stats(X_chroma, 'chroma')
255
- X_mspec_norm = self.normalize_with_training_stats(X_mspec, 'mspec')
256
 
257
- print("Running model prediction...")
258
- # Get model prediction
259
- raw_prediction = self.model.predict([X_mfcc_norm, X_chroma_norm, X_mspec_norm], verbose=0)
260
- pred_prob = float(raw_prediction[0][0])
261
- print(f"Model raw output: {pred_prob}")
262
-
263
- result = {
264
- "raw_output": pred_prob,
265
- "audio_stats": {
266
- "mean": float(np.mean(denoised_audio)),
267
- "std": float(np.std(denoised_audio))
268
- } if debug else {}
 
 
 
 
 
 
 
 
269
  }
270
-
271
- if debug:
272
- result["normalization_check"] = {
273
- "mfcc_norm_mean": float(np.mean(X_mfcc_norm)),
274
- "mfcc_norm_std": float(np.std(X_mfcc_norm)),
275
- "chroma_norm_mean": float(np.mean(X_chroma_norm)),
276
- "chroma_norm_std": float(np.std(X_chroma_norm)),
277
- "mspec_norm_mean": float(np.mean(X_mspec_norm)),
278
- "mspec_norm_std": float(np.std(X_mspec_norm))
279
- }
280
-
281
- print("Segment prediction completed successfully")
282
- return result
283
-
284
- except Exception as e:
285
- print(f"SEGMENT PROCESSING ERROR: {str(e)}")
286
- import traceback
287
- traceback.print_exc()
288
- raise
289
 
290
  # FastAPI app
291
  app = FastAPI(title="Heart Sound Classifier API", version="1.0.0")
 
51
 
52
  def load_normalization_params(self):
53
  """Load the saved normalization parameters from training"""
54
+ norm_file = "comprehensive_norm_params.pkl"
55
  if os.path.exists(norm_file):
56
  with open(norm_file, 'rb') as f:
57
  self.norm_params = pickle.load(f)
 
233
 
234
  def _predict_segment(self, audio_segment, debug=False):
235
  """Predict on a single segment using training methodology"""
236
+ # Apply same denoising as training
237
+ denoised_audio = self.denoise_audio(audio_segment, TARGET_SR)
238
+
239
+ # Extract features exactly as in training
240
+ features = self.extract_features(denoised_audio, TARGET_SR)
241
+
242
+ # Prepare inputs exactly as in training
243
+ X_mfcc, X_chroma, X_mspec = self.prepare_input(features)
 
 
 
 
 
 
244
 
245
+ # FIXED: Use training normalization approach
246
+ X_mfcc_norm = self.normalize_with_training_stats(X_mfcc, 'mfcc')
247
+ X_chroma_norm = self.normalize_with_training_stats(X_chroma, 'chroma')
248
+ X_mspec_norm = self.normalize_with_training_stats(X_mspec, 'mspec')
 
249
 
250
+ # Get model prediction
251
+ raw_prediction = self.model.predict([X_mfcc_norm, X_chroma_norm, X_mspec_norm], verbose=0)
252
+ pred_prob = float(raw_prediction[0][0])
253
+
254
+ result = {
255
+ "raw_output": pred_prob,
256
+ "audio_stats": {
257
+ "mean": float(np.mean(denoised_audio)),
258
+ "std": float(np.std(denoised_audio))
259
+ } if debug else {}
260
+ }
261
+
262
+ if debug:
263
+ result["normalization_check"] = {
264
+ "mfcc_norm_mean": float(np.mean(X_mfcc_norm)),
265
+ "mfcc_norm_std": float(np.std(X_mfcc_norm)),
266
+ "chroma_norm_mean": float(np.mean(X_chroma_norm)),
267
+ "chroma_norm_std": float(np.std(X_chroma_norm)),
268
+ "mspec_norm_mean": float(np.mean(X_mspec_norm)),
269
+ "mspec_norm_std": float(np.std(X_mspec_norm))
270
  }
271
+
272
+ return result
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
 
274
  # FastAPI app
275
  app = FastAPI(title="Heart Sound Classifier API", version="1.0.0")