import streamlit as st from transformers import pipeline import pandas as pd import numpy as np import os from dotenv import load_dotenv import warnings # Suppress warnings warnings.filterwarnings("ignore", category=FutureWarning) warnings.filterwarnings("ignore", category=UserWarning) # Load environment variables load_dotenv() # Set page config st.set_page_config( page_title="πŸ’ͺ Gym Workout & Diet Planner", page_icon="πŸ‹οΈ", layout="wide" ) # Custom CSS st.markdown(""" """, unsafe_allow_html=True) # Initialize fitness advisor fitness_advisor = None try: HUGGINGFACE_TOKEN = os.getenv('HUGGINGFACE_TOKEN') if HUGGINGFACE_TOKEN: from huggingface_hub import login login(token=HUGGINGFACE_TOKEN) fitness_advisor = pipeline( "text-generation", model="gpt2", device="cpu", # Change to "cuda" if you have GPU max_length=200 ) except Exception as e: st.markdown(f"""
⚠️ Could not load AI features. Using default workout plans. Error: {str(e)}
""", unsafe_allow_html=True) # Workout database with more exercises workout_db = { "Chest": { "Beginner": [ {"exercise": "Push-ups", "sets": 3, "reps": "10-12", "rest": "60s", "desc": "Basic bodyweight exercise for chest activation"}, {"exercise": "Bench Press (Dumbbell)", "sets": 3, "reps": "8-10", "rest": "90s", "desc": "Lying on bench, press dumbbells upward"}, {"exercise": "Incline Chest Press Machine", "sets": 3, "reps": "10-12", "rest": "60s", "desc": "Machine version for upper chest focus"} ], "Intermediate": [ {"exercise": "Barbell Bench Press", "sets": 4, "reps": "6-8", "rest": "120s", "desc": "Classic compound lift for chest development"}, {"exercise": "Incline Dumbbell Fly", "sets": 3, "reps": "10-12", "rest": "90s", "desc": "Isolates upper chest with stretch"}, {"exercise": "Dips (Chest Focus)", "sets": 3, "reps": "8-10", "rest": "90s", "desc": "Lean forward to emphasize chest"} ], "Advanced": [ {"exercise": "Decline Barbell Press", "sets": 4, "reps": "6-8", "rest": "120s", "desc": "Targets lower chest fibers"}, {"exercise": "Weighted Dips", "sets": 3, "reps": "6-8", "rest": "120s", "desc": "Add weight belt for intensity"}, {"exercise": "Cable Fly Variations", "sets": 4, "reps": "10-12", "rest": "60s", "desc": "Multiple angles for complete chest development"} ] }, "Back": { "Beginner": [ {"exercise": "Lat Pulldown", "sets": 3, "reps": "10-12", "rest": "60s", "desc": "Machine exercise for lat development"}, {"exercise": "Seated Row Machine", "sets": 3, "reps": "10-12", "rest": "60s", "desc": "Targets middle back muscles"}, {"exercise": "Back Extensions", "sets": 3, "reps": "12-15", "rest": "60s", "desc": "Strengthens lower back"} ], "Intermediate": [ {"exercise": "Pull-ups", "sets": 3, "reps": "6-8", "rest": "90s", "desc": "Bodyweight exercise for lats"}, {"exercise": "Bent-over Barbell Row", "sets": 4, "reps": "8-10", "rest": "90s", "desc": "Compound movement for back thickness"}, {"exercise": "Face Pulls", "sets": 3, "reps": "12-15", "rest": "60s", "desc": "Rear delt and upper back focus"} ], "Advanced": [ {"exercise": "Weighted Pull-ups", "sets": 4, "reps": "6-8", "rest": "120s", "desc": "Add weight for increased resistance"}, {"exercise": "Deadlifts", "sets": 4, "reps": "5-6", "rest": "180s", "desc": "Full posterior chain developer"}, {"exercise": "T-bar Row", "sets": 4, "reps": "8-10", "rest": "90s", "desc": "Great for middle back thickness"} ] }, "Biceps": { "Beginner": [ {"exercise": "Dumbbell Curls", "sets": 3, "reps": "10-12", "rest": "60s", "desc": "Basic bicep isolation"}, {"exercise": "Hammer Curls", "sets": 3, "reps": "10-12", "rest": "60s", "desc": "Targets brachialis muscle"}, {"exercise": "Machine Preacher Curl", "sets": 3, "reps": "10-12", "rest": "60s", "desc": "Isolates biceps with support"} ], "Intermediate": [ {"exercise": "Barbell Curls", "sets": 4, "reps": "8-10", "rest": "90s", "desc": "Classic bicep builder"}, {"exercise": "Incline Dumbbell Curls", "sets": 3, "reps": "10-12", "rest": "60s", "desc": "Stretches biceps at bottom"}, {"exercise": "Concentration Curls", "sets": 3, "reps": "10-12", "rest": "60s", "desc": "Peak contraction focus"} ], "Advanced": [ {"exercise": "Chin-ups", "sets": 4, "reps": "6-8", "rest": "120s", "desc": "Compound bicep exercise"}, {"exercise": "Spider Curls", "sets": 4, "reps": "8-10", "rest": "90s", "desc": "Intense bicep isolation"}, {"exercise": "21s", "sets": 3, "reps": "21", "rest": "90s", "desc": "7 partial reps bottom, middle, top"} ] }, # Add other muscle groups similarly... } # Enhanced diet plan generator def generate_diet_plan(weight, goal, age, height): # Calculate BMR (Mifflin-St Jeor Equation) if st.session_state.get('gender', 'male') == 'male': bmr = 10 * weight + 6.25 * height - 5 * age + 5 else: bmr = 10 * weight + 6.25 * height - 5 * age - 161 # Adjust for activity level (assuming moderate activity) tdee = bmr * 1.55 # Adjust based on goal if goal == "Muscle Gain": calories = tdee + 300 protein = weight * 2.2 carbs = (calories * 0.45) / 4 fats = (calories * 0.25) / 9 elif goal == "Fat Loss": calories = tdee - 300 protein = weight * 2.5 carbs = (calories * 0.35) / 4 fats = (calories * 0.3) / 9 else: # Maintenance calories = tdee protein = weight * 1.8 carbs = (calories * 0.4) / 4 fats = (calories * 0.3) / 9 return { "Calories": f"{int(calories)} kcal", "Protein": f"{int(protein)} g", "Carbs": f"{int(carbs)} g", "Fats": f"{int(fats)} g", "Meal Plan": generate_meal_plan(goal) } def generate_meal_plan(goal): if goal == "Muscle Gain": return { "Breakfast": "Oatmeal with protein powder + almonds + berries πŸ₯£", "Snack": "Greek yogurt + handful of nuts πŸ₯œ", "Lunch": "Grilled chicken + quinoa + mixed vegetables πŸ—", "Pre-Workout": "Banana + peanut butter 🍌", "Post-Workout": "Whey protein + rice cakes πŸ‹οΈβ€β™‚οΈ", "Dinner": "Salmon + sweet potato + broccoli 🐟", "Before Bed": "Cottage cheese + flaxseeds πŸ§€" } elif goal == "Fat Loss": return { "Breakfast": "Egg whites + spinach + avocado πŸ₯‘", "Snack": "Protein shake + celery sticks πŸ₯€", "Lunch": "Turkey breast + brown rice + asparagus πŸ¦ƒ", "Pre-Workout": "Black coffee + BCAA β˜•", "Post-Workout": "Lean beef + roasted veggies πŸ₯©", "Dinner": "Grilled fish + zucchini noodles 🐠", "Before Bed": "Casein protein + walnuts 🌰" } else: return { "Breakfast": "Whole grain toast + eggs + avocado 🍳", "Snack": "Protein bar + apple 🍎", "Lunch": "Chicken salad wrap + sweet potato fries πŸ₯™", "Pre-Workout": "Rice cakes + almond butter 🍘", "Post-Workout": "Protein smoothie with banana πŸ₯›", "Dinner": "Lean steak + mashed potatoes + greens πŸ₯©", "Before Bed": "Greek yogurt + berries οΏ½" } def generate_workout_plan(muscle_group, experience, duration): base_workout = workout_db.get(muscle_group, {}).get(experience, []) # Adjust based on duration if duration < 45: return base_workout[:2] elif duration < 60: return base_workout[:3] elif duration < 75: return base_workout[:4] if len(base_workout) > 3 else base_workout else: return base_workout # UI Components st.title("πŸ‹οΈβ€β™‚οΈ Gym Workout & Diet Planner") st.markdown("---") # User inputs col1, col2 = st.columns(2) with col1: st.subheader("🧍 Personal Information") gender = st.radio("Gender", ["Male", "Female"], index=0, key="gender") weight = st.number_input("Weight (kg)", min_value=30, max_value=200, value=70) height = st.number_input("Height (cm)", min_value=140, max_value=220, value=170) age = st.number_input("Age", min_value=12, max_value=100, value=25) goal = st.selectbox("Fitness Goal", ["Muscle Gain", "Fat Loss", "Maintenance"]) with col2: st.subheader("πŸ’ͺ Workout Focus") muscle_group = st.selectbox( "Select Muscle Group", ["Chest", "Back", "Biceps", "Triceps", "Shoulders", "Legs", "Full Body"] ) experience = st.select_slider("Experience Level", ["Beginner", "Intermediate", "Advanced"]) workout_duration = st.select_slider("Workout Duration (minutes)", [30, 45, 60, 75, 90], value=60) # Generate results if st.button("Generate Plan", type="primary"): st.markdown("---") st.header(f"🎯 Your Personalized {muscle_group} Workout Plan") st.subheader(f"πŸ† Goal: {goal} | βš–οΈ Weight: {weight}kg | πŸ‹οΈβ€β™‚οΈ Level: {experience}") # Generate workout plan workout_plan = generate_workout_plan(muscle_group, experience, workout_duration) # Generate AI advice if available if fitness_advisor: try: prompt = f"""Provide a brief professional advice for {experience.lower()} level {muscle_group.lower()} workout focusing on {goal.lower()}. Include 2-3 key points about form, recovery, or progression.""" advice = fitness_advisor(prompt, max_length=200, do_sample=True)[0]['generated_text'] st.markdown(f"""

πŸ’‘ AI-Powered Advice

{advice}

""", unsafe_allow_html=True) except Exception as e: st.warning(f"Could not generate AI advice. Error: {str(e)}") # Display workout and diet plans col1, col2 = st.columns(2) with col1: st.subheader("πŸ”₯ Workout Exercises") for i, exercise in enumerate(workout_plan, 1): with st.container(): st.markdown(f"""

#{i} {exercise['exercise']}

Sets: {exercise['sets']} | Reps: {exercise['reps']} | Rest: {exercise['rest']}

{exercise['desc']}

""", unsafe_allow_html=True) with col2: st.subheader("🍽️ Diet Plan") diet_plan = generate_diet_plan(weight, goal, age, height) st.markdown(f"""

πŸ“Š Macronutrients

Calories: {diet_plan['Calories']}

Protein: {diet_plan['Protein']}

Carbs: {diet_plan['Carbs']}

Fats: {diet_plan['Fats']}

""", unsafe_allow_html=True) st.markdown("

⏰ Meal Timing

", unsafe_allow_html=True) for meal, description in diet_plan["Meal Plan"].items(): st.markdown(f"""

{meal}: {description}

""", unsafe_allow_html=True) # Additional tips st.markdown("---") st.subheader("πŸ’‘ Additional Tips") if goal == "Muscle Gain": st.markdown(""" - πŸ₯› Consume 20-40g protein every 3-4 hours - πŸ•’ Train each muscle group 2-3 times per week - 😴 Get at least 7-8 hours of sleep for recovery - πŸ“ˆ Increase weights gradually (2.5-5kg every 2 weeks) """) elif goal == "Fat Loss": st.markdown(""" - 🚰 Drink 3-4L water daily to stay hydrated - πŸšΆβ€β™‚οΈ Add 10k steps daily for extra calorie burn - 🍽️ Use smaller plates to control portion sizes - πŸ§‚ Reduce sodium intake to minimize water retention """) else: st.markdown(""" - πŸ”„ Vary your exercises every 4-6 weeks - πŸ“Š Track your workouts to monitor progress - 🧘 Include mobility work to prevent injuries - βš–οΈ Weigh yourself weekly to maintain balance """) # Footer st.markdown("---") st.markdown("""

πŸ’ͺ Stay Consistent | 🍏 Eat Clean | πŸ›Œ Recover Well

Made with ❀️ using Streamlit & Hugging Face

""", unsafe_allow_html=True)