Spaces:
Sleeping
Sleeping
| """ | |
| Preprocessing utilities for Panic Detection model | |
| """ | |
| import numpy as np | |
| from sklearn.preprocessing import LabelEncoder, MinMaxScaler | |
| class PanicDetectionPreprocessor: | |
| def __init__(self): | |
| """Initialize encoders and scaler with the same configuration as training""" | |
| self.gender_encoder = LabelEncoder() | |
| self.activity_encoder = LabelEncoder() | |
| self.scaler = MinMaxScaler() | |
| # Fit encoders with expected values (based on your training data) | |
| # Adjust these if your actual categories are different | |
| self.gender_encoder.fit(['Male', 'Female']) | |
| self.activity_encoder.fit(['Running', 'Walking', 'Sitting', 'Standing', 'Cycling']) | |
| # Initialize scaler with approximate ranges from your data | |
| # In production, you should save and load the actual fitted scaler | |
| self.scaler.fit(np.array([ | |
| [0, 18, 45, 60, 0, 0], # min values (approximate) | |
| [1, 80, 120, 180, 15000, 4] # max values (approximate) | |
| ])) | |
| def preprocess(self, gender: str, age: int, weight: float, | |
| heartrate: int, stepcount: int, activity: str): | |
| """ | |
| Preprocess input data for model prediction | |
| Args: | |
| gender: Gender as string ('Male' or 'Female') | |
| age: Age in years | |
| weight: Weight in kg | |
| heartrate: Heart rate in bpm | |
| stepcount: Step count | |
| activity: Activity type as string | |
| Returns: | |
| Preprocessed numpy array ready for model input | |
| """ | |
| try: | |
| # Encode categorical features | |
| gender_encoded = self.gender_encoder.transform([gender])[0] | |
| activity_encoded = self.activity_encoder.transform([activity])[0] | |
| # Create feature array | |
| features = np.array([[ | |
| gender_encoded, | |
| age, | |
| weight, | |
| heartrate, | |
| stepcount, | |
| activity_encoded | |
| ]]) | |
| # Scale features | |
| features_scaled = self.scaler.transform(features) | |
| # Reshape for CNN input (samples, timesteps, features) | |
| features_reshaped = features_scaled.reshape(1, 6, 1) | |
| return features_reshaped | |
| except Exception as e: | |
| raise ValueError(f"Preprocessing error: {str(e)}") | |
| def get_valid_genders(self): | |
| """Return list of valid gender values""" | |
| return list(self.gender_encoder.classes_) | |
| def get_valid_activities(self): | |
| """Return list of valid activity values""" | |
| return list(self.activity_encoder.classes_) | |