Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -614,90 +614,90 @@ def criar_interface():
|
|
614 |
)
|
615 |
|
616 |
def processar_imagem(imagem):
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
# Preparar métricas para análise NLP
|
664 |
-
metricas = {
|
665 |
-
'pupila': {
|
666 |
-
'raio': pr,
|
667 |
-
'circularidade': avaliar_circularidade(pupil_info)
|
668 |
-
},
|
669 |
-
'iris': {
|
670 |
-
'densidade_media': np.mean([dados['contraste'] for dados in analise_setorial.values()]),
|
671 |
-
'homogeneidade': np.mean([dados['homogeneidade'] for dados in analise_setorial.values()])
|
672 |
-
},
|
673 |
-
'collarette': info_collarette
|
674 |
-
}
|
675 |
-
|
676 |
-
# Validar métricas
|
677 |
-
metricas = validar_metricas(metricas)
|
678 |
-
|
679 |
-
# Integrar análise NLP
|
680 |
-
interpretacao_nlp = integrar_analise_nlp(metricas)
|
681 |
-
|
682 |
-
# Gerar relatório
|
683 |
-
relatorio = "ANÁLISE IRIDOLÓGICA DETALHADA\n\n"
|
684 |
-
relatorio += "1. MEDIDAS ESTRUTURAIS\n"
|
685 |
-
relatorio += f"Pupila: Centro ({px}, {py}), Raio {pr}px\n"
|
686 |
-
relatorio += f"Íris: Centro ({ix}, {iy}), Raio {ir}px\n"
|
687 |
-
|
688 |
-
# Adicionar análise setorial
|
689 |
-
relatorio += "2. ANÁLISE SETORIAL\n"
|
690 |
-
for setor, dados in analise_setorial.items():
|
691 |
-
relatorio += f"Setor {setor}: Contraste {dados['contraste']}, Homogeneidade {dados['homogeneidade']}\n"
|
692 |
-
|
693 |
-
relatorio += f"3. COLLARETTE: {info_collarette}\n"
|
694 |
-
relatorio += f"4. INTERPRETAÇÃO NLP: {interpretacao_nlp}\n"
|
695 |
-
|
696 |
-
return output_img, relatorio
|
697 |
-
|
698 |
-
except Exception as e:
|
699 |
-
return imagem, f"Erro durante o processamento: {str(e)}"
|
700 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
701 |
# Interface
|
702 |
with gr.Blocks(theme=theme, title="Análise Iridológica Avançada") as interface:
|
703 |
gr.Markdown("""
|
|
|
614 |
)
|
615 |
|
616 |
def processar_imagem(imagem):
|
617 |
+
try:
|
618 |
+
# Pré-processamento da imagem
|
619 |
+
imagem_processada = pre_processar_imagem(imagem)
|
620 |
+
|
621 |
+
# Detectar esclera
|
622 |
+
mask_esclera = detectar_esclera(imagem_processada)
|
623 |
+
|
624 |
+
# Detectar íris e pupila
|
625 |
+
iris_info, pupil_info = detectar_iris_pupila(imagem_processada, mask_esclera)
|
626 |
+
|
627 |
+
if iris_info is None or pupil_info is None:
|
628 |
+
return imagem, "Não foi possível detectar íris ou pupila corretamente."
|
629 |
+
|
630 |
+
# Análise de textura setorial
|
631 |
+
analise_setorial = analisar_textura_setorial(imagem_processada, iris_info, pupil_info)
|
632 |
+
|
633 |
+
# Análise do collarette
|
634 |
+
info_collarette = analisar_collarette(imagem_processada, iris_info, pupil_info)
|
635 |
+
|
636 |
+
# Criar visualização da imagem de saída
|
637 |
+
output_img = imagem.copy()
|
638 |
+
ix, iy, ir = iris_info
|
639 |
+
px, py, pr = pupil_info
|
640 |
+
|
641 |
+
# Desenhar esclera
|
642 |
+
contours, _ = cv2.findContours(mask_esclera, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
643 |
+
cv2.drawContours(output_img, contours, -1, (255, 255, 0), 1) # Esclera em amarelo
|
644 |
+
|
645 |
+
# Desenhar íris
|
646 |
+
cv2.circle(output_img, (ix, iy), ir, (0, 255, 0), 2) # Íris em verde
|
647 |
+
|
648 |
+
# Desenhar pupila
|
649 |
+
cv2.circle(output_img, (px, py), pr, (255, 0, 0), 2) # Pupila em vermelho
|
650 |
+
|
651 |
+
# Desenhar setores
|
652 |
+
for i in range(12):
|
653 |
+
ang = i * 30
|
654 |
+
rad = np.radians(ang)
|
655 |
+
end_x = int(ix + ir * np.cos(rad))
|
656 |
+
end_y = int(iy + ir * np.sin(rad))
|
657 |
+
cv2.line(output_img, (ix, iy), (end_x, end_y), (255, 255, 255), 1) # Linhas brancas para setores
|
658 |
+
|
659 |
+
# Adicionando feedback visual se o collarette for detectado
|
660 |
+
if info_collarette:
|
661 |
+
cv2.putText(output_img, "Collarette Detected", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
662 |
|
663 |
+
# Preparar métricas para análise NLP
|
664 |
+
metricas = {
|
665 |
+
'pupila': {
|
666 |
+
'raio': pr,
|
667 |
+
'circularidade': avaliar_circularidade(pupil_info)
|
668 |
+
},
|
669 |
+
'iris': {
|
670 |
+
'densidade_media': np.mean([dados['contraste'] for dados in analise_setorial.values()]),
|
671 |
+
'homogeneidade': np.mean([dados['homogeneidade'] for dados in analise_setorial.values()])
|
672 |
+
},
|
673 |
+
'collarette': info_collarette
|
674 |
+
}
|
675 |
+
|
676 |
+
# Validar métricas
|
677 |
+
metricas = validar_metricas(metricas)
|
678 |
+
|
679 |
+
# Integrar análise NLP
|
680 |
+
interpretacao_nlp = integrar_analise_nlp(metricas)
|
681 |
+
|
682 |
+
# Gerar relatório
|
683 |
+
relatorio = "ANÁLISE IRIDOLÓGICA DETALHADA\n\n"
|
684 |
+
relatorio += "1. MEDIDAS ESTRUTURAIS\n"
|
685 |
+
relatorio += f"Pupila: Centro ({px}, {py}), Raio {pr}px\n"
|
686 |
+
relatorio += f"Íris: Centro ({ix}, {iy}), Raio {ir}px\n"
|
687 |
+
|
688 |
+
# Adicionar análise setorial
|
689 |
+
relatorio += "2. ANÁLISE SETORIAL\n"
|
690 |
+
for setor, dados in analise_setorial.items():
|
691 |
+
relatorio += f"Setor {setor}: Contraste {dados['contraste']}, Homogeneidade {dados['homogeneidade']}\n"
|
692 |
+
|
693 |
+
relatorio += f"3. COLLARETTE: {info_collarette}\n"
|
694 |
+
relatorio += f"4. INTERPRETAÇÃO NLP: {interpretacao_nlp}\n"
|
695 |
+
|
696 |
+
return output_img, relatorio
|
697 |
+
|
698 |
+
except Exception as e:
|
699 |
+
return imagem, f"Erro durante o processamento: {str(e)}"
|
700 |
+
|
701 |
# Interface
|
702 |
with gr.Blocks(theme=theme, title="Análise Iridológica Avançada") as interface:
|
703 |
gr.Markdown("""
|