File size: 9,242 Bytes
7b945e6
78b9561
5db4e41
d600704
 
 
7d708d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d600704
 
7d708d8
d600704
 
 
6f86360
d600704
 
6f86360
7d708d8
d600704
 
 
 
 
 
 
 
 
 
6f86360
d600704
7d708d8
d600704
 
 
 
7d708d8
 
d600704
7d708d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d600704
7d708d8
d600704
7d708d8
d600704
7d708d8
d600704
7d708d8
d600704
 
7d708d8
d600704
 
6f86360
d600704
 
 
 
7d708d8
 
d600704
7d708d8
 
 
 
 
 
 
 
d600704
 
7d708d8
d600704
 
7d708d8
d600704
7d708d8
 
d600704
 
 
 
7d708d8
6f86360
d600704
7d708d8
 
 
 
 
 
d600704
 
7d708d8
 
d600704
 
7d708d8
 
 
d600704
 
7d708d8
d600704
 
 
 
 
 
 
7d708d8
 
d600704
 
 
 
 
7d708d8
 
 
d600704
 
7d708d8
 
d600704
 
7d708d8
 
 
d600704
 
7d708d8
 
d600704
7d708d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d600704
7d708d8
 
 
d600704
7d708d8
 
 
 
d600704
7d708d8
 
 
 
 
d600704
 
 
 
a75511c
7b945e6
d600704
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
import gradio as gr
import cv2
import numpy as np
from PIL import Image
import io

# Dicionário de áreas da íris e suas correlações com órgãos/sistemas
MAPA_IRIDOLOGICO = {
    "superior": {
        "cerebro": (330, 30),
        "sistema_nervoso": (0, 30),
    },
    "superior_direito": {
        "pulmao": (30, 60),
        "bronquios": (45, 60),
    },
    "direito": {
        "figado": (60, 120),
        "vesicula": (75, 120),
        "rim_direito": (90, 120),
    },
    "inferior_direito": {
        "intestino_grosso": (120, 150),
        "apendice": (135, 150),
    },
    "inferior": {
        "sistema_digestivo": (150, 210),
        "intestino_delgado": (180, 210),
    },
    "inferior_esquerdo": {
        "bexiga": (210, 240),
        "sistema_reprodutor": (225, 240),
    },
    "esquerdo": {
        "estomago": (240, 300),
        "pancreas": (255, 300),
        "rim_esquerdo": (270, 300),
    },
    "superior_esquerdo": {
        "coracao": (300, 330),
        "tireoide": (315, 330),
    }
}

def analisar_caracteristicas_iris(roi, setor):
    """
    Analisa características específicas de um setor da íris
    """
    if roi.size == 0:
        return []
    
    media = np.mean(roi)
    std = np.std(roi)
    
    # Análise de padrões específicos
    alteracoes = []
    
    # Análise de densidade
    if media < 85:  # Área escura
        alteracoes.append("Possível congestão/inflamação")
    elif media > 170:  # Área clara
        alteracoes.append("Possível deficiência/hipofunção")
        
    # Análise de textura
    if std > 45:  # Alta variação
        alteracoes.append("Sinais de irritação/estresse")
    elif std < 15:  # Baixa variação
        alteracoes.append("Possível atrofia/degeneração")
        
    return alteracoes

def analisar_iris(imagem):
    """
    Realiza análise completa da íris com foco em indicadores de saúde
    """
    # Converter para array numpy
    img_array = np.array(imagem)
    
    # Converter para escala de cinza
    gray = cv2.cvtColor(img_array, cv2.COLOR_RGB2GRAY)
    
    # Detectar círculos (íris)
    circles = cv2.HoughCircles(
        gray,
        cv2.HOUGH_GRADIENT,
        dp=1,
        minDist=50,
        param1=50,
        param2=30,
        minRadius=20,
        maxRadius=100
    )
    
    output = img_array.copy()
    analise_detalhada = []
    
    if circles is not None:
        circles = np.uint16(np.around(circles))
        for i in circles[0, :]:
            center = (i[0], i[1])
            radius = i[2]
            
            # Desenhar círculo da íris
            cv2.circle(output, center, radius, (0, 255, 0), 2)
            
            # Análise por setores
            for setor, orgaos in MAPA_IRIDOLOGICO.items():
                for orgao, (ang_inicio, ang_fim) in orgaos.items():
                    # Criar máscara para o setor
                    mask = np.zeros_like(gray)
                    cv2.ellipse(mask, center, (radius, radius), 0, ang_inicio, ang_fim, 255, -1)
                    
                    # Região de interesse
                    roi = cv2.bitwise_and(gray, gray, mask=mask)
                    
                    # Analisar características
                    alteracoes = analisar_caracteristicas_iris(roi[roi != 0], setor)
                    
                    if alteracoes:
                        # Desenhar indicador no setor
                        ang_medio = np.radians((ang_inicio + ang_fim) / 2)
                        pt_x = int(center[0] + (radius * 0.8) * np.cos(ang_medio))
                        pt_y = int(center[1] + (radius * 0.8) * np.sin(ang_medio))
                        cv2.circle(output, (pt_x, pt_y), 3, (0, 0, 255), -1)
                        
                        # Adicionar à análise
                        orgao_formatado = orgao.replace("_", " ").title()
                        analise_detalhada.append(f"\nRegião: {orgao_formatado}")
                        for alt in alteracoes:
                            analise_detalhada.append(f"- {alt}")
    
    return output, "\n".join(analise_detalhada)

def gerar_relatorio_saude(imagem, nome_paciente, idade, data_analise, sintomas):
    """
    Gera relatório completo com análise de saúde
    """
    resultado_imagem, analise = analisar_iris(imagem)
    
    relatorio = f"""
    RELATÓRIO DE ANÁLISE IRIDOLÓGICA - AVALIAÇÃO DE SAÚDE
    
    Data: {data_analise}
    
    DADOS DO PACIENTE
    Nome: {nome_paciente}
    Idade: {idade}
    
    SINTOMAS RELATADOS
    {sintomas}
    
    ANÁLISE IRIDOLÓGICA DETALHADA
    {analise}
    
    OBSERVAÇÕES IMPORTANTES
    - Esta análise é baseada em princípios da iridologia
    - Os resultados são indicativos e não substituem diagnóstico médico
    - Recomenda-se consulta com profissionais de saúde para avaliação completa
    - Alterações identificadas podem ter diferentes significados clínicos
    """
    
    return resultado_imagem, relatorio

def main():
    # Configuração do tema moderno
    theme = gr.themes.Soft(
        primary_hue="teal",
        secondary_hue="indigo",
    ).set(
        body_background_fill="*neutral_50",
        block_background_fill="*neutral_100",
        button_primary_background_fill="*primary_500",
        button_primary_background_fill_dark="*primary_600",
    )
    
    # Interface principal
    with gr.Blocks(theme=theme, title="Análise Iridológica - Avaliação de Saúde") as iface:
        gr.Markdown("""
        # Sistema Avançado de Análise Iridológica
        ### Avaliação de Indicadores de Saúde através da Íris
        """)
        
        with gr.Tabs():
            # Aba de Análise Rápida
            with gr.Tab("Análise Rápida"):
                with gr.Row():
                    with gr.Column():
                        input_image = gr.Image(label="Upload da Imagem da Íris", type="pil")
                        analyze_btn = gr.Button("Analisar Íris", variant="primary")
                    
                    with gr.Column():
                        output_image = gr.Image(label="Íris Analisada")
                        output_text = gr.Textbox(label="Indicadores Identificados", lines=10)
                
                analyze_btn.click(
                    fn=analisar_iris,
                    inputs=[input_image],
                    outputs=[output_image, output_text]
                )
            
            # Aba de Relatório Detalhado
            with gr.Tab("Relatório Detalhado"):
                with gr.Row():
                    with gr.Column():
                        nome_input = gr.Textbox(label="Nome do Paciente")
                        idade_input = gr.Number(label="Idade", minimum=0, maximum=120)
                        data_input = gr.Textbox(label="Data da Análise")
                        sintomas_input = gr.Textbox(label="Sintomas Relatados", lines=3)
                        report_image = gr.Image(label="Imagem da Íris", type="pil")
                        report_btn = gr.Button("Gerar Relatório Completo", variant="primary")
                    
                    with gr.Column():
                        report_output_image = gr.Image(label="Íris Analisada")
                        report_output = gr.Textbox(label="Relatório de Saúde", lines=15)
                
                report_btn.click(
                    fn=gerar_relatorio_saude,
                    inputs=[report_image, nome_input, idade_input, data_input, sintomas_input],
                    outputs=[report_output_image, report_output]
                )
            
            # Aba de Referência
            with gr.Tab("Guia de Referência"):
                gr.Markdown("""
                ## Guia de Interpretação Iridológica
                
                ### Significados das Análises
                - Áreas Escuras: Podem indicar congestão ou inflamação
                - Áreas Claras: Podem indicar deficiência ou hipofunção
                - Texturas Irregulares: Podem indicar irritação ou estresse
                - Marcas Radiais: Podem indicar tensão ou sobrecarga
                
                ### Regiões da Íris e Correlações
                1. Região Superior
                   - Cérebro e Sistema Nervoso
                
                2. Região Direita
                   - Fígado
                   - Vesícula Biliar
                   - Rim Direito
                
                3. Região Inferior
                   - Sistema Digestivo
                   - Intestinos
                
                4. Região Esquerda
                   - Coração
                   - Estômago
                   - Rim Esquerdo
                
                ### Observações Importantes
                - A análise iridológica é uma ferramenta complementar
                - Não substitui diagnósticos médicos convencionais
                - Deve ser usada em conjunto com outros métodos de avaliação
                - Consulte sempre profissionais de saúde qualificados
                """)
    
    # Iniciar a interface
    iface.launch(share=True)

if __name__ == "__main__":
    main()