|
|
| """
|
| VitaMind AI Inference Example
|
| """
|
|
|
| import tensorflow as tf
|
| import joblib
|
| import numpy as np
|
| from huggingface_hub import hf_hub_download
|
|
|
| class VitaMindPredictor:
|
| def __init__(self, repo_id="YOUR_USERNAME/vitamind-calorie-predictor"):
|
| print("Loading model from Hugging Face...")
|
|
|
|
|
| self.model = tf.keras.models.load_model(
|
| hf_hub_download(repo_id=repo_id, filename="model.keras")
|
| )
|
| self.scaler = joblib.load(
|
| hf_hub_download(repo_id=repo_id, filename="scaler.joblib")
|
| )
|
| self.encoders = joblib.load(
|
| hf_hub_download(repo_id=repo_id, filename="encoders.joblib")
|
| )
|
|
|
| self.activity_scores = {
|
| 'Sedentary': 1, 'Lightly Active': 2, 'Active': 3,
|
| 'Very Active': 4, 'Athlete': 5
|
| }
|
|
|
| print("✓ Model loaded successfully!")
|
|
|
| def predict(self, user_data):
|
| """
|
| Predict daily calorie goal
|
|
|
| Args:
|
| user_data (dict): User information with keys:
|
| age, weight, height, steps, heart_rate, sleep_hours,
|
| stress_level, activity_level, gender, mood
|
|
|
| Returns:
|
| dict: Prediction results
|
| """
|
|
|
| required_keys = ['age', 'weight', 'height', 'steps', 'heart_rate',
|
| 'sleep_hours', 'stress_level', 'activity_level',
|
| 'gender', 'mood']
|
|
|
| for key in required_keys:
|
| if key not in user_data:
|
| raise ValueError(f"Missing required key: {key}")
|
|
|
|
|
| bmi = user_data['weight'] / ((user_data['height'] / 100) ** 2)
|
| good_sleep = 1 if user_data['sleep_hours'] >= 7 else 0
|
| high_stress = 1 if user_data['stress_level'] >= 7 else 0
|
| activity_score = self.activity_scores[user_data['activity_level']]
|
|
|
|
|
| activity_encoded = self.encoders['activity_level'].transform(
|
| [user_data['activity_level']]
|
| )[0]
|
| gender_encoded = self.encoders['gender'].transform(
|
| [user_data['gender']]
|
| )[0]
|
| mood_encoded = self.encoders['mood'].transform(
|
| [user_data['mood']]
|
| )[0]
|
|
|
|
|
| features = np.array([[
|
| user_data['age'],
|
| user_data['weight'],
|
| user_data['height'],
|
| user_data['steps'],
|
| user_data['heart_rate'],
|
| user_data['sleep_hours'],
|
| user_data['stress_level'],
|
| bmi,
|
| activity_encoded,
|
| gender_encoded,
|
| mood_encoded,
|
| good_sleep,
|
| high_stress,
|
| activity_score
|
| ]])
|
|
|
|
|
| features_scaled = self.scaler.transform(features)
|
| calories = self.model.predict(features_scaled, verbose=0)[0][0]
|
|
|
| return {
|
| 'calories': round(float(calories), 0),
|
| 'bmi': round(bmi, 1),
|
| 'bmi_category': self._get_bmi_category(bmi),
|
| 'activity_score': activity_score,
|
| 'sleep_quality': 'Good' if good_sleep else 'Poor',
|
| 'stress_level': 'High' if high_stress else 'Normal'
|
| }
|
|
|
| def _get_bmi_category(self, bmi):
|
| if bmi < 18.5:
|
| return 'Underweight'
|
| elif bmi < 25:
|
| return 'Normal'
|
| elif bmi < 30:
|
| return 'Overweight'
|
| else:
|
| return 'Obese'
|
|
|
|
|
| if __name__ == "__main__":
|
|
|
| predictor = VitaMindPredictor(repo_id="YOUR_USERNAME/vitamind-calorie-predictor")
|
|
|
|
|
| user = {
|
| 'age': 28,
|
| 'weight': 70,
|
| 'height': 170,
|
| 'steps': 10000,
|
| 'heart_rate': 75,
|
| 'sleep_hours': 8,
|
| 'stress_level': 3,
|
| 'activity_level': 'Active',
|
| 'gender': 'M',
|
| 'mood': 'happy'
|
| }
|
|
|
|
|
| result = predictor.predict(user)
|
|
|
|
|
| print("\n" + "="*50)
|
| print("VitaMind AI - Calorie Recommendation")
|
| print("="*50)
|
| print(f"Daily Calorie Goal: {result['calories']} kcal")
|
| print(f"BMI: {result['bmi']} ({result['bmi_category']})")
|
| print(f"Activity Score: {result['activity_score']}/5")
|
| print(f"Sleep Quality: {result['sleep_quality']}")
|
| print(f"Stress Level: {result['stress_level']}")
|
| print("="*50)
|
|
|