DHEIVER's picture
Update app.py
7d708d8 verified
raw
history blame
9.24 kB
import gradio as gr
import cv2
import numpy as np
from PIL import Image
import io
# Dicionário de áreas da íris e suas correlações com órgãos/sistemas
MAPA_IRIDOLOGICO = {
"superior": {
"cerebro": (330, 30),
"sistema_nervoso": (0, 30),
},
"superior_direito": {
"pulmao": (30, 60),
"bronquios": (45, 60),
},
"direito": {
"figado": (60, 120),
"vesicula": (75, 120),
"rim_direito": (90, 120),
},
"inferior_direito": {
"intestino_grosso": (120, 150),
"apendice": (135, 150),
},
"inferior": {
"sistema_digestivo": (150, 210),
"intestino_delgado": (180, 210),
},
"inferior_esquerdo": {
"bexiga": (210, 240),
"sistema_reprodutor": (225, 240),
},
"esquerdo": {
"estomago": (240, 300),
"pancreas": (255, 300),
"rim_esquerdo": (270, 300),
},
"superior_esquerdo": {
"coracao": (300, 330),
"tireoide": (315, 330),
}
}
def analisar_caracteristicas_iris(roi, setor):
"""
Analisa características específicas de um setor da íris
"""
if roi.size == 0:
return []
media = np.mean(roi)
std = np.std(roi)
# Análise de padrões específicos
alteracoes = []
# Análise de densidade
if media < 85: # Área escura
alteracoes.append("Possível congestão/inflamação")
elif media > 170: # Área clara
alteracoes.append("Possível deficiência/hipofunção")
# Análise de textura
if std > 45: # Alta variação
alteracoes.append("Sinais de irritação/estresse")
elif std < 15: # Baixa variação
alteracoes.append("Possível atrofia/degeneração")
return alteracoes
def analisar_iris(imagem):
"""
Realiza análise completa da íris com foco em indicadores de saúde
"""
# 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)
circles = cv2.HoughCircles(
gray,
cv2.HOUGH_GRADIENT,
dp=1,
minDist=50,
param1=50,
param2=30,
minRadius=20,
maxRadius=100
)
output = img_array.copy()
analise_detalhada = []
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
center = (i[0], i[1])
radius = i[2]
# Desenhar círculo da íris
cv2.circle(output, center, radius, (0, 255, 0), 2)
# Análise por setores
for setor, orgaos in MAPA_IRIDOLOGICO.items():
for orgao, (ang_inicio, ang_fim) in orgaos.items():
# Criar máscara para o setor
mask = np.zeros_like(gray)
cv2.ellipse(mask, center, (radius, radius), 0, ang_inicio, ang_fim, 255, -1)
# Região de interesse
roi = cv2.bitwise_and(gray, gray, mask=mask)
# Analisar características
alteracoes = analisar_caracteristicas_iris(roi[roi != 0], setor)
if alteracoes:
# Desenhar indicador no setor
ang_medio = np.radians((ang_inicio + ang_fim) / 2)
pt_x = int(center[0] + (radius * 0.8) * np.cos(ang_medio))
pt_y = int(center[1] + (radius * 0.8) * np.sin(ang_medio))
cv2.circle(output, (pt_x, pt_y), 3, (0, 0, 255), -1)
# Adicionar à análise
orgao_formatado = orgao.replace("_", " ").title()
analise_detalhada.append(f"\nRegião: {orgao_formatado}")
for alt in alteracoes:
analise_detalhada.append(f"- {alt}")
return output, "\n".join(analise_detalhada)
def gerar_relatorio_saude(imagem, nome_paciente, idade, data_analise, sintomas):
"""
Gera relatório completo com análise de saúde
"""
resultado_imagem, analise = analisar_iris(imagem)
relatorio = f"""
RELATÓRIO DE ANÁLISE IRIDOLÓGICA - AVALIAÇÃO DE SAÚDE
Data: {data_analise}
DADOS DO PACIENTE
Nome: {nome_paciente}
Idade: {idade}
SINTOMAS RELATADOS
{sintomas}
ANÁLISE IRIDOLÓGICA DETALHADA
{analise}
OBSERVAÇÕES IMPORTANTES
- Esta análise é baseada em princípios da iridologia
- Os resultados são indicativos e não substituem diagnóstico médico
- Recomenda-se consulta com profissionais de saúde para avaliação completa
- Alterações identificadas podem ter diferentes significados clínicos
"""
return resultado_imagem, relatorio
def main():
# Configuração do tema moderno
theme = gr.themes.Soft(
primary_hue="teal",
secondary_hue="indigo",
).set(
body_background_fill="*neutral_50",
block_background_fill="*neutral_100",
button_primary_background_fill="*primary_500",
button_primary_background_fill_dark="*primary_600",
)
# Interface principal
with gr.Blocks(theme=theme, title="Análise Iridológica - Avaliação de Saúde") as iface:
gr.Markdown("""
# Sistema Avançado de Análise Iridológica
### Avaliação de Indicadores de Saúde através da Íris
""")
with gr.Tabs():
# Aba de Análise Rápida
with gr.Tab("Análise Rápida"):
with gr.Row():
with gr.Column():
input_image = gr.Image(label="Upload da Imagem da Íris", type="pil")
analyze_btn = gr.Button("Analisar Íris", variant="primary")
with gr.Column():
output_image = gr.Image(label="Íris Analisada")
output_text = gr.Textbox(label="Indicadores Identificados", lines=10)
analyze_btn.click(
fn=analisar_iris,
inputs=[input_image],
outputs=[output_image, output_text]
)
# Aba de Relatório Detalhado
with gr.Tab("Relatório Detalhado"):
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")
sintomas_input = gr.Textbox(label="Sintomas Relatados", lines=3)
report_image = gr.Image(label="Imagem da Íris", type="pil")
report_btn = gr.Button("Gerar Relatório Completo", variant="primary")
with gr.Column():
report_output_image = gr.Image(label="Íris Analisada")
report_output = gr.Textbox(label="Relatório de Saúde", lines=15)
report_btn.click(
fn=gerar_relatorio_saude,
inputs=[report_image, nome_input, idade_input, data_input, sintomas_input],
outputs=[report_output_image, report_output]
)
# Aba de Referência
with gr.Tab("Guia de Referência"):
gr.Markdown("""
## Guia de Interpretação Iridológica
### Significados das Análises
- Áreas Escuras: Podem indicar congestão ou inflamação
- Áreas Claras: Podem indicar deficiência ou hipofunção
- Texturas Irregulares: Podem indicar irritação ou estresse
- Marcas Radiais: Podem indicar tensão ou sobrecarga
### Regiões da Íris e Correlações
1. Região Superior
- Cérebro e Sistema Nervoso
2. Região Direita
- Fígado
- Vesícula Biliar
- Rim Direito
3. Região Inferior
- Sistema Digestivo
- Intestinos
4. Região Esquerda
- Coração
- Estômago
- Rim Esquerdo
### Observações Importantes
- A análise iridológica é uma ferramenta complementar
- Não substitui diagnósticos médicos convencionais
- Deve ser usada em conjunto com outros métodos de avaliação
- Consulte sempre profissionais de saúde qualificados
""")
# Iniciar a interface
iface.launch(share=True)
if __name__ == "__main__":
main()