CancerSkinTest3 / app.py
LoloSemper's picture
Update app.py
baa207a verified
raw
history blame
5.26 kB
# Añadir al final del archivo main, después de cargar todos los modelos
# Generar estadísticas del sistema
if loaded_models:
# Contar modelos por tipo
model_types = {}
frameworks = {}
for name, model_data in loaded_models.items():
if model_data.get('type') != 'dummy':
# Contar por tipo
model_type = model_data['config'].get('type', 'unknown')
model_types[model_type] = model_types.get(model_type, 0) + 1
# Contar por framework
framework = model_data.get('framework', 'unknown')
frameworks[framework] = frameworks.get(framework, 0) + 1
# Calcular precisión promedio real (solo modelos cargados)
avg_accuracy = np.mean([
model_data['config'].get('accuracy', 0.8)
for model_data in loaded_models.values()
if model_data.get('type') != 'dummy'
])
# Encontrar modelo con mayor precisión
best_model = max(
loaded_models.items(),
key=lambda x: x[1]['config'].get('accuracy', 0) if x[1].get('type') != 'dummy' else 0
)
print(f"\n{'='*60}")
print(f"🚀 SISTEMA DE ANÁLISIS DE CÁNCER DE PIEL - ESTADO")
print(f"{'='*60}")
print(f"📊 Modelos cargados exitosamente: {len(loaded_models)}")
print(f"🎯 Precisión promedio del sistema: {avg_accuracy:.1%}")
print(f"🏆 Mejor modelo: {best_model[0]} ({best_model[1]['config'].get('accuracy', 0):.1%})")
print(f"\n📦 Distribución por tipo:")
for tipo, count in model_types.items():
print(f" - {tipo}: {count} modelos")
print(f"\n🔧 Distribución por framework:")
for fw, count in frameworks.items():
print(f" - {fw}: {count} modelos")
print(f"\n✅ Estado: OPERATIVO")
print(f"⚠️ ADVERTENCIA: Este sistema es solo para apoyo diagnóstico.")
print(f"{'='*60}\n")
else:
print(f"\n{'='*60}")
print(f"❌ ERROR CRÍTICO: No se pudieron cargar modelos")
print(f"💡 Posibles soluciones:")
print(f" 1. Verificar conexión a internet")
print(f" 2. Configurar HUGGINGFACE_TOKEN si es necesario")
print(f" 3. Instalar dependencias faltantes (timm, tensorflow)")
print(f"{'='*60}\n")
# Actualizar la información en la interfaz de Gradio
def create_interface():
with gr.Blocks(theme=gr.themes.Soft(), title="Análisis de Lesiones Cutáneas") as demo:
gr.Markdown(f"""
# 🏥 Sistema de Análisis de Lesiones Cutáneas - v2.0
**Herramienta de apoyo diagnóstico basada en IA con {len(loaded_models)} modelos especializados**
Carga una imagen dermatoscópica para obtener una evaluación automatizada por consenso de múltiples modelos.
""")
with gr.Row():
with gr.Column(scale=1):
input_img = gr.Image(
type="pil",
label="📷 Imagen Dermatoscópica",
height=400
)
analyze_btn = gr.Button(
"🚀 Analizar Lesión",
variant="primary",
size="lg"
)
gr.Markdown("""
### 📝 Instrucciones:
1. Carga una imagen clara de la lesión
2. La imagen debe estar bien iluminada
3. Enfoque en la lesión cutánea
4. Formatos soportados: JPG, PNG
### 🤖 Modelos disponibles:
""")
# Mostrar lista de modelos cargados
if loaded_models:
models_list = []
for name, data in sorted(loaded_models.items(),
key=lambda x: x[1]['config'].get('accuracy', 0),
reverse=True)[:10]: # Top 10
if data.get('type') != 'dummy':
config = data['config']
models_list.append(
f"{config['emoji']} **{config['name']}** - {config.get('accuracy', 0):.1%}"
)
gr.Markdown("\n".join(models_list))
with gr.Column(scale=2):
output_html = gr.HTML(label="📊 Resultado del Análisis")
analyze_btn.click(
fn=analizar_lesion,
inputs=input_img,
outputs=output_html
)
gr.Markdown(f"""
---
**Estado del Sistema:**
- ✅ Modelos activos: {len([m for m in loaded_models.values() if m.get('type') != 'dummy'])}
- 🎯 Precisión promedio: {avg_accuracy:.1%} (basada en validación científica)
- 🏆 Mejor modelo: {best_model[0]} ({best_model[1]['config'].get('accuracy', 0):.1%})
- ⚠️ **Este sistema es solo para apoyo diagnóstico. Consulte siempre a un profesional médico.**
<small>Versión 2.0 - Actualizada con modelos de última generación incluyendo Vision Transformers,
EfficientNet, ResNet y arquitecturas especializadas en melanoma.</small>
""")
return demo