DHEIVER's picture
Update app.py
d600704 verified
raw
history blame
6.09 kB
import gradio as gr
import cv2
import numpy as np
from PIL import Image
import io
def analisar_iris(imagem):
"""
Função para analisar a íris através de processamento de imagem
"""
# Converter para array numpy
img_array = np.array(imagem)
# Converter para escala de cinza
gray = cv2.cvtColor(img_array, cv2.COLOR_RGB2GRAY)
# Detectar círculos (íris) usando transformada de Hough
circles = cv2.HoughCircles(
gray,
cv2.HOUGH_GRADIENT,
dp=1,
minDist=50,
param1=50,
param2=30,
minRadius=20,
maxRadius=100
)
# Criar cópia da imagem para desenhar
output = img_array.copy()
resultados = []
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
# Desenhar círculo externo
cv2.circle(output, (i[0], i[1]), i[2], (0, 255, 0), 2)
# Desenhar centro
cv2.circle(output, (i[0], i[1]), 2, (0, 0, 255), 3)
# Análise de características
roi = gray[i[1]-i[2]:i[1]+i[2], i[0]-i[2]:i[0]+i[2]]
if roi.size > 0:
media = np.mean(roi)
std = np.std(roi)
resultados.append(f"Análise da Íris:")
resultados.append(f"- Densidade média: {media:.2f}")
resultados.append(f"- Variação de textura: {std:.2f}")
# Análise de setores
altura, largura = roi.shape
setor_superior = np.mean(roi[:altura//3, :])
setor_medio = np.mean(roi[altura//3:2*altura//3, :])
setor_inferior = np.mean(roi[2*altura//3:, :])
resultados.append("\nAnálise por Setores:")
resultados.append(f"- Setor Superior: {setor_superior:.2f}")
resultados.append(f"- Setor Médio: {setor_medio:.2f}")
resultados.append(f"- Setor Inferior: {setor_inferior:.2f}")
return output, "\n".join(resultados)
def gerar_relatorio(imagem, nome_paciente, idade, data_analise):
"""
Função para gerar relatório completo da análise
"""
img_array = np.array(imagem)
resultado_analise, metricas = analisar_iris(imagem)
relatorio = f"""
RELATÓRIO DE ANÁLISE IRIDOLÓGICA
Data: {data_analise}
DADOS DO PACIENTE
Nome: {nome_paciente}
Idade: {idade}
ANÁLISE TÉCNICA
{metricas}
OBSERVAÇÕES GERAIS
- Análise realizada com processamento computadorizado de imagem
- Recomenda-se acompanhamento profissional para interpretação detalhada
"""
return relatorio
def main():
# Configuração do tema
theme = gr.themes.Soft(
primary_hue="blue",
secondary_hue="gray",
).set(
body_background_fill="*neutral_50",
block_background_fill="*neutral_100",
button_primary_background_fill="*primary_500",
)
# Criação da interface
with gr.Blocks(theme=theme, title="Análise Iridológica") as iface:
gr.Markdown("# Sistema de Análise Iridológica")
with gr.Tabs():
# Aba de Análise Básica
with gr.Tab("Análise Básica"):
with gr.Row():
with gr.Column():
input_image = gr.Image(label="Carregar Imagem da Íris", type="pil")
with gr.Column():
output_image = gr.Image(label="Íris Analisada")
output_text = gr.Textbox(label="Resultados da Análise", lines=10)
analyze_btn = gr.Button("Realizar Análise", variant="primary")
analyze_btn.click(
fn=analisar_iris,
inputs=[input_image],
outputs=[output_image, output_text]
)
# Aba de Relatório Completo
with gr.Tab("Relatório Completo"):
with gr.Row():
with gr.Column():
nome_input = gr.Textbox(label="Nome do Paciente")
idade_input = gr.Number(label="Idade", minimum=0, maximum=120)
data_input = gr.Textbox(label="Data da Análise")
report_image = gr.Image(label="Carregar Imagem da Íris", type="pil")
with gr.Column():
report_output = gr.Textbox(label="Relatório Completo", lines=15)
report_btn = gr.Button("Gerar Relatório", variant="primary")
report_btn.click(
fn=gerar_relatorio,
inputs=[report_image, nome_input, idade_input, data_input],
outputs=[report_output]
)
# Aba de Informações
with gr.Tab("Informações"):
gr.Markdown("""
## Sobre a Análise Iridológica
A iridologia é uma técnica de análise que estuda os sinais presentes na íris dos olhos
para avaliar características e condições do organismo. Este sistema realiza uma análise
computadorizada preliminar, que deve ser interpretada por um profissional qualificado.
### Recursos do Sistema:
1. Análise básica da íris com detecção automática
2. Medições de densidade e textura
3. Análise setorial da íris
4. Geração de relatórios personalizados
### Recomendações:
- Utilize fotos em boa resolução
- Certifique-se de que a íris está bem iluminada
- A imagem deve estar focada e nítida
""")
# Iniciar a interface
iface.launch(share=True)
if __name__ == "__main__":
main()