Spaces:
Sleeping
Sleeping
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() |