DavidSB commited on
Commit
9028d9a
·
verified ·
1 Parent(s): c7f935b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +96 -8
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)