Spaces:
Sleeping
Sleeping
import gradio as gr | |
import cv2 | |
import numpy as np | |
from dataclasses import dataclass | |
from typing import Dict, List, Tuple | |
from datetime import datetime | |
class IrisZone: | |
name: str | |
ratio: Tuple[float, float] # (inner, outer) | |
color: Tuple[int, int, int] | |
conditions: Dict[str, List[str]] # Detailed health conditions | |
recommendations: Dict[str, List[str]] | |
class IrisAnalyzer: | |
def __init__(self): | |
self.zones = [ | |
IrisZone( | |
name="Zona Cerebral/Neural", | |
ratio=(0.85, 1.0), | |
color=(255, 0, 0), | |
conditions={ | |
"baixa": [ | |
"Possível fadiga neural crônica", | |
"Indicadores de estresse prolongado", | |
"Sinais de insônia ou distúrbios do sono", | |
"Possível déficit de vitamina B12" | |
], | |
"media": ["Estado neural estável", "Função cognitiva normal"], | |
"alta": ["Excelente saúde neural", "Ótima resposta cognitiva"] | |
}, | |
recommendations={ | |
"baixa": [ | |
"Suplementação de vitamina B12", | |
"Técnicas de meditação diária", | |
"Melhorar qualidade do sono", | |
"Reduzir exposição a telas" | |
], | |
"media": ["Manter rotina de sono", "Exercícios mentais regulares"], | |
"alta": ["Manter práticas atuais", "Exercícios de mindfulness"] | |
} | |
), | |
IrisZone( | |
name="Zona Digestiva", | |
ratio=(0.7, 0.85), | |
color=(0, 255, 0), | |
conditions={ | |
"baixa": [ | |
"Possível inflamação intestinal", | |
"Sinais de má absorção", | |
"Indicadores de disbiose", | |
"Possível deficiência enzimática" | |
], | |
"media": ["Digestão funcional", "Absorção adequada"], | |
"alta": ["Excelente saúde digestiva", "Ótima absorção"] | |
}, | |
recommendations={ | |
"baixa": [ | |
"Probióticos específicos", | |
"Enzimas digestivas", | |
"Dieta anti-inflamatória", | |
"Eliminar alimentos processados" | |
], | |
"media": ["Manter dieta balanceada", "Hidratação adequada"], | |
"alta": ["Manter dieta atual", "Rotina alimentar saudável"] | |
} | |
), | |
IrisZone( | |
name="Zona Respiratória", | |
ratio=(0.55, 0.7), | |
color=(0, 0, 255), | |
conditions={ | |
"baixa": [ | |
"Possível comprometimento respiratório", | |
"Sinais de baixa oxigenação", | |
"Indicadores de congestão brônquica", | |
"Possível sensibilidade respiratória" | |
], | |
"media": ["Função respiratória adequada", "Oxigenação normal"], | |
"alta": ["Excelente capacidade respiratória", "Ótima oxigenação"] | |
}, | |
recommendations={ | |
"baixa": [ | |
"Exercícios respiratórios diários", | |
"Avaliar qualidade do ar", | |
"Considerar atividades aeróbicas", | |
"Técnicas de respiração profunda" | |
], | |
"media": ["Manter exercícios regulares", "Praticar respiração consciente"], | |
"alta": ["Continuar práticas saudáveis", "Manter atividades aeróbicas"] | |
} | |
), | |
IrisZone( | |
name="Zona Circulatória", | |
ratio=(0.4, 0.55), | |
color=(255, 255, 0), | |
conditions={ | |
"baixa": [ | |
"Possível circulação periférica reduzida", | |
"Indicadores de estagnação sanguínea", | |
"Sinais de baixo fluxo sanguíneo", | |
"Possível deficiência de ferro" | |
], | |
"media": ["Circulação adequada", "Fluxo sanguíneo normal"], | |
"alta": ["Excelente circulação", "Ótimo fluxo sanguíneo"] | |
}, | |
recommendations={ | |
"baixa": [ | |
"Aumentar atividade física", | |
"Considerar suplementação de ferro", | |
"Massagens circulatórias", | |
"Hidratação adequada" | |
], | |
"media": ["Manter exercícios regulares", "Alimentação rica em ferro"], | |
"alta": ["Manter rotina atual", "Continuar exercícios"] | |
} | |
), | |
IrisZone( | |
name="Zona Linfática", | |
ratio=(0.25, 0.4), | |
color=(255, 0, 255), | |
conditions={ | |
"baixa": [ | |
"Sistema linfático congestionado", | |
"Possível retenção de líquidos", | |
"Indicadores de toxicidade", | |
"Baixa resposta imunológica" | |
], | |
"media": ["Sistema linfático funcional", "Drenagem adequada"], | |
"alta": ["Excelente drenagem linfática", "Ótima desintoxicação"] | |
}, | |
recommendations={ | |
"baixa": [ | |
"Drenagem linfática regular", | |
"Aumentar consumo de água", | |
"Exercícios específicos", | |
"Dieta desintoxicante" | |
], | |
"media": ["Manter hidratação", "Exercícios leves regulares"], | |
"alta": ["Manter hábitos atuais", "Continuar atividades físicas"] | |
} | |
), | |
IrisZone( | |
name="Zona Endócrina", | |
ratio=(0.15, 0.25), | |
color=(0, 255, 255), | |
conditions={ | |
"baixa": [ | |
"Possível desequilíbrio hormonal", | |
"Sinais de estresse adrenal", | |
"Indicadores de fadiga endócrina", | |
"Possível disfunção tireoidiana" | |
], | |
"media": ["Sistema endócrino estável", "Função hormonal adequada"], | |
"alta": ["Excelente equilíbrio hormonal", "Ótima função endócrina"] | |
}, | |
recommendations={ | |
"baixa": [ | |
"Gestão do estresse", | |
"Suporte adrenal natural", | |
"Regular ciclo sono-vigília", | |
"Alimentação rica em iodo" | |
], | |
"media": ["Manter rotina regular", "Cuidar do sono"], | |
"alta": ["Manter equilíbrio atual", "Continuar boas práticas"] | |
} | |
), | |
IrisZone( | |
name="Zona Pupilar", | |
ratio=(0, 0.15), | |
color=(128, 128, 128), | |
conditions={ | |
"baixa": [ | |
"Sistema nervoso autônomo sobrecarregado", | |
"Possível desequilíbrio simpático/parassimpático", | |
"Indicadores de estresse crônico", | |
"Sinais de fadiga autonômica" | |
], | |
"media": ["SNA equilibrado", "Resposta autonômica normal"], | |
"alta": ["Excelente regulação autonômica", "Ótimo equilíbrio do SNA"] | |
}, | |
recommendations={ | |
"baixa": [ | |
"Técnicas de relaxamento", | |
"Práticas de mindfulness", | |
"Regular rotina diária", | |
"Exercícios de respiração" | |
], | |
"media": ["Manter práticas relaxantes", "Continuar boa rotina"], | |
"alta": ["Manter equilíbrio atual", "Continuar práticas saudáveis"] | |
} | |
) | |
] | |
def analyze_iris(self, image: np.ndarray) -> Dict: | |
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) | |
center = (image.shape[1]//2, image.shape[0]//2) | |
radius = min(image.shape[:2])//4 | |
results = { | |
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), | |
"analysis": {}, | |
"recommendations": [] | |
} | |
for zone in self.zones: | |
inner_r = int(radius * zone.ratio[0]) | |
outer_r = int(radius * zone.ratio[1]) | |
mask = np.zeros(gray.shape, dtype=np.uint8) | |
cv2.circle(mask, center, outer_r, 255, -1) | |
cv2.circle(mask, center, inner_r, 0, -1) | |
zone_intensity = cv2.mean(gray, mask=mask)[0] | |
# Análise detalhada baseada na intensidade | |
if zone_intensity < 85: | |
level = "baixa" | |
elif zone_intensity < 170: | |
level = "media" | |
else: | |
level = "alta" | |
results["analysis"][zone.name] = { | |
"conditions": zone.conditions[level], | |
"recommendations": zone.recommendations[level], | |
"intensity": float(zone_intensity), | |
"status": level | |
} | |
# Marcar zona na imagem | |
cv2.circle(image, center, outer_r, zone.color, 2) | |
cv2.putText(image, zone.name, | |
(center[0]-outer_r, center[1]+outer_r), | |
cv2.FONT_HERSHEY_SIMPLEX, 0.5, zone.color, 1) | |
return image, results | |
def process_image(img): | |
if img is None: | |
return None, "Favor carregar uma imagem." | |
analyzer = IrisAnalyzer() | |
processed_img, results = analyzer.analyze_iris(img) | |
report = "# Análise Detalhada da Íris\n\n" | |
for zone_name, analysis in results["analysis"].items(): | |
report += f"## {zone_name}\n\n" | |
report += "### Condições Identificadas:\n" | |
for condition in analysis["conditions"]: | |
report += f"- {condition}\n" | |
report += "\n### Recomendações:\n" | |
for rec in analysis["recommendations"]: | |
report += f"- {rec}\n\n" | |
return processed_img, report | |
interface = gr.Interface( | |
fn=process_image, | |
inputs=gr.Image(type="numpy"), | |
outputs=[ | |
gr.Image(label="Análise Visual"), | |
gr.Markdown(label="Relatório Detalhado") | |
], | |
title="Análise Iridológica Detalhada", | |
description="⚠️ Sistema apenas para fins educacionais. Não substitui diagnóstico médico." | |
) | |
if __name__ == "__main__": | |
interface.launch() |