Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import numpy as np
|
3 |
+
from analisador_iridologico import (
|
4 |
+
pre_processar_imagem, detectar_esclera, detectar_iris_pupila,
|
5 |
+
analisar_textura_setorial, validar_metricas, AnalisadorIridologicoNLP
|
6 |
+
)
|
7 |
+
|
8 |
+
def criar_interface():
|
9 |
+
theme = gr.themes.Soft(
|
10 |
+
primary_hue="teal",
|
11 |
+
secondary_hue="green",
|
12 |
+
).set(
|
13 |
+
body_text_color="#2A9D8F",
|
14 |
+
block_title_text_color="#264653",
|
15 |
+
block_label_text_color="#2A9D8F",
|
16 |
+
input_background_fill="#E9F5F3",
|
17 |
+
button_primary_background_fill="#2A9D8F",
|
18 |
+
button_primary_background_fill_dark="#264653",
|
19 |
+
)
|
20 |
+
|
21 |
+
def processar_imagem(imagem):
|
22 |
+
try:
|
23 |
+
imagem_processada = pre_processar_imagem(imagem)
|
24 |
+
mask_esclera = detectar_esclera(imagem_processada)
|
25 |
+
iris_info, pupil_info = detectar_iris_pupila(imagem_processada, mask_esclera)
|
26 |
+
|
27 |
+
if iris_info is None or pupil_info is None:
|
28 |
+
return imagem, "Não foi possível detectar íris ou pupila corretamente."
|
29 |
+
|
30 |
+
analise_setorial = analisar_textura_setorial(imagem_processada, iris_info, pupil_info)
|
31 |
+
metricas = {
|
32 |
+
'pupila': {
|
33 |
+
'raio': pupil_info[2],
|
34 |
+
'circularidade': avaliar_circularidade(pupil_info)
|
35 |
+
},
|
36 |
+
'iris': {
|
37 |
+
'densidade_media': np.mean([dados['contraste'] for dados in analise_setorial.values()]),
|
38 |
+
'homogeneidade': np.mean([dados['homogeneidade'] for dados in analise_setorial.values()])
|
39 |
+
},
|
40 |
+
}
|
41 |
+
|
42 |
+
metricas = validar_metricas(metricas)
|
43 |
+
analisador = AnalisadorIridologicoNLP()
|
44 |
+
interpretacao_nlp = analisador.gerar_interpretacao(metricas)
|
45 |
+
|
46 |
+
relatorio = "ANÁLISE IRIDOLÓGICA DETALHADA\n\n"
|
47 |
+
relatorio += "1. MEDIDAS ESTRUTURAIS\n"
|
48 |
+
relatorio += f"Pupila: Centro ({pupil_info[0]}, {pupil_info[1]}), Raio {pupil_info[2]}px\n"
|
49 |
+
relatorio += "2. ANÁLISE SETORIAL\n"
|
50 |
+
for setor, dados in analise_setorial.items():
|
51 |
+
relatorio += f"Setor {setor}: Contraste {dados['contraste']}, Homogeneidade {dados['homogeneidade']}\n"
|
52 |
+
relatorio += f"3. INTERPRETAÇÃO NLP: {interpretacao_nlp}\n"
|
53 |
+
|
54 |
+
return imagem, relatorio
|
55 |
+
|
56 |
+
except Exception as e:
|
57 |
+
return imagem, f"Erro durante o processamento: {str(e)}"
|
58 |
+
|
59 |
+
with gr.Blocks(theme=theme, title="Análise Iridológica Avançada") as interface:
|
60 |
+
gr.Markdown("""
|
61 |
+
# Sistema Avançado de Análise Iridológica
|
62 |
+
### Detecção precisa de esclera, íris e pupila com análise setorial e interpretação em linguagem natural
|
63 |
+
""")
|
64 |
+
|
65 |
+
with gr.Row():
|
66 |
+
input_image = gr.Image(label="Imagem do Olho", type="numpy")
|
67 |
+
output_image = gr.Image(label="Análise Visual")
|
68 |
+
|
69 |
+
analysis_btn = gr.Button("Analisar Olho", variant="primary")
|
70 |
+
output_text = gr.Textbox(label="Relatório de Análise", lines=20)
|
71 |
+
|
72 |
+
analysis_btn.click(
|
73 |
+
fn=processar_imagem,
|
74 |
+
inputs=[input_image],
|
75 |
+
outputs=[output_image, output_text]
|
76 |
+
)
|
77 |
+
|
78 |
+
return interface
|
79 |
+
|
80 |
+
def main():
|
81 |
+
interface = criar_interface()
|
82 |
+
interface.launch(share=True)
|
83 |
+
|
84 |
+
if __name__ == "__main__":
|
85 |
+
main()
|