# 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.** Versión 2.0 - Actualizada con modelos de última generación incluyendo Vision Transformers, EfficientNet, ResNet y arquitecturas especializadas en melanoma. """) return demo