File size: 4,302 Bytes
7a317d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# 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