DHEIVER commited on
Commit
412ff61
·
verified ·
1 Parent(s): e0dd397

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -66
app.py CHANGED
@@ -606,41 +606,59 @@ def criar_interface():
606
  button_primary_background_fill="#2A9D8F",
607
  button_primary_background_fill_dark="#264653",
608
  )
609
-
610
  def processar_imagem(imagem):
611
  try:
612
  # Pré-processamento
613
  imagem_processada = pre_processar_imagem(imagem)
614
-
615
  # Detectar esclera
616
  mask_esclera = detectar_esclera(imagem_processada)
617
-
618
  # Detectar íris e pupila
619
  iris_info, pupil_info = detectar_iris_pupila(imagem_processada, mask_esclera)
620
-
621
  if iris_info is None or pupil_info is None:
622
  return imagem, "Não foi possível detectar íris ou pupila corretamente."
623
-
624
  # Análise de textura
625
  analise_setorial = analisar_textura_setorial(imagem_processada, iris_info, pupil_info)
626
-
627
  # Análise do collarette
628
  info_collarette = analisar_collarette(imagem_processada, iris_info, pupil_info)
629
-
630
  # Criar visualização
631
  output_img = imagem.copy()
632
  ix, iy, ir = iris_info
633
  px, py, pr = pupil_info
634
-
635
- # Criar máscara da pupila para circularidade
636
- pupil_mask = np.zeros_like(cv2.cvtColor(imagem, cv2.COLOR_RGB2GRAY))
637
- cv2.circle(pupil_mask, (px, py), pr, 255, -1)
638
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
639
  # Preparar métricas para análise NLP
640
  metricas = {
641
  'pupila': {
642
  'raio': pr,
643
- 'circularidade': avaliar_circularidade(pupil_mask)
644
  },
645
  'iris': {
646
  'densidade_media': np.mean([dados['contraste'] for dados in analise_setorial.values()]),
@@ -648,68 +666,27 @@ def criar_interface():
648
  },
649
  'collarette': info_collarette
650
  }
651
-
652
- # Na função processar_imagem, antes de chamar integrar_analise_nlp:
653
  metricas = validar_metricas(metricas)
654
  interpretacao_nlp = integrar_analise_nlp(metricas)
655
-
656
- # Desenhar esclera
657
- contours, _ = cv2.findContours(mask_esclera, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
658
- cv2.drawContours(output_img, contours, -1, (255, 255, 0), 1)
659
-
660
- # Desenhar íris
661
- cv2.circle(output_img, (ix, iy), ir, (0, 255, 0), 2)
662
-
663
- # Desenhar pupila
664
- cv2.circle(output_img, (px, py), pr, (255, 0, 0), 2)
665
-
666
- # Desenhar setores
667
- for i in range(12):
668
- ang = i * 30
669
- rad = np.radians(ang)
670
- end_x = int(ix + ir * np.cos(rad))
671
- end_y = int(iy + ir * np.sin(rad))
672
- cv2.line(output_img, (ix, iy), (end_x, end_y), (0, 255, 0), 1)
673
-
674
  # Gerar relatório
675
  relatorio = "ANÁLISE IRIDOLÓGICA DETALHADA\n\n"
676
-
677
- # Informações estruturais
678
  relatorio += "1. MEDIDAS ESTRUTURAIS\n"
679
  relatorio += f"Pupila: Centro ({px}, {py}), Raio {pr}px\n"
680
  relatorio += f"Íris: Centro ({ix}, {iy}), Raio {ir}px\n"
681
-
682
- # Análise setorial
683
- relatorio += "\n2. ANÁLISE SETORIAL\n"
684
  for setor, dados in analise_setorial.items():
685
- relatorio += f"\n{setor}:\n"
686
- relatorio += f"- Contraste: {dados['contraste']:.2f}\n"
687
- relatorio += f"- Homogeneidade: {dados['homogeneidade']:.2f}\n"
688
-
689
- # Interpretação
690
- if dados['contraste'] > 2.0:
691
- relatorio += " * Alta densidade de sinais\n"
692
- if dados['homogeneidade'] < 0.5:
693
- relatorio += " * Possível área de alteração\n"
694
-
695
- # Análise do collarette
696
- if info_collarette:
697
- relatorio += "\n3. ANÁLISE DO COLLARETTE\n"
698
- relatorio += f"- Regularidade: {info_collarette['regularidade']:.2f}\n"
699
- relatorio += f"- Circularidade: {info_collarette['circularidade']:.2f}\n"
700
-
701
- # Interpretação
702
- if info_collarette['regularidade'] > 500:
703
- relatorio += " * Irregularidade significativa\n"
704
- if info_collarette['circularidade'] < 0.8:
705
- relatorio += " * Possível deformação estrutural\n"
706
-
707
- # Adicionar interpretação NLP
708
- relatorio += "\n4. INTERPRETAÇÃO EM LINGUAGEM NATURAL\n"
709
- relatorio += interpretacao_nlp
710
-
711
  return output_img, relatorio
712
-
713
  except Exception as e:
714
  return imagem, f"Erro durante o processamento: {str(e)}"
715
 
 
606
  button_primary_background_fill="#2A9D8F",
607
  button_primary_background_fill_dark="#264653",
608
  )
609
+
610
  def processar_imagem(imagem):
611
  try:
612
  # Pré-processamento
613
  imagem_processada = pre_processar_imagem(imagem)
614
+
615
  # Detectar esclera
616
  mask_esclera = detectar_esclera(imagem_processada)
617
+
618
  # Detectar íris e pupila
619
  iris_info, pupil_info = detectar_iris_pupila(imagem_processada, mask_esclera)
620
+
621
  if iris_info is None or pupil_info is None:
622
  return imagem, "Não foi possível detectar íris ou pupila corretamente."
623
+
624
  # Análise de textura
625
  analise_setorial = analisar_textura_setorial(imagem_processada, iris_info, pupil_info)
626
+
627
  # Análise do collarette
628
  info_collarette = analisar_collarette(imagem_processada, iris_info, pupil_info)
629
+
630
  # Criar visualização
631
  output_img = imagem.copy()
632
  ix, iy, ir = iris_info
633
  px, py, pr = pupil_info
634
+
635
+ # Desenhar esclera
636
+ contours, _ = cv2.findContours(mask_esclera, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
637
+ cv2.drawContours(output_img, contours, -1, (255, 255, 0), 1) # Esclera em amarelo
638
+
639
+ # Desenhar íris
640
+ cv2.circle(output_img, (ix, iy), ir, (0, 255, 0), 2) # Íris em verde
641
+
642
+ # Desenhar pupila
643
+ cv2.circle(output_img, (px, py), pr, (255, 0, 0), 2) # Pupila em vermelho
644
+
645
+ # Desenhar setores
646
+ for i in range(12):
647
+ ang = i * 30
648
+ rad = np.radians(ang)
649
+ end_x = int(ix + ir * np.cos(rad))
650
+ end_y = int(iy + ir * np.sin(rad))
651
+ cv2.line(output_img, (ix, iy), (end_x, end_y), (255, 255, 255), 1) # Linhas brancas para setores
652
+
653
+ # Adicionando feedback visual
654
+ if info_collarette:
655
+ cv2.putText(output_img, "Collarette Detected", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)
656
+
657
  # Preparar métricas para análise NLP
658
  metricas = {
659
  'pupila': {
660
  'raio': pr,
661
+ 'circularidade': avaliar_circularidade(pupil_info)
662
  },
663
  'iris': {
664
  'densidade_media': np.mean([dados['contraste'] for dados in analise_setorial.values()]),
 
666
  },
667
  'collarette': info_collarette
668
  }
669
+
670
+ # Validar métricas
671
  metricas = validar_metricas(metricas)
672
  interpretacao_nlp = integrar_analise_nlp(metricas)
673
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
674
  # Gerar relatório
675
  relatorio = "ANÁLISE IRIDOLÓGICA DETALHADA\n\n"
 
 
676
  relatorio += "1. MEDIDAS ESTRUTURAIS\n"
677
  relatorio += f"Pupila: Centro ({px}, {py}), Raio {pr}px\n"
678
  relatorio += f"Íris: Centro ({ix}, {iy}), Raio {ir}px\n"
679
+
680
+ # Adicionar análise setorial e do collarette
681
+ relatorio += "2. ANÁLISE SETORIAL\n"
682
  for setor, dados in analise_setorial.items():
683
+ relatorio += f"Setor {setor}: Contraste {dados['contraste']}, Homogeneidade {dados['homogeneidade']}\n"
684
+
685
+ relatorio += f"3. COLLARETTE: {info_collarette}\n"
686
+ relatorio += f"4. INTERPRETAÇÃO NLP: {interpretacao_nlp}\n"
687
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
688
  return output_img, relatorio
689
+
690
  except Exception as e:
691
  return imagem, f"Erro durante o processamento: {str(e)}"
692