🔄 System Status
📁 Upload Audio File
Upload speech audio for aphasia classification
Supported: MP3, WAV, M4A (max 50MB)
🔄 Processing Audio...
This may take 2-5 minutes. Please be patient.
#!/usr/bin/env python3 """ Lightweight Aphasia Classification App Optimized for Hugging Face Spaces with lazy loading and fallbacks """ import os # Configure environment for CPU-only and memory optimization os.environ['CUDA_VISIBLE_DEVICES'] = '' # Force CPU-only os.environ['PYTORCH_CUDA_ALLOC_CONF'] = 'max_split_size_mb:128' os.environ['OMP_NUM_THREADS'] = '2' # Limit CPU threads os.environ['MKL_NUM_THREADS'] = '2' os.environ['NUMEXPR_NUM_THREADS'] = '2' os.environ['TOKENIZERS_PARALLELISM'] = 'false' # Avoid tokenizer warnings # Batchalign specific settings os.environ['BATCHALIGN_CACHE'] = '/tmp/batchalign_cache' os.environ['HF_HUB_CACHE'] = '/tmp/hf_cache' # Use tmp for model cache os.environ['TRANSFORMERS_CACHE'] = '/tmp/transformers_cache' # Whisper settings for CPU optimization os.environ['WHISPER_CACHE'] = '/tmp/whisper_cache' print("🔧 Environment configured for CPU-only processing") print("💾 Model caches set to /tmp/ to save space") from flask import Flask, request, render_template_string, jsonify import os import tempfile import logging import json import threading import time from pathlib import Path # Set up logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) app = Flask(__name__) app.config['MAX_CONTENT_LENGTH'] = 50 * 1024 * 1024 # 50MB max (reduced) print("🚀 Starting Lightweight Aphasia Classification System") # Global state MODULES = {} MODELS_LOADED = False LOADING_STATUS = "Starting up..." def lazy_import_modules(): """Import modules only when needed""" global MODULES, MODELS_LOADED, LOADING_STATUS if MODELS_LOADED: return True try: LOADING_STATUS = "Loading audio processing..." logger.info("Importing utils_audio...") from utils_audio import convert_to_wav MODULES['convert_to_wav'] = convert_to_wav logger.info("✓ Audio processing loaded") LOADING_STATUS = "Loading speech analysis..." logger.info("Importing to_cha...") from to_cha import to_cha_from_wav MODULES['to_cha_from_wav'] = to_cha_from_wav logger.info("✓ Speech analysis loaded") LOADING_STATUS = "Loading data conversion..." logger.info("Importing cha_json...") from cha_json import cha_to_json_file MODULES['cha_to_json_file'] = cha_to_json_file logger.info("✓ Data conversion loaded") LOADING_STATUS = "Loading AI model..." logger.info("Importing output...") from output import predict_from_chajson MODULES['predict_from_chajson'] = predict_from_chajson logger.info("✓ AI model loaded") MODELS_LOADED = True LOADING_STATUS = "Ready!" logger.info("🎉 All modules loaded successfully!") return True except Exception as e: logger.error(f"Failed to load modules: {e}") LOADING_STATUS = f"Error: {str(e)}" return False def background_loader(): """Load modules in background thread""" logger.info("Starting background module loading...") lazy_import_modules() # Start loading modules in background loading_thread = threading.Thread(target=background_loader, daemon=True) loading_thread.start() # HTML Template (simplified) HTML_TEMPLATE = """
AI-powered speech analysis for aphasia identification
Upload speech audio for aphasia classification
Supported: MP3, WAV, M4A (max 50MB)
This may take 2-5 minutes. Please be patient.