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()