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 | |
# Create a Gradio interface | |
interface = gr.Interface(fn=do, inputs=inputs, outputs=outputs,allow_flagging="never") | |
# Launch the interface | |
interface.launch() | |