DHEIVER's picture
Update app.py
a737d43 verified
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()