Update app.py
Browse files
app.py
CHANGED
@@ -1,5 +1,17 @@
|
|
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,
|
@@ -10,6 +22,11 @@ def imc(nome, idade, avaliador, confea,
|
|
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)
|
@@ -45,8 +62,10 @@ def imc(nome, idade, avaliador, confea,
|
|
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
|
@@ -57,7 +76,7 @@ def imc(nome, idade, avaliador, confea,
|
|
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 |
|
@@ -83,13 +102,9 @@ def imc(nome, idade, avaliador, confea,
|
|
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"""
|
@@ -98,10 +113,78 @@ def imc(nome, idade, avaliador, confea,
|
|
98 |
Obs: {obs}
|
99 |
"""
|
100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
# OUTPUTS
|
102 |
return (
|
103 |
Informações_resultados,
|
104 |
Conclusão,
|
|
|
|
|
105 |
)
|
106 |
|
107 |
# Interface Gradio
|
@@ -173,6 +256,9 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="sky", secondary_hue="sky")) as
|
|
173 |
with gr.Column():
|
174 |
Informações_resultados = gr.Textbox(label="Informações e resultados")
|
175 |
Conclusão = gr.Textbox(label="Conclusão da avaliação")
|
|
|
|
|
|
|
176 |
|
177 |
|
178 |
inputs = [
|
@@ -188,9 +274,11 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="sky", secondary_hue="sky")) as
|
|
188 |
outputs = [
|
189 |
Informações_resultados,
|
190 |
Conclusão,
|
|
|
|
|
191 |
]
|
192 |
|
193 |
button_1.click(imc, inputs=inputs, outputs=outputs)
|
194 |
|
195 |
if __name__ == "__main__":
|
196 |
-
interface.launch(debug=True)
|
|
|
1 |
import pandas as pd
|
2 |
import gradio as gr
|
3 |
+
import plotly.express as px
|
4 |
+
import plotly.graph_objects as go
|
5 |
+
import plotly.io as pio
|
6 |
+
from docx import Document
|
7 |
+
from docx.shared import Pt
|
8 |
+
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
|
9 |
+
from docx.shared import Inches
|
10 |
+
from docx.oxml.ns import qn
|
11 |
+
from docx.oxml import OxmlElement
|
12 |
+
from docx.shared import RGBColor
|
13 |
+
from fpdf import FPDF
|
14 |
+
from datetime import datetime
|
15 |
|
16 |
# Função para avaliação de gordura corporal
|
17 |
def imc(nome, idade, avaliador, confea,
|
|
|
22 |
d_tríceps, d_peito, d_sub_axilar, d_subescapular, d_abdominal, d_supra_ilíaca, d_coxa,
|
23 |
a_flex, a_post, conc):
|
24 |
|
25 |
+
# Cria uma variável com a data do dia
|
26 |
+
data_hoje = datetime.now().date()
|
27 |
+
# Formata a data no formato dd-mm-aaaa
|
28 |
+
data_formatada = data_hoje.strftime('%d-%m-%Y')
|
29 |
+
|
30 |
# Converter os valores para float
|
31 |
peso = float(peso)
|
32 |
altura = float(altura)
|
|
|
62 |
soma_dob = d_tríceps + d_peito + d_sub_axilar + d_subescapular + d_abdominal + d_supra_ilíaca + d_coxa
|
63 |
|
64 |
# Percentual de gordura
|
65 |
+
#perc_g = (495 / (1.10938 - (0.0008267 * soma_dob) + (0.0000016 * soma_dob * soma_dob) - (0.0002574 * idade))) - 450
|
66 |
+
perc_g_1 = 1.112-0.00043499 * (soma_dob) + 0.00000055 * (soma_dob) * 2 - 0.00028826 * (idade)
|
67 |
+
perc_g = (495 / perc_g_1) - 450
|
68 |
+
|
69 |
# Peso gordo e peso magro
|
70 |
peso_g = peso * (perc_g / 100)
|
71 |
peso_m = peso - peso_g
|
|
|
76 |
# Ingesta calórica de equilíbrio
|
77 |
ice = (gcb * 0.2) + gcb
|
78 |
|
79 |
+
# Observação
|
80 |
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."
|
81 |
|
82 |
|
|
|
102 |
Peso alvo (kg): {peso_alvo:.2f}
|
103 |
Percentual de gordura alvo (%): {perc_g_alvo:.2f}
|
104 |
IMC alvo: {imc_alvo:.2f}
|
|
|
105 |
Avaliação de flexibilidade (sit-and-reach): {a_flex}
|
|
|
106 |
Avaliação postural: {a_post}
|
|
|
107 |
Gasto calórico basal: {gcb:.2f}
|
|
|
108 |
Ingesta calórica de equilíbrio: {ice:.2f}
|
109 |
"""
|
110 |
Conclusão = f"""
|
|
|
113 |
Obs: {obs}
|
114 |
"""
|
115 |
|
116 |
+
# Relatório
|
117 |
+
|
118 |
+
# Criar um novo documento do Word
|
119 |
+
doc = Document()
|
120 |
+
|
121 |
+
# Definir o título do documento
|
122 |
+
doc.add_heading('Avaliação de Índice de Massa Corporal', level=1)
|
123 |
+
|
124 |
+
# Definir as seções do relatório
|
125 |
+
sections = [
|
126 |
+
(Informações_resultados, ""),
|
127 |
+
(Conclusão, ""),
|
128 |
+
]
|
129 |
+
|
130 |
+
for content, title in sections:
|
131 |
+
doc.add_heading(title, level=2)
|
132 |
+
p = doc.add_paragraph()
|
133 |
+
run = p.add_run(str(content))
|
134 |
+
run.font.name = 'Arial'
|
135 |
+
run.font.size = Pt(10)
|
136 |
+
p.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # Define o alinhamento para à esquerda
|
137 |
+
|
138 |
+
|
139 |
+
# Configuração do espaço antes e depois dos parágrafos
|
140 |
+
for paragraph in doc.paragraphs:
|
141 |
+
if paragraph.style.name.startswith('Heading'):
|
142 |
+
paragraph.space_before = Pt(0) # Elimina espaço antes dos títulos
|
143 |
+
else:
|
144 |
+
paragraph.space_before = Pt(0) # Espaço antes do parágrafo (ajuste conforme necessário)
|
145 |
+
paragraph.space_after = Pt(0) # Espaço depois do parágrafo (ajuste conforme necessário)
|
146 |
+
|
147 |
+
# Salvar o documento em um arquivo .doc
|
148 |
+
doc.save('Avaliação_IMC.doc')
|
149 |
+
|
150 |
+
# Abre o documento do Word
|
151 |
+
docx_file = "Avaliação_IMC.doc"
|
152 |
+
doc = Document(docx_file)
|
153 |
+
# Cria um novo arquivo PDF
|
154 |
+
pdf = FPDF()
|
155 |
+
pdf.add_page()
|
156 |
+
# Define a fonte para Arial e o tamanho da fonte
|
157 |
+
pdf.set_font("Arial", size=12)
|
158 |
+
# Itera sobre os parágrafos do documento do Word e adiciona ao PDF
|
159 |
+
for paragraph in doc.paragraphs:
|
160 |
+
pdf.multi_cell(0, 5, paragraph.text)
|
161 |
+
pdf.ln()
|
162 |
+
# Salva o arquivo PDF
|
163 |
+
pdf_file = f"IMC_{nome}_{data_formatada}.pdf"
|
164 |
+
pdf.output(pdf_file)
|
165 |
+
|
166 |
+
# Gráficos
|
167 |
+
data = {
|
168 |
+
"Metric": ["Peso", "Percentual de Gordura", "IMC"],
|
169 |
+
"Atual": [peso, perc_g, imc],
|
170 |
+
"Alvo": [peso_alvo, perc_g_alvo, imc_alvo]
|
171 |
+
}
|
172 |
+
|
173 |
+
df = pd.DataFrame(data)
|
174 |
+
|
175 |
+
fig = go.Figure(data=[
|
176 |
+
go.Bar(name='Atual', x=df["Metric"], y=df["Atual"]),
|
177 |
+
go.Bar(name='Alvo', x=df["Metric"], y=df["Alvo"])
|
178 |
+
])
|
179 |
+
|
180 |
+
fig.update_layout(barmode='group', title="Comparação Atual x Alvo", yaxis_title="Valores")
|
181 |
+
|
182 |
# OUTPUTS
|
183 |
return (
|
184 |
Informações_resultados,
|
185 |
Conclusão,
|
186 |
+
fig,
|
187 |
+
pdf_file,
|
188 |
)
|
189 |
|
190 |
# Interface Gradio
|
|
|
256 |
with gr.Column():
|
257 |
Informações_resultados = gr.Textbox(label="Informações e resultados")
|
258 |
Conclusão = gr.Textbox(label="Conclusão da avaliação")
|
259 |
+
Grafico = gr.Plot(label="Gráfico Comparativo")
|
260 |
+
Avaliação = gr.File(label="Avaliação_IMC")
|
261 |
+
|
262 |
|
263 |
|
264 |
inputs = [
|
|
|
274 |
outputs = [
|
275 |
Informações_resultados,
|
276 |
Conclusão,
|
277 |
+
Grafico,
|
278 |
+
Avaliação
|
279 |
]
|
280 |
|
281 |
button_1.click(imc, inputs=inputs, outputs=outputs)
|
282 |
|
283 |
if __name__ == "__main__":
|
284 |
+
interface.launch(debug=True)
|