File size: 5,256 Bytes
baa207a
fe07bda
baa207a
 
 
 
 
c79348f
baa207a
 
 
 
 
 
 
 
 
c79348f
baa207a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c79348f
 
baa207a
 
84aedf8
baa207a
6338fb4
baa207a
c79348f
0e217f9
c79348f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
baa207a
 
c79348f
baa207a
 
 
 
 
 
 
 
 
 
 
 
 
c79348f
 
 
 
 
 
 
 
 
 
 
 
 
baa207a
 
 
c79348f
baa207a
 
 
c79348f
fe07bda
baa207a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# 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