Spaces:
Sleeping
Sleeping
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 = "<div style='text-align: center;'>Ứ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.</div>" | |
# 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() | |