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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +158 -225
app.py CHANGED
@@ -3,260 +3,193 @@ import cv2
3
  import numpy as np
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)
78
-
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,
86
- dp=1,
87
- minDist=50,
88
- param1=50,
89
- param2=30,
90
- minRadius=20,
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
-
145
- DADOS DO PACIENTE
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
259
- iface.launch(share=True)
260
 
261
  if __name__ == "__main__":
262
- main()
 
 
3
  import numpy as np
4
  from PIL import Image
5
  import io
6
+ from collections import defaultdict
7
 
8
+ def analisar_condicoes(regiao, dados):
9
+ """
10
+ Analisa e sumariza as condições encontradas para cada região
11
+ """
12
+ condicoes = defaultdict(int)
13
+ for dado in dados:
14
+ for linha in dado.split('\n'):
15
+ if f'Região: {regiao}' in linha:
16
+ if 'congestão/inflamação' in linha:
17
+ condicoes['congestao_inflamacao'] += 1
18
+ if 'deficiência/hipofunção' in linha:
19
+ condicoes['deficiencia_hipofuncao'] += 1
20
+ if 'atrofia/degeneração' in linha:
21
+ condicoes['atrofia_degeneracao'] += 1
22
+ if 'irritação/estresse' in linha:
23
+ condicoes['irritacao_estresse'] += 1
24
+ return condicoes
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
+ def gerar_diagnostico(regiao, condicoes, total_ocorrencias):
27
  """
28
+ Gera um diagnóstico baseado na frequência das condições
29
  """
30
+ diagnostico = []
31
+ limiar = total_ocorrencias * 0.3 # 30% de ocorrências como limiar
32
+
33
+ if condicoes['congestao_inflamacao'] > limiar:
34
+ diagnostico.append("Processo inflamatório crônico")
35
+ if condicoes['deficiencia_hipofuncao'] > limiar:
36
+ diagnostico.append("Função reduzida ou comprometida")
37
+ if condicoes['atrofia_degeneracao'] > limiar:
38
+ diagnostico.append("Sinais de desgaste tecidual")
39
+ if condicoes['irritacao_estresse'] > limiar:
40
+ diagnostico.append("Sobrecarga funcional")
41
+
42
+ return diagnostico
 
 
 
 
 
 
 
 
 
43
 
44
+ def processar_analise_iridologica(dados_analise):
45
  """
46
+ Processa os dados da análise iridológica e gera um relatório estruturado
47
  """
48
+ # Identificar todas as regiões únicas
49
+ regioes = set()
50
+ for linha in dados_analise.split('\n'):
51
+ if linha.startswith('Região: '):
52
+ regiao = linha.split('Região: ')[1].strip()
53
+ regioes.add(regiao)
54
+
55
+ # Analisar cada região
56
+ resultados = {}
57
+ for regiao in regioes:
58
+ condicoes = analisar_condicoes(regiao, [dados_analise])
59
+ diagnostico = gerar_diagnostico(regiao, condicoes, len(dados_analise.split('\n')))
60
+ if diagnostico:
61
+ resultados[regiao] = diagnostico
62
+
63
+ return resultados
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
 
65
+ def gerar_recomendacoes(diagnostico):
66
  """
67
+ Gera recomendações baseadas no diagnóstico
68
  """
69
+ recomendacoes = {
70
+ "Processo inflamatório crônico": [
71
+ "Avaliação médica específica para a região",
72
+ "Considerar anti-inflamatórios naturais",
73
+ "Reduzir alimentos inflamatórios",
74
+ "Aumentar consumo de água"
75
+ ],
76
+ "Função reduzida ou comprometida": [
77
+ "Suplementação nutricional específica",
78
+ "Avaliação de deficiências nutricionais",
79
+ "Ajuste na dieta para suporte funcional",
80
+ "Exercícios apropriados para estimulação"
81
+ ],
82
+ "Sinais de desgaste tecidual": [
83
+ "Suporte nutricional para regeneração",
84
+ "Redução de fatores estressantes",
85
+ "Avaliação de minerais e vitaminas",
86
+ "Considerar terapias regenerativas"
87
+ ],
88
+ "Sobrecarga funcional": [
89
+ "Técnicas de gerenciamento de estresse",
90
+ "Adequação do ritmo de atividades",
91
+ "Suporte adaptogênico",
92
+ "Melhoria da qualidade do sono"
93
+ ]
94
+ }
95
+ return recomendacoes
96
+
97
+ def criar_interface():
98
  """
99
+ Cria a interface do usuário com Gradio
100
+ """
101
+ def analisar(texto_analise):
102
+ resultados = processar_analise_iridologica(texto_analise)
103
+ recomendacoes = gerar_recomendacoes(resultados)
104
+
105
+ # Formatar saída
106
+ saida = "ANÁLISE IRIDOLÓGICA DETALHADA\n\n"
107
+
108
+ # Agrupar por sistemas
109
+ sistemas = {
110
+ "Sistema Nervoso": ["Cerebro", "Sistema Nervoso"],
111
+ "Sistema Digestivo": ["Estomago", "Figado", "Vesicula", "Pancreas", "Sistema Digestivo",
112
+ "Intestino Grosso", "Intestino Delgado", "Apendice"],
113
+ "Sistema Circulatório": ["Coracao"],
114
+ "Sistema Urinário": ["Rim Direito", "Rim Esquerdo", "Bexiga"],
115
+ "Sistema Endócrino": ["Tireoide"],
116
+ "Sistema Respiratório": ["Pulmao", "Bronquios"],
117
+ "Sistema Reprodutor": ["Sistema Reprodutor"]
118
+ }
119
+
120
+ for sistema, orgaos in sistemas.items():
121
+ saida += f"\n{sistema.upper()}:\n"
122
+ encontrado = False
123
+ for orgao in orgaos:
124
+ if orgao in resultados:
125
+ encontrado = True
126
+ saida += f"\n• {orgao}:\n"
127
+ for diagnostico in resultados[orgao]:
128
+ saida += f" - {diagnostico}\n"
129
+ if diagnostico in recomendacoes:
130
+ saida += " Recomendações:\n"
131
+ for rec in recomendacoes[diagnostico]:
132
+ saida += f" * {rec}\n"
133
+ if not encontrado:
134
+ saida += " Sem alterações significativas\n"
135
+
136
+ return saida
137
 
138
+ # Interface
139
+ with gr.Blocks(title="Análise Iridológica Avançada") as interface:
 
 
 
 
 
 
 
 
 
 
 
 
140
  gr.Markdown("""
141
+ # Sistema de Análise Iridológica Avançada
142
+ Este sistema analisa os dados iridológicos e fornece um relatório detalhado com recomendações.
143
  """)
144
 
145
  with gr.Tabs():
146
+ with gr.Tab("Análise Completa"):
147
+ input_text = gr.Textbox(
148
+ label="Dados da Análise Iridológica",
149
+ lines=10,
150
+ placeholder="Cole os dados da análise aqui..."
151
+ )
152
+ analysis_btn = gr.Button("Analisar Dados", variant="primary")
153
+ output_text = gr.Textbox(
154
+ label="Relatório de Análise",
155
+ lines=30
 
 
 
 
 
156
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
 
158
+ analysis_btn.click(
159
+ fn=analisar,
160
+ inputs=[input_text],
161
+ outputs=[output_text]
162
  )
163
 
164
+ with gr.Tab("Informações"):
 
165
  gr.Markdown("""
166
+ ## Sobre a Análise Iridológica Avançada
167
 
168
+ Este sistema utiliza algoritmos avançados para:
 
 
 
 
169
 
170
+ 1. Analisar padrões nas observações iridológicas
171
+ 2. Identificar tendências e correlações
172
+ 3. Gerar recomendações personalizadas
173
+ 4. Agrupar resultados por sistemas corporais
174
 
175
+ ### Interpretação dos Resultados
 
 
 
176
 
177
+ O sistema considera quatro principais categorias de alterações:
 
 
178
 
179
+ * Processos inflamatórios crônicos
180
+ * Funções reduzidas ou comprometidas
181
+ * Sinais de desgaste tecidual
182
+ * Sobrecargas funcionais
183
 
184
  ### Observações Importantes
185
+
186
+ * Os resultados são baseados em análise estatística das observações
187
+ * As recomendações são gerais e devem ser personalizadas por profissional
188
+ * Este é um sistema de suporte à decisão, não um diagnóstico definitivo
189
  """)
190
 
191
+ return interface
 
192
 
193
  if __name__ == "__main__":
194
+ interface = criar_interface()
195
+ interface.launch(share=True)