elephmind-api / localization.py
issoufzousko07's picture
Add all backend files for HF Space deployment
7a317d2
# Mappings de localisation (Anglais -> Français)
# Ce fichier permet de traduire les résultats de l'IA sans modifier les prompts originaux
# qui doivent rester en anglais pour la performance du modèle.
DOMAIN_TRANSLATIONS = {
'Thoracic': {
'label': 'Thoracique',
'description': 'Analyse Radiographique du Thorax'
},
'Dermatology': {
'label': 'Dermatologie',
'description': 'Analyse Dermatoscope des Lésions Cutanées'
},
'Histology': {
'label': 'Histologie',
'description': 'Analyse Microscopique (H&E)'
},
'Ophthalmology': {
'label': 'Ophtalmologie',
'description': 'Fond d\'Oeil (Rétine)'
},
'Orthopedics': {
'label': 'Orthopédie',
'description': 'Radiographie Osseuse'
}
}
LABEL_TRANSLATIONS = {
# --- THORACIC ---
'Diffuse interstitial opacities or ground-glass pattern (Viral/Atypical Pneumonia)':
'Opacités interstitielles diffuses ou aspect en verre dépoli (Pneumonie Virale/Atypique)',
'Focal alveolar consolidation with air bronchograms (Bacterial Pneumonia)':
'Condensation alvéolaire focale avec bronchogrammes aériens (Pneumonie Bactérienne)',
'Perfectly clear lungs, sharp costophrenic angles, no pathology':
'Poumons parfaitement clairs, angles costophréniques nets, aucune pathologie',
'Pneumothorax (Lung collapse)': 'Pneumothorax (Décollement de la plèvre)',
'Pleural Effusion (Fluid)': 'Épanchement Pleural (Liquide)',
'Cardiomegaly (Enlarged heart)': 'Cardiomégalie (Cœur élargi)',
'Pulmonary Edema': 'Œdème Pulmonaire',
'Lung Nodule or Mass': 'Nodule ou Masse Pulmonaire',
'Atelectasis (Lung collapse)': 'Atélectasie (Affaissement pulmonaire)',
# --- DERMATOLOGY ---
'A healthy skin area without lesion': 'Zone de peau saine sans lésion',
'A benign nevus (mole) regular, symmetrical and homogeneous': 'Nævus bénin (grain de beauté) régulier, symétrique et homogène',
'A seborrheic keratosis (benign warty lesion)': 'Kératose séborrhéique (lésion verruqueuse bénigne)',
'A malignant melanoma with asymmetry, irregular borders and multiple colors': 'Mélanome malin (Asymétrie, Bords irréguliers, Couleurs multiples)',
'A basal cell carcinoma (pearly or ulcerated lesion)': 'Carcinome basocellulaire (lésion perlée ou ulcérée)',
'A squamous cell carcinoma (crusty or budding lesion)': 'Carcinome épidermoïde (lésion croûteuse ou bourgeonnante)',
'A non-specific inflammatory skin lesion': 'Lésion cutanée inflammatoire non spécifique',
# --- ORTHOPEDICS ---
'Severe osteoarthritis with bone-on-bone contact and large osteophytes (Grade 4)': 'Arthrose sévère avec contact os-contre-os et ostéophytes importants (Grade 4)',
'Moderate osteoarthritis with definite joint space narrowing (Grade 2-3)': 'Arthrose modérée avec pincement articulaire net (Grade 2-3)',
'Normal knee joint with preserved joint space and no osteophytes (Grade 0-1)': 'Genou normal, interligne articulaire préservé (Grade 0-1)',
'Total knee arthroplasty (TKA) with metallic implant': 'Prothèse totale de genou (implant métallique)',
'Acute knee fracture or dislocation': 'Fracture ou luxation aiguë du genou',
'Other x-ray view (Chest, Hand, Foot, Pediatric) - OUT OF DISTRIBUTION': 'Autre vue radiographique (Hors périmètre)',
'A knee x-ray view (Knee Joint)': 'Radiographie du Genou'
}
def localize_result(result_json):
"""
Traduit les résultats bruts (Anglais) en Français
en utilisant les dictionnaires de mapping.
"""
# 1. Localiser le Domaine
domain_key = result_json['domain']['label']
if domain_key in DOMAIN_TRANSLATIONS:
result_json['domain']['label'] = DOMAIN_TRANSLATIONS[domain_key]['label']
result_json['domain']['description'] = DOMAIN_TRANSLATIONS[domain_key]['description']
# 2. Localiser les Résultats Spécifiques
for item in result_json['specific']:
original_label = item['label']
if original_label in LABEL_TRANSLATIONS:
item['label'] = LABEL_TRANSLATIONS[original_label]
# Si pas de traduction trouvée, on garde l'anglais (fallback)
return result_json