File size: 3,619 Bytes
cc85618
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a737d43
cc85618
 
a737d43
cc85618
a737d43
 
 
 
 
 
37089f2
cc85618
 
 
a737d43
cc85618
 
 
 
 
 
a737d43
cc85618
 
 
a737d43
cc85618
 
 
 
 
 
 
a737d43
cc85618
a737d43
cc85618
 
a737d43
cc85618
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a737d43
cc85618
 
 
 
a737d43
cc85618
a737d43
 
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
import gradio as gr
import numpy as np
from analisador_iridologico import (
    pre_processar_imagem, detectar_esclera, detectar_iris_pupila,
    analisar_textura_setorial, validar_metricas, AnalisadorIridologicoNLP
)

def criar_interface():
    theme = gr.themes.Soft(
        primary_hue="teal",
        secondary_hue="green",
    ).set(
        body_text_color="#2A9D8F",
        block_title_text_color="#264653",
        block_label_text_color="#2A9D8F",
        input_background_fill="#E9F5F3",
        button_primary_background_fill="#2A9D8F",
        button_primary_background_fill_dark="#264653",
    )

    def processar_imagem(imagem):
        try:
            imagem_processada = pre_processar_imagem(imagem)
            mask_esclera = detectar_esclera(imagem_processada)
            iris_info, pupil_info = detectar_iris_pupila(imagem_processada, mask_esclera)

            if iris_info is None or pupil_info is None:
                return imagem, "Não foi possível detectar íris ou pupila corretamente."

            analise_setorial = analisar_textura_setorial(imagem_processada, iris_info, pupil_info)

            # Avaliando a circularidade diretamente
            px, py, pr = pupil_info
            area_pupila = np.pi * (pr ** 2)
            area_circunscrita = area_pupila  # Usando a mesma área para simplificação
            circularidade = area_pupila / area_circunscrita if area_circunscrita > 0 else 0
            
            metricas = {
                'pupila': {
                    'raio': pupil_info[2],
                    'circularidade': circularidade
                },
                'iris': {
                    'densidade_media': np.mean([dados['contraste'] for dados in analise_setorial.values()]),
                    'homogeneidade': np.mean([dados['homogeneidade'] for dados in analise_setorial.values()])
                },
            }

            metricas = validar_metricas(metricas)
            analisador = AnalisadorIridologicoNLP()
            interpretacao_nlp = analisador.gerar_interpretacao(metricas)

            relatorio = "ANÁLISE IRIDOLÓGICA DETALHADA\n\n"
            relatorio += "1. MEDIDAS ESTRUTURAIS\n"
            relatorio += f"Pupila: Centro ({pupil_info[0]}, {pupil_info[1]}), Raio {pupil_info[2]}px\n"
            relatorio += "2. ANÁLISE SETORIAL\n"
            for setor, dados in analise_setorial.items():
                relatorio += f"Setor {setor}: Contraste {dados['contraste']}, Homogeneidade {dados['homogeneidade']}\n"
            relatorio += f"3. INTERPRETAÇÃO NLP: {interpretacao_nlp}\n"

            return imagem, relatorio

        except Exception as e:
            return imagem, f"Erro durante o processamento: {str(e)}"

    with gr.Blocks(theme=theme, title="Análise Iridológica Avançada") as interface:
        gr.Markdown("""
        # Sistema Avançado de Análise Iridológica
        ### Detecção precisa de esclera, íris e pupila com análise setorial e interpretação em linguagem natural
        """)
        
        with gr.Row():
            input_image = gr.Image(label="Imagem do Olho", type="numpy")
            output_image = gr.Image(label="Análise Visual")
        
        analysis_btn = gr.Button("Analisar Olho", variant="primary")
        output_text = gr.Textbox(label="Relatório de Análise", lines=20)
        
        analysis_btn.click(
            fn=processar_imagem,
            inputs=[input_image],outputs=[output_image, output_text]
        )

    return interface

# Rodar a interface
if __name__ == "__main__":
    interface = criar_interface()
    interface.launch()