import gradio as gr def calculate_bmi(height, weight): # Calculate BMI using the provided height and weight # BMI Formula: weight (kg) / (height (m) ** 2) height_m = height / 100 # Convert height from cm to m bmi = weight / (height_m ** 2) return bmi def calculate_bmr(age, gender, height, weight): # Calculate Basal Metabolic Rate (BMR) using the provided age, gender, height, and weight if gender == "Nam": # BMR Formula for males: 88.362 + (13.397 x weight in kg) + (4.799 x height in cm) - (5.677 x age in years) bmr = 88.362 + (13.397 * weight) + (4.799 * height) - (5.677 * age) else: # BMR Formula for females: 447.593 + (9.247 x weight in kg) + (3.098 x height in cm) - (4.330 x age in years) bmr = 447.593 + (9.247 * weight) + (3.098 * height) - (4.330 * age) return bmr def calculate_tdee(bmr, activity_level): # Calculate Total Daily Energy Expenditure (TDEE) using the provided BMR and activity level tdee = bmr * activity_level return tdee def calculate_daily_calories_goal(tdee, goal): # Calculate the daily calorie goal based on the provided TDEE and goal if goal == "Giảm cân": calories_goal = tdee - 500 # Aim for a 500 calorie deficit per day for weight loss elif goal == "Tăng cân": calories_goal = tdee + 500 # Aim for a 500 calorie surplus per day for weight gain else: calories_goal = tdee # Maintain current weight if calories_goal < 0 : return 0 else : return calories_goal def get_activity_factor(activity_input): """ Get the activity factor based on the selected option. Args: activity_input (str): Selected activity option. Returns: float: Activity factor based on the selected option. """ activity_factor_map = { 'Không': 1.2, 'Có': 1.55, 'Thường Xuyên': 1.725 } return activity_factor_map.get(activity_input, 1.2) def process(height, weight, age, gender, activities, goal): # Determine activity level activity_level = get_activity_factor(activities) # Calculate BMR bmr = calculate_bmr(age, gender, height, weight) # Calculate TDEE tdee = calculate_tdee(bmr, activity_level) # Calculate BMI bmi = calculate_bmi(height, weight) # Determine BMI category based on gender bmi_category = "" if gender == "Nam": if bmi < 20: bmi_category = "Thiếu cân, cần có chế độ ăn phù hợp để cải thiện tình trạng này" elif 20 <= bmi < 25: bmi_category = "Bình thường, thậm chí ở trong tình trạng tốt nếu bạn thường xuyên tập thể dục và ăn một chế độ ăn hợp lý" elif 25 <= bmi < 30: bmi_category = "Thừa cân, cần áp dụng biện pháp để khắc phục tình trạng trên" else: bmi_category = "Béo phì nặng, nếu không cải thiện sớm có thể gây ra các vấn đề liên quan đến tiêu hóa, hệ tuần hoàn, v.v." else: if bmi < 18: bmi_category = "Thiếu cân, thiếu dinh dưỡng" elif 18 <= bmi < 23: bmi_category = "Bình thường" elif 23 <= bmi < 30: bmi_category = "Thừa cân" else: bmi_category = "Béo phì" # Calculate daily calorie goal calo_suggestion = calculate_daily_calories_goal(tdee, goal) return bmi, bmr, tdee, bmi_category, calo_suggestion inputs = [ gr.inputs.Number(label=" Chiều Cao (cm)"), gr.inputs.Number(label=" Cân Nặng (kg)"), gr.inputs.Number(label="Tuổi"), gr.inputs.Radio(['Nam', 'Nữ'], label="Giới Tính"), gr.inputs.Radio(['Không', "Có", 'Thường Xuyên'], label="Hoạt Động Thể Thao", default="Không" ), gr.inputs.Radio(['Giảm cân', 'Tăng cân', 'Duy trì'], label="Mục Tiêu", default="Giảm cân") ] outputs = [ gr.outputs.Textbox(label="Chỉ số BMI"), gr.outputs.Textbox(label="Chỉ số BMR"), gr.outputs.Textbox(label="Chỉ số TDEE"), gr.outputs.Textbox(label="Lượng Calories mỗi ngày nên là:") ] def do(height, weight, age, gender, activities, goal): bmi, bmr, tdee, bmi_category, calorie_goal = process(height, weight, age, gender, activities, goal) # Format the values with 2 decimal places bmi = "{:.1f}".format(bmi) bmr = "{:.1f}".format(bmr) tdee = "{:.1f}".format(tdee) calorie_goal = "{:.1f}".format(calorie_goal) bmr = f"{bmr} / Ngày" tdee = f"{tdee} / Ngày" calorie_goal = f"{calorie_goal} / Ngày " return bmi,bmr,tdee, calorie_goal description_html = "
Ứng dụng này giúp bạn đo lường chỉ số sức khỏe thông qua chỉ số BMI, BMR và TDEE và đưa ra lượng calo cần thiết mỗi ngày dựa trên mục tiêu của bạn.
" # Create a Gradio interface interface = gr.Interface(fn=do, inputs=inputs, outputs=outputs,allow_flagging="never", title="Đo lường chỉ số sức khỏe", description=description_html) # Launch the interface interface.launch()