DHEIVER's picture
Update app.py
305f60c verified
raw
history blame
5.01 kB
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()