Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,195 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pandas as pd
|
2 |
+
import gradio as gr
|
3 |
+
|
4 |
+
# Função para avaliação de gordura corporal
|
5 |
+
def imc(nome, idade, avaliador, confea,
|
6 |
+
peso, altura, peso_alvo, perc_g_alvo,
|
7 |
+
pantur_d, coxa_d, braço_d,
|
8 |
+
pantur_e, coxa_e, braço_e,
|
9 |
+
quadril, abdomem, cintura, tórax,
|
10 |
+
d_tríceps, d_peito, d_sub_axilar, d_subescapular, d_abdominal, d_supra_ilíaca, d_coxa,
|
11 |
+
a_flex, a_post, conc):
|
12 |
+
|
13 |
+
# Converter os valores para float
|
14 |
+
peso = float(peso)
|
15 |
+
altura = float(altura)
|
16 |
+
peso_alvo = float(peso_alvo)
|
17 |
+
perc_g_alvo = float(perc_g_alvo)
|
18 |
+
pantur_d = float(pantur_d)
|
19 |
+
coxa_d = float(coxa_d)
|
20 |
+
braço_d = float(braço_d)
|
21 |
+
pantur_e = float(pantur_e)
|
22 |
+
coxa_e = float(coxa_e)
|
23 |
+
braço_e = float(braço_e)
|
24 |
+
quadril = float(quadril)
|
25 |
+
abdomem = float(abdomem)
|
26 |
+
cintura = float(cintura)
|
27 |
+
tórax = float(tórax)
|
28 |
+
|
29 |
+
# Converter os valores de dobras cutâneas para inteiros
|
30 |
+
d_tríceps = int(d_tríceps)
|
31 |
+
d_peito = int(d_peito)
|
32 |
+
d_sub_axilar = int(d_sub_axilar)
|
33 |
+
d_subescapular = int(d_subescapular)
|
34 |
+
d_abdominal = int(d_abdominal)
|
35 |
+
d_supra_ilíaca = int(d_supra_ilíaca)
|
36 |
+
d_coxa = int(d_coxa)
|
37 |
+
|
38 |
+
# Índice de massa corporal
|
39 |
+
imc = peso * 10000 / (altura * altura)
|
40 |
+
|
41 |
+
# Índice de massa corporal
|
42 |
+
imc_alvo = peso_alvo * 10000 / (altura * altura)
|
43 |
+
|
44 |
+
# Soma das dobras
|
45 |
+
soma_dob = d_tríceps + d_peito + d_sub_axilar + d_subescapular + d_abdominal + d_supra_ilíaca + d_coxa
|
46 |
+
|
47 |
+
# Percentual de gordura
|
48 |
+
perc_g = (495 / (1.10938 - (0.0008267 * soma_dob) + (0.0000016 * soma_dob * soma_dob) - (0.0002574 * idade))) - 450
|
49 |
+
|
50 |
+
# Peso gordo e peso magro
|
51 |
+
peso_g = peso * (perc_g / 100)
|
52 |
+
peso_m = peso - peso_g
|
53 |
+
|
54 |
+
# Gasto calórico basal
|
55 |
+
gcb = 66 + (13.7 * peso) + (5 * altura) - (6.9 * idade)
|
56 |
+
|
57 |
+
# Ingesta calórica de equilíbrio
|
58 |
+
ice = (gcb * 0.2) + gcb
|
59 |
+
|
60 |
+
#
|
61 |
+
obs ="Os cálculos deste laudo baseiam-se em fórmulas contidas em: Foss,ML e Keteyian,SJ. FOX-Bases fisiológicas do exercício e do esporte. 6a Ed., 2000."
|
62 |
+
|
63 |
+
|
64 |
+
# criação de strings para os relatórios da interface e do pdf
|
65 |
+
|
66 |
+
Informações_resultados = f"""
|
67 |
+
Informações_gerais
|
68 |
+
Nome: {nome}
|
69 |
+
Idade: {idade}
|
70 |
+
Avaliador: {avaliador}
|
71 |
+
Nº Registro: {confea}
|
72 |
+
|
73 |
+
Controle_biométrico
|
74 |
+
Peso (kg): {peso:.2f}
|
75 |
+
Altura (cm): {altura:.2f}
|
76 |
+
IMC: {imc:.2f}
|
77 |
+
Soma das dobras (mm): {soma_dob}
|
78 |
+
Percentual de gordura (%): {perc_g:.2f}
|
79 |
+
Peso gordo (kg): {peso_g:.2f}
|
80 |
+
Peso magro (kg): {peso_m:.2f}
|
81 |
+
|
82 |
+
> Objetivos:
|
83 |
+
Peso alvo (kg): {peso_alvo:.2f}
|
84 |
+
Percentual de gordura alvo (%): {perc_g_alvo:.2f}
|
85 |
+
IMC alvo: {imc_alvo:.2f}
|
86 |
+
|
87 |
+
Avaliação de flexibilidade (sit-and-reach): {a_flex}
|
88 |
+
|
89 |
+
Avaliação postural: {a_post}
|
90 |
+
|
91 |
+
Gasto calórico basal: {gcb:.2f}
|
92 |
+
|
93 |
+
Ingesta calórica de equilíbrio: {ice:.2f}
|
94 |
+
"""
|
95 |
+
Conclusão = f"""
|
96 |
+
Conclusão da avaliação: {conc}
|
97 |
+
Obs: {obs}
|
98 |
+
"""
|
99 |
+
|
100 |
+
# OUTPUTS
|
101 |
+
return (
|
102 |
+
Informações_resultados,
|
103 |
+
Conclusão,
|
104 |
+
)
|
105 |
+
|
106 |
+
# Interface Gradio
|
107 |
+
with gr.Blocks(theme=gr.themes.Base()) as interface:
|
108 |
+
with gr.Tab("IMC"):
|
109 |
+
with gr.Row():
|
110 |
+
with gr.Column():
|
111 |
+
with gr.Row():
|
112 |
+
nome = gr.Textbox(label="Nome", scale=2)
|
113 |
+
idade = gr.Number(label="Idade", value=42, scale=0.5)
|
114 |
+
with gr.Row():
|
115 |
+
avaliador = gr.Textbox(label="Avaliador físico", value="Mariana Casa Nova")
|
116 |
+
confea = gr.Textbox(label="Registro conselho", value="-")
|
117 |
+
# Controle biométrico
|
118 |
+
with gr.Group():
|
119 |
+
with gr.Row():
|
120 |
+
peso = gr.Slider(0, 150, label="Peso (kg)", value=92.8, step=0.1)
|
121 |
+
altura = gr.Slider(100, 210, label="Altura (cm)", value=161, step=1)
|
122 |
+
with gr.Row():
|
123 |
+
peso_alvo = gr.Slider(0, 150, label="Peso alvo (kg)", value=70, step=0.1)
|
124 |
+
perc_g_alvo = gr.Slider(0, 100, label="% gordura alvo", value=28, step=0.1)
|
125 |
+
|
126 |
+
# Perímetros
|
127 |
+
with gr.Group():
|
128 |
+
with gr.Row():
|
129 |
+
pantur_d = gr.Slider(0, 100, label="Panturrilha direita (cm)", value=0, step=0.1)
|
130 |
+
pantur_e = gr.Slider(0, 100, label="Panturrilha esquerda (cm)", value=0, step=0.1)
|
131 |
+
with gr.Row():
|
132 |
+
coxa_e = gr.Slider(0, 100, label="Coxa esquerda (cm)", value=0, step=0.1)
|
133 |
+
coxa_d = gr.Slider(0, 100, label="Coxa direita (cm)", value=0, step=0.1)
|
134 |
+
with gr.Row():
|
135 |
+
braço_d = gr.Slider(0, 100, label="Braço direito (cm)", value=0, step=0.1)
|
136 |
+
braço_e = gr.Slider(0, 100, label="Braço esquerdo (cm)", value=0, step=0.1)
|
137 |
+
with gr.Row():
|
138 |
+
quadril = gr.Slider(0, 200, label="Quadril (cm)", value=0, step=0.1)
|
139 |
+
cintura = gr.Slider(0, 200, label="Cintura (cm)", value=0, step=0.1)
|
140 |
+
with gr.Row():
|
141 |
+
abdomem = gr.Slider(0, 200, label="Abdômen (cm)", value=0, step=0.1)
|
142 |
+
tórax = gr.Slider(0, 200, label="Tórax (cm)", value=0, step=0.1)
|
143 |
+
|
144 |
+
# Dobras cutâneas
|
145 |
+
with gr.Group():
|
146 |
+
with gr.Row():
|
147 |
+
d_tríceps = gr.Slider(0, 100, label="Tríceps (mm)", value=36, step=1)
|
148 |
+
d_peito = gr.Slider(0, 100, label="Peito", value=0, step=1)
|
149 |
+
with gr.Row():
|
150 |
+
d_sub_axilar = gr.Slider(0, 100, label="Sub-axilar (mm)", value=0, step=1)
|
151 |
+
d_subescapular = gr.Slider(0, 100, label="Subescapular (mm)", value=0, step=1)
|
152 |
+
with gr.Row():
|
153 |
+
d_abdominal = gr.Slider(0, 100, label="Abdominal (mm)", value=0, step=1)
|
154 |
+
d_supra_ilíaca = gr.Slider(0, 100, label="Supra-ilíaca (mm)", value=31, step=1)
|
155 |
+
with gr.Row():
|
156 |
+
d_coxa = gr.Slider(0, 100, label="Coxa (mm)", value=53, step=1)
|
157 |
+
|
158 |
+
# Avaliações
|
159 |
+
with gr.Group():
|
160 |
+
with gr.Row():
|
161 |
+
# Avaliação de flexibilidade
|
162 |
+
a_flex = gr.Radio(["Realizado", "Não realizado"], label="Avaliação de flexibilidade", value="Não realizado")
|
163 |
+
# Avaliação postural
|
164 |
+
a_post = gr.Radio(["Realizado", "Não realizado"], label="Avaliação postural", value="Não realizado")
|
165 |
+
# Conclusão
|
166 |
+
with gr.Group():
|
167 |
+
conc = gr.Textbox(label ="Conclusão da avaliação")
|
168 |
+
|
169 |
+
|
170 |
+
button_1 = gr.Button("Calcular")
|
171 |
+
|
172 |
+
with gr.Column():
|
173 |
+
Informações_resultados = gr.Textbox(label="Informações e resultados")
|
174 |
+
Conclusão = gr.Textbox(label="Conclusão da avaliação")
|
175 |
+
|
176 |
+
|
177 |
+
inputs = [
|
178 |
+
nome, idade, avaliador, confea,
|
179 |
+
peso, altura, peso_alvo, perc_g_alvo,
|
180 |
+
pantur_d, coxa_d, braço_d,
|
181 |
+
pantur_e, coxa_e, braço_e,
|
182 |
+
quadril, abdomem, cintura, tórax,
|
183 |
+
d_tríceps, d_peito, d_sub_axilar, d_subescapular, d_abdominal, d_supra_ilíaca, d_coxa,
|
184 |
+
a_flex, a_post, conc
|
185 |
+
]
|
186 |
+
|
187 |
+
outputs = [
|
188 |
+
Informações_resultados,
|
189 |
+
Conclusão,
|
190 |
+
]
|
191 |
+
|
192 |
+
button_1.click(imc, inputs=inputs, outputs=outputs)
|
193 |
+
|
194 |
+
if __name__ == "__main__":
|
195 |
+
interface.launch(debug=True)
|