Skip to content
Guides5 min read

Annotation d'images médicales avec Potato

Bonnes pratiques pour annoter des images médicales dans Potato, affichage DICOM, étiquetage de comptes rendus de radiologie, extraction d'événements indésirables et déploiement auto-hébergé conforme à l'IRB.

Potato Team

Vous pouvez utiliser l'annotation d'images de Potato pour des images médicales telles que des radiographies, des photographies de lésions cutanées ou d'autres images cliniques, à condition qu'elles soient dans un format standard comme PNG ou JPG. Ce guide explique comment bien mettre en place ce type de projet.

Pour les mécanismes sous-jacents de l'annotation d'images, consultez la documentation source.

Avant de commencer

Un projet d'annotation médicale s'accompagne d'obligations qui n'ont rien à voir avec Potato. Supprimez d'abord toutes les PHI des images. Conservez les données sur l'infrastructure sécurisée de votre institution pour le stockage et le traitement. Contrôlez l'accès des annotateurs via le système d'authentification que vous utilisez déjà. Et impliquez tôt vos équipes IRB et conformité afin de respecter les exigences institutionnelles plutôt que de les découvrir après coup.

Une chose à bien comprendre : Potato est un outil d'annotation, pas une plateforme d'imagerie médicale. Il n'a aucune conformité HIPAA intégrée, aucun visualiseur DICOM et aucune fonctionnalité d'imagerie spécialisée. Gérez ces aspects au niveau de l'infrastructure.

Configuration de base de l'annotation d'images médicales

Voici comment configurer Potato pour des images médicales standard :

yaml
annotation_task_name: "Medical Image Annotation"
 
data_files:
  - path: data/medical_images.json
    type: json
 
annotation_schemes:
  - annotation_type: bounding_box
    name: lesions
    allow_multiple: true
    labels:
      - name: primary
        color: "#EF4444"
        description: "Primary finding"
 
      - name: secondary
        color: "#F97316"
        description: "Secondary finding"
 
      - name: artifact
        color: "#6B7280"
        description: "Artifact or noise"
 
  - annotation_type: radio
    name: image_quality
    question: "Overall image quality?"
    options:
      - name: diagnostic
        label: "Diagnostic Quality"
      - name: limited
        label: "Limited Quality"
      - name: non_diagnostic
        label: "Non-Diagnostic"

Annotation de radiographies et de photos cliniques

Pour des radiographies ou des photographies cliniques exportées vers des formats d'image standard :

yaml
annotation_task_name: "X-Ray Findings Annotation"
 
data_files:
  - path: data/xray_images.json
    type: json
 
annotation_schemes:
  - annotation_type: polygon
    name: abnormalities
    allow_multiple: true
    labels:
      - name: opacity
        color: "#EF4444"
        description: "Pulmonary opacity"
 
      - name: consolidation
        color: "#F97316"
        description: "Consolidation"
 
      - name: nodule
        color: "#EAB308"
        description: "Pulmonary nodule"
 
      - name: effusion
        color: "#3B82F6"
        description: "Pleural effusion"
 
  - annotation_type: multiselect
    name: findings
    question: "Select all findings present"
    options:
      - name: normal
        label: "No acute findings"
      - name: pneumonia
        label: "Pneumonia"
      - name: atelectasis
        label: "Atelectasis"
      - name: pneumothorax
        label: "Pneumothorax"
      - name: fracture
        label: "Fracture"

Annotation de lésions cutanées

Pour les images dermatologiques :

yaml
annotation_task_name: "Dermoscopy Annotation"
 
data_files:
  - path: data/skin_lesions.json
    type: json
 
annotation_schemes:
  - annotation_type: polygon
    name: lesion_boundary
    labels:
      - name: lesion
        color: "#EF4444"
        description: "Lesion boundary"
 
  - annotation_type: multiselect
    name: dermoscopic_features
    question: "Select all features present"
    options:
      - name: pigment_network
        label: "Pigment Network"
      - name: dots_globules
        label: "Dots/Globules"
      - name: streaks
        label: "Streaks"
      - name: blue_white_veil
        label: "Blue-White Veil"
      - name: regression
        label: "Regression Structures"
      - name: vascular
        label: "Vascular Structures"
 
  - annotation_type: radio
    name: diagnosis
    question: "Most likely diagnosis?"
    options:
      - name: benign_nevus
        label: "Benign Nevus"
      - name: seborrheic_keratosis
        label: "Seborrheic Keratosis"
      - name: basal_cell
        label: "Basal Cell Carcinoma"
      - name: melanoma
        label: "Melanoma"
      - name: other
        label: "Other"
 
  - annotation_type: likert
    name: confidence
    question: "Diagnostic confidence"
    size: 5
    min_label: "Low"
    max_label: "High"

Annotation d'images rétiniennes

Pour les photographies du fond d'œil et autres images rétiniennes :

yaml
annotation_task_name: "Fundus Image Annotation"
 
data_files:
  - path: data/fundus_images.json
    type: json
 
annotation_schemes:
  - annotation_type: polygon
    name: anatomical_structures
    labels:
      - name: optic_disc
        color: "#FDE68A"
        description: "Optic disc boundary"
 
      - name: fovea
        color: "#A78BFA"
        description: "Fovea region"
 
      - name: macula
        color: "#93C5FD"
        description: "Macular region"
 
  - annotation_type: polygon
    name: pathology
    allow_multiple: true
    labels:
      - name: hemorrhage
        color: "#EF4444"
        description: "Retinal hemorrhage"
 
      - name: exudate
        color: "#FCD34D"
        description: "Hard/soft exudate"
 
      - name: microaneurysm
        color: "#F97316"
        description: "Microaneurysm"
 
  - annotation_type: radio
    name: dr_grade
    question: "Diabetic retinopathy grade"
    options:
      - name: none
        label: "No DR"
      - name: mild
        label: "Mild NPDR"
      - name: moderate
        label: "Moderate NPDR"
      - name: severe
        label: "Severe NPDR"
      - name: proliferative
        label: "PDR"

Format des données

Préparez vos données d'images au format JSON :

json
[
  {
    "id": "case_001",
    "image": "images/case_001.png",
    "metadata": {
      "body_part": "chest",
      "modality": "xray"
    }
  },
  {
    "id": "case_002",
    "image": "images/case_002.png",
    "metadata": {
      "body_part": "chest",
      "modality": "xray"
    }
  }
]

Note : les images doivent être dans des formats compatibles avec le web (PNG, JPG, etc.). Les fichiers DICOM doivent être convertis en formats d'image standard avant d'être utilisés avec Potato.

Bonnes pratiques

Faites appel à des annotateurs disposant d'une véritable formation clinique, car ce travail ne peut pas être confié à n'importe qui. Pré-traitez d'abord les images : convertissez le DICOM et les autres formats spécialisés en formats standard, et vérifiez que les PHI ont bien été supprimées. Faites étiqueter chaque image par plusieurs annotateurs afin de pouvoir mesurer l'accord. Rédigez des consignes propres à votre domaine clinique plutôt que génériques. Glissez des cas de référence pour garder un œil sur la précision. Et tenez votre équipe de conformité informée de la manière dont les données sont traitées.

Limitations

Potato fait de l'annotation d'images généraliste. Il ne vous offre pas de support DICOM natif ni de visualiseur DICOM, pas de visualiseurs d'images de lames entières avec zoom multi-résolution, pas de conformité HIPAA intégrée ni de journalisation d'audit, pas de vérification des accréditations, ni d'outils de fenêtrage radiologique. Si vous avez besoin de ces fonctions, pré-traitez vos données ou placez Potato aux côtés d'une infrastructure d'imagerie médicale dédiée.


Pour en savoir plus sur l'annotation d'images, voir /docs/features/image-annotation.