Spaces:
Sleeping
Sleeping
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() |