Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import ( | |
ViTImageProcessor, | |
ViTForImageClassification, | |
AutoImageProcessor, | |
Swin2ForImageClassification | |
) | |
from PIL import Image | |
import torch | |
import warnings | |
warnings.filterwarnings("ignore") | |
class IridologyAnalyzer: | |
def __init__(self): | |
# Inicializar modelos | |
print("Carregando modelos...") | |
# ViT model - Modelo público para análise de imagens | |
self.vit_processor = ViTImageProcessor.from_pretrained("google/vit-base-patch16-224") | |
self.vit_model = ViTForImageClassification.from_pretrained("google/vit-base-patch16-224") | |
# Swin2 model - Outro modelo público para análise de imagens | |
self.swin_processor = AutoImageProcessor.from_pretrained("microsoft/swin-base-patch4-window7-224") | |
self.swin_model = Swin2ForImageClassification.from_pretrained("microsoft/swin-base-patch4-window7-224") | |
# Características de iridologia para análise | |
self.iris_features = [ | |
"Textura da íris", | |
"Coloração", | |
"Marcas ou manchas", | |
"Anéis ou círculos", | |
"Condição da pupila", | |
"Linhas radiais", | |
"Pigmentação", | |
"Clareza geral", | |
"Estrutura do tecido", | |
"Marcas brancas", | |
"Fibras da íris", | |
"Borda da íris" | |
] | |
print("Modelos carregados com sucesso!") | |
def analyze_with_vit(self, image): | |
"""Analisa a imagem usando o modelo ViT.""" | |
inputs = self.vit_processor(images=image, return_tensors="pt") | |
outputs = self.vit_model(**inputs) | |
probs = torch.nn.functional.softmax(outputs.logits, dim=-1) | |
confidence = probs.max().item() | |
return confidence | |
def analyze_with_swin(self, image): | |
"""Analisa a imagem usando o modelo Swin.""" | |
inputs = self.swin_processor(images=image, return_tensors="pt") | |
outputs = self.swin_model(**inputs) | |
probs = torch.nn.functional.softmax(outputs.logits, dim=-1) | |
confidence = probs.max().item() | |
return confidence | |
def analyze_feature(self, image, feature): | |
"""Analisa uma característica específica da íris.""" | |
vit_conf = self.analyze_with_vit(image) | |
swin_conf = self.analyze_with_swin(image) | |
# Combina os resultados dos dois modelos | |
avg_conf = (vit_conf + swin_conf) / 2 | |
# Gera uma análise baseada na confiança | |
if avg_conf > 0.8: | |
return "Alta presença" | |
elif avg_conf > 0.5: | |
return "Presença moderada" | |
else: | |
return "Baixa presença" | |
def comprehensive_analysis(self, image): | |
"""Realiza uma análise completa da íris.""" | |
results = [] | |
for feature in self.iris_features: | |
try: | |
analysis = self.analyze_feature(image, feature) | |
results.append({ | |
"feature": feature, | |
"analysis": analysis | |
}) | |
except Exception as e: | |
print(f"Erro ao analisar '{feature}': {str(e)}") | |
continue | |
# Formatar resultados | |
formatted_results = "Análise Detalhada de Iridologia:\n\n" | |
for result in results: | |
formatted_results += f"Característica: {result['feature']}\n" | |
formatted_results += f"Análise: {result['analysis']}\n" | |
formatted_results += "-" * 50 + "\n" | |
return formatted_results | |
def create_gradio_interface(): | |
analyzer = IridologyAnalyzer() | |
def process_image(image): | |
if image is None: | |
return "Por favor, faça o upload de uma imagem." | |
# Converter para PIL Image se necessário | |
if not isinstance(image, Image.Image): | |
image = Image.fromarray(image) | |
# Realizar análise | |
try: | |
return analyzer.comprehensive_analysis(image) | |
except Exception as e: | |
return f"Erro durante a análise: {str(e)}" | |
# Interface Gradio | |
iface = gr.Interface( | |
fn=process_image, | |
inputs=gr.Image(type="pil", label="Upload da Imagem do Olho"), | |
outputs=gr.Textbox(label="Resultados da Análise", lines=20), | |
title="Analisador de Iridologia com IA", | |
description=""" | |
Este sistema analisa imagens de íris usando modelos de IA para identificar padrões relevantes para iridologia. | |
Faça o upload de uma imagem clara do olho para análise. | |
Recomendações para melhores resultados: | |
1. Use imagens bem iluminadas | |
2. Garanta que a íris esteja em foco | |
3. Evite reflexos excessivos | |
4. Enquadre apenas o olho na imagem | |
""", | |
examples=[], | |
cache_examples=True | |
) | |
return iface | |
if __name__ == "__main__": | |
iface = create_gradio_interface() | |
iface.launch() |