DHEIVER commited on
Commit
7d708d8
·
verified ·
1 Parent(s): d600704

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +170 -75
app.py CHANGED
@@ -4,9 +4,74 @@ import numpy as np
4
  from PIL import Image
5
  import io
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  def analisar_iris(imagem):
8
  """
9
- Função para analisar a íris através de processamento de imagem
10
  """
11
  # Converter para array numpy
12
  img_array = np.array(imagem)
@@ -14,7 +79,7 @@ def analisar_iris(imagem):
14
  # Converter para escala de cinza
15
  gray = cv2.cvtColor(img_array, cv2.COLOR_RGB2GRAY)
16
 
17
- # Detectar círculos (íris) usando transformada de Hough
18
  circles = cv2.HoughCircles(
19
  gray,
20
  cv2.HOUGH_GRADIENT,
@@ -26,51 +91,54 @@ def analisar_iris(imagem):
26
  maxRadius=100
27
  )
28
 
29
- # Criar cópia da imagem para desenhar
30
  output = img_array.copy()
31
-
32
- resultados = []
33
 
34
  if circles is not None:
35
  circles = np.uint16(np.around(circles))
36
  for i in circles[0, :]:
37
- # Desenhar círculo externo
38
- cv2.circle(output, (i[0], i[1]), i[2], (0, 255, 0), 2)
39
- # Desenhar centro
40
- cv2.circle(output, (i[0], i[1]), 2, (0, 0, 255), 3)
41
 
42
- # Análise de características
43
- roi = gray[i[1]-i[2]:i[1]+i[2], i[0]-i[2]:i[0]+i[2]]
44
- if roi.size > 0:
45
- media = np.mean(roi)
46
- std = np.std(roi)
47
-
48
- resultados.append(f"Análise da Íris:")
49
- resultados.append(f"- Densidade média: {media:.2f}")
50
- resultados.append(f"- Variação de textura: {std:.2f}")
51
-
52
- # Análise de setores
53
- altura, largura = roi.shape
54
- setor_superior = np.mean(roi[:altura//3, :])
55
- setor_medio = np.mean(roi[altura//3:2*altura//3, :])
56
- setor_inferior = np.mean(roi[2*altura//3:, :])
57
-
58
- resultados.append("\nAnálise por Setores:")
59
- resultados.append(f"- Setor Superior: {setor_superior:.2f}")
60
- resultados.append(f"- Setor Médio: {setor_medio:.2f}")
61
- resultados.append(f"- Setor Inferior: {setor_inferior:.2f}")
 
 
 
 
 
 
 
 
62
 
63
- return output, "\n".join(resultados)
64
 
65
- def gerar_relatorio(imagem, nome_paciente, idade, data_analise):
66
  """
67
- Função para gerar relatório completo da análise
68
  """
69
- img_array = np.array(imagem)
70
- resultado_analise, metricas = analisar_iris(imagem)
71
 
72
  relatorio = f"""
73
- RELATÓRIO DE ANÁLISE IRIDOLÓGICA
74
 
75
  Data: {data_analise}
76
 
@@ -78,86 +146,113 @@ def gerar_relatorio(imagem, nome_paciente, idade, data_analise):
78
  Nome: {nome_paciente}
79
  Idade: {idade}
80
 
81
- ANÁLISE TÉCNICA
82
- {metricas}
83
 
84
- OBSERVAÇÕES GERAIS
85
- - Análise realizada com processamento computadorizado de imagem
86
- - Recomenda-se acompanhamento profissional para interpretação detalhada
 
 
 
 
 
87
  """
88
 
89
- return relatorio
90
 
91
  def main():
92
- # Configuração do tema
93
  theme = gr.themes.Soft(
94
- primary_hue="blue",
95
- secondary_hue="gray",
96
  ).set(
97
  body_background_fill="*neutral_50",
98
  block_background_fill="*neutral_100",
99
  button_primary_background_fill="*primary_500",
 
100
  )
101
 
102
- # Criação da interface
103
- with gr.Blocks(theme=theme, title="Análise Iridológica") as iface:
104
- gr.Markdown("# Sistema de Análise Iridológica")
 
 
 
105
 
106
  with gr.Tabs():
107
- # Aba de Análise Básica
108
- with gr.Tab("Análise Básica"):
109
  with gr.Row():
110
  with gr.Column():
111
- input_image = gr.Image(label="Carregar Imagem da Íris", type="pil")
 
 
112
  with gr.Column():
113
  output_image = gr.Image(label="Íris Analisada")
114
- output_text = gr.Textbox(label="Resultados da Análise", lines=10)
115
 
116
- analyze_btn = gr.Button("Realizar Análise", variant="primary")
117
  analyze_btn.click(
118
  fn=analisar_iris,
119
  inputs=[input_image],
120
  outputs=[output_image, output_text]
121
  )
122
 
123
- # Aba de Relatório Completo
124
- with gr.Tab("Relatório Completo"):
125
  with gr.Row():
126
  with gr.Column():
127
  nome_input = gr.Textbox(label="Nome do Paciente")
128
  idade_input = gr.Number(label="Idade", minimum=0, maximum=120)
129
  data_input = gr.Textbox(label="Data da Análise")
130
- report_image = gr.Image(label="Carregar Imagem da Íris", type="pil")
 
 
131
 
132
  with gr.Column():
133
- report_output = gr.Textbox(label="Relatório Completo", lines=15)
 
134
 
135
- report_btn = gr.Button("Gerar Relatório", variant="primary")
136
  report_btn.click(
137
- fn=gerar_relatorio,
138
- inputs=[report_image, nome_input, idade_input, data_input],
139
- outputs=[report_output]
140
  )
141
 
142
- # Aba de Informações
143
- with gr.Tab("Informações"):
144
  gr.Markdown("""
145
- ## Sobre a Análise Iridológica
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
 
147
- A iridologia é uma técnica de análise que estuda os sinais presentes na íris dos olhos
148
- para avaliar características e condições do organismo. Este sistema realiza uma análise
149
- computadorizada preliminar, que deve ser interpretada por um profissional qualificado.
150
 
151
- ### Recursos do Sistema:
152
- 1. Análise básica da íris com detecção automática
153
- 2. Medições de densidade e textura
154
- 3. Análise setorial da íris
155
- 4. Geração de relatórios personalizados
156
 
157
- ### Recomendações:
158
- - Utilize fotos em boa resolução
159
- - Certifique-se de que a íris está bem iluminada
160
- - A imagem deve estar focada e nítida
 
161
  """)
162
 
163
  # Iniciar a interface
 
4
  from PIL import Image
5
  import io
6
 
7
+ # Dicionário de áreas da íris e suas correlações com órgãos/sistemas
8
+ MAPA_IRIDOLOGICO = {
9
+ "superior": {
10
+ "cerebro": (330, 30),
11
+ "sistema_nervoso": (0, 30),
12
+ },
13
+ "superior_direito": {
14
+ "pulmao": (30, 60),
15
+ "bronquios": (45, 60),
16
+ },
17
+ "direito": {
18
+ "figado": (60, 120),
19
+ "vesicula": (75, 120),
20
+ "rim_direito": (90, 120),
21
+ },
22
+ "inferior_direito": {
23
+ "intestino_grosso": (120, 150),
24
+ "apendice": (135, 150),
25
+ },
26
+ "inferior": {
27
+ "sistema_digestivo": (150, 210),
28
+ "intestino_delgado": (180, 210),
29
+ },
30
+ "inferior_esquerdo": {
31
+ "bexiga": (210, 240),
32
+ "sistema_reprodutor": (225, 240),
33
+ },
34
+ "esquerdo": {
35
+ "estomago": (240, 300),
36
+ "pancreas": (255, 300),
37
+ "rim_esquerdo": (270, 300),
38
+ },
39
+ "superior_esquerdo": {
40
+ "coracao": (300, 330),
41
+ "tireoide": (315, 330),
42
+ }
43
+ }
44
+
45
+ def analisar_caracteristicas_iris(roi, setor):
46
+ """
47
+ Analisa características específicas de um setor da íris
48
+ """
49
+ if roi.size == 0:
50
+ return []
51
+
52
+ media = np.mean(roi)
53
+ std = np.std(roi)
54
+
55
+ # Análise de padrões específicos
56
+ alteracoes = []
57
+
58
+ # Análise de densidade
59
+ if media < 85: # Área escura
60
+ alteracoes.append("Possível congestão/inflamação")
61
+ elif media > 170: # Área clara
62
+ alteracoes.append("Possível deficiência/hipofunção")
63
+
64
+ # Análise de textura
65
+ if std > 45: # Alta variação
66
+ alteracoes.append("Sinais de irritação/estresse")
67
+ elif std < 15: # Baixa variação
68
+ alteracoes.append("Possível atrofia/degeneração")
69
+
70
+ return alteracoes
71
+
72
  def analisar_iris(imagem):
73
  """
74
+ Realiza análise completa da íris com foco em indicadores de saúde
75
  """
76
  # Converter para array numpy
77
  img_array = np.array(imagem)
 
79
  # Converter para escala de cinza
80
  gray = cv2.cvtColor(img_array, cv2.COLOR_RGB2GRAY)
81
 
82
+ # Detectar círculos (íris)
83
  circles = cv2.HoughCircles(
84
  gray,
85
  cv2.HOUGH_GRADIENT,
 
91
  maxRadius=100
92
  )
93
 
 
94
  output = img_array.copy()
95
+ analise_detalhada = []
 
96
 
97
  if circles is not None:
98
  circles = np.uint16(np.around(circles))
99
  for i in circles[0, :]:
100
+ center = (i[0], i[1])
101
+ radius = i[2]
 
 
102
 
103
+ # Desenhar círculo da íris
104
+ cv2.circle(output, center, radius, (0, 255, 0), 2)
105
+
106
+ # Análise por setores
107
+ for setor, orgaos in MAPA_IRIDOLOGICO.items():
108
+ for orgao, (ang_inicio, ang_fim) in orgaos.items():
109
+ # Criar máscara para o setor
110
+ mask = np.zeros_like(gray)
111
+ cv2.ellipse(mask, center, (radius, radius), 0, ang_inicio, ang_fim, 255, -1)
112
+
113
+ # Região de interesse
114
+ roi = cv2.bitwise_and(gray, gray, mask=mask)
115
+
116
+ # Analisar características
117
+ alteracoes = analisar_caracteristicas_iris(roi[roi != 0], setor)
118
+
119
+ if alteracoes:
120
+ # Desenhar indicador no setor
121
+ ang_medio = np.radians((ang_inicio + ang_fim) / 2)
122
+ pt_x = int(center[0] + (radius * 0.8) * np.cos(ang_medio))
123
+ pt_y = int(center[1] + (radius * 0.8) * np.sin(ang_medio))
124
+ cv2.circle(output, (pt_x, pt_y), 3, (0, 0, 255), -1)
125
+
126
+ # Adicionar à análise
127
+ orgao_formatado = orgao.replace("_", " ").title()
128
+ analise_detalhada.append(f"\nRegião: {orgao_formatado}")
129
+ for alt in alteracoes:
130
+ analise_detalhada.append(f"- {alt}")
131
 
132
+ return output, "\n".join(analise_detalhada)
133
 
134
+ def gerar_relatorio_saude(imagem, nome_paciente, idade, data_analise, sintomas):
135
  """
136
+ Gera relatório completo com análise de saúde
137
  """
138
+ resultado_imagem, analise = analisar_iris(imagem)
 
139
 
140
  relatorio = f"""
141
+ RELATÓRIO DE ANÁLISE IRIDOLÓGICA - AVALIAÇÃO DE SAÚDE
142
 
143
  Data: {data_analise}
144
 
 
146
  Nome: {nome_paciente}
147
  Idade: {idade}
148
 
149
+ SINTOMAS RELATADOS
150
+ {sintomas}
151
 
152
+ ANÁLISE IRIDOLÓGICA DETALHADA
153
+ {analise}
154
+
155
+ OBSERVAÇÕES IMPORTANTES
156
+ - Esta análise é baseada em princípios da iridologia
157
+ - Os resultados são indicativos e não substituem diagnóstico médico
158
+ - Recomenda-se consulta com profissionais de saúde para avaliação completa
159
+ - Alterações identificadas podem ter diferentes significados clínicos
160
  """
161
 
162
+ return resultado_imagem, relatorio
163
 
164
  def main():
165
+ # Configuração do tema moderno
166
  theme = gr.themes.Soft(
167
+ primary_hue="teal",
168
+ secondary_hue="indigo",
169
  ).set(
170
  body_background_fill="*neutral_50",
171
  block_background_fill="*neutral_100",
172
  button_primary_background_fill="*primary_500",
173
+ button_primary_background_fill_dark="*primary_600",
174
  )
175
 
176
+ # Interface principal
177
+ with gr.Blocks(theme=theme, title="Análise Iridológica - Avaliação de Saúde") as iface:
178
+ gr.Markdown("""
179
+ # Sistema Avançado de Análise Iridológica
180
+ ### Avaliação de Indicadores de Saúde através da Íris
181
+ """)
182
 
183
  with gr.Tabs():
184
+ # Aba de Análise Rápida
185
+ with gr.Tab("Análise Rápida"):
186
  with gr.Row():
187
  with gr.Column():
188
+ input_image = gr.Image(label="Upload da Imagem da Íris", type="pil")
189
+ analyze_btn = gr.Button("Analisar Íris", variant="primary")
190
+
191
  with gr.Column():
192
  output_image = gr.Image(label="Íris Analisada")
193
+ output_text = gr.Textbox(label="Indicadores Identificados", lines=10)
194
 
 
195
  analyze_btn.click(
196
  fn=analisar_iris,
197
  inputs=[input_image],
198
  outputs=[output_image, output_text]
199
  )
200
 
201
+ # Aba de Relatório Detalhado
202
+ with gr.Tab("Relatório Detalhado"):
203
  with gr.Row():
204
  with gr.Column():
205
  nome_input = gr.Textbox(label="Nome do Paciente")
206
  idade_input = gr.Number(label="Idade", minimum=0, maximum=120)
207
  data_input = gr.Textbox(label="Data da Análise")
208
+ sintomas_input = gr.Textbox(label="Sintomas Relatados", lines=3)
209
+ report_image = gr.Image(label="Imagem da Íris", type="pil")
210
+ report_btn = gr.Button("Gerar Relatório Completo", variant="primary")
211
 
212
  with gr.Column():
213
+ report_output_image = gr.Image(label="Íris Analisada")
214
+ report_output = gr.Textbox(label="Relatório de Saúde", lines=15)
215
 
 
216
  report_btn.click(
217
+ fn=gerar_relatorio_saude,
218
+ inputs=[report_image, nome_input, idade_input, data_input, sintomas_input],
219
+ outputs=[report_output_image, report_output]
220
  )
221
 
222
+ # Aba de Referência
223
+ with gr.Tab("Guia de Referência"):
224
  gr.Markdown("""
225
+ ## Guia de Interpretação Iridológica
226
+
227
+ ### Significados das Análises
228
+ - Áreas Escuras: Podem indicar congestão ou inflamação
229
+ - Áreas Claras: Podem indicar deficiência ou hipofunção
230
+ - Texturas Irregulares: Podem indicar irritação ou estresse
231
+ - Marcas Radiais: Podem indicar tensão ou sobrecarga
232
+
233
+ ### Regiões da Íris e Correlações
234
+ 1. Região Superior
235
+ - Cérebro e Sistema Nervoso
236
+
237
+ 2. Região Direita
238
+ - Fígado
239
+ - Vesícula Biliar
240
+ - Rim Direito
241
 
242
+ 3. Região Inferior
243
+ - Sistema Digestivo
244
+ - Intestinos
245
 
246
+ 4. Região Esquerda
247
+ - Coração
248
+ - Estômago
249
+ - Rim Esquerdo
 
250
 
251
+ ### Observações Importantes
252
+ - A análise iridológica é uma ferramenta complementar
253
+ - Não substitui diagnósticos médicos convencionais
254
+ - Deve ser usada em conjunto com outros métodos de avaliação
255
+ - Consulte sempre profissionais de saúde qualificados
256
  """)
257
 
258
  # Iniciar a interface