Intégration Labelbox#
Ultralytics Platform lit directement les exportations NDJSON de Labelbox. Aucune clé à coller, aucune connexion à maintenir active et aucun script de conversion à gérer : exporte depuis Labelbox, téléverse le fichier et tes annotations apparaîtront dans un jeu de données Platform standard.
Importer depuis Labelbox#
- Exporter depuis Labelbox. Pour un projet d’annotation, ouvre l’onglet Data Rows, sélectionne All, clique sur Export data, choisis les champs à inclure et confirme. Dans Catalog, sélectionne les lignes de données et choisis Manage selection > Export data, puis active Export labels from project et sélectionne le projet ; sinon, le fichier ne contiendra aucune annotation.
- Télécharger le fichier. Labelbox exécute l’exportation en arrière-plan. Surveille son état dans Notifications et clique sur Download une fois l’opération terminée pour enregistrer le fichier
.ndjson. - Téléverser dans Platform. Crée un nouveau jeu de données et téléverse le fichier
.ndjson, ou colle un lien direct vers celui-ci. Tu peux aussi commencer depuis Settings > Integrations > Labelbox. - Entraîner. Une fois le traitement terminé, modifie les annotations et entraîne le modèle comme pour n’importe quel autre jeu de données Platform.

Contrairement à CVAT et à Label Studio, aucun format n’est à choisir : l’exportation native de Labelbox est le format pris en charge.
Exporter avec le SDK#
Labelbox propose également la tâche d’exportation dans son SDK Python, une méthode plus simple pour créer un pipeline reproductible. Parcours la tâche en flux et écris un objet JSON par ligne :
import json
import labelbox
client = labelbox.Client(api_key="YOUR_LABELBOX_API_KEY")
export_task = labelbox.ExportTask.get_task(client, "YOUR_EXPORT_TASK_ID")
export_task.wait_till_done() # le traitement en flux d’une tâche qui n’est pas COMPLETE déclenche une erreur
with open("dataset.ndjson", "w") as f:
f.writelines(json.dumps(data_row.json) + "\n" for data_row in export_task.get_buffered_stream())Le format NDJSON contient un objet JSON par ligne. json.dump(list_of_rows, f) écrit plutôt un seul tableau, et Platform ignore toutes les lignes qui ne sont pas des objets JSON : l’importation ne trouve alors aucune ligne de données. Utilise la boucle ci-dessus ou "\n".join(json.dumps(r) for r in rows).
Données importées#
Platform reconnaît automatiquement le format Labelbox et convertit les boîtes englobantes et les polygones en fonction du type de tâche YOLO correspondant :
| Annotation Labelbox | Importée |
|---|---|
| Boîte englobante | Détecter |
| Polygone | Segmenter |
| Masque de segmentation, point, polyligne, relation, classification | Pas encore |
Le name de chaque objet devient le nom de la classe : une annotation "name": "Dog" est donc importée comme classe Dog, et non comme son value en minuscules ; les coordonnées des pixels sont normalisées par rapport aux dimensions media_attributes de l’exportation, alors conserve les attributs des médias dans l’exportation : les lignes sans largeur ni hauteur importent l’image sans annotations. Seuls les objets que Platform peut importer créent une classe ; les outils de masque, de point et de polyligne n’ajoutent donc pas de classes vides au jeu de données. Chaque image porte le nom de son data_row.external_id, puis de son global_key si le premier manque ; si l’exportation ne contient ni l’un ni l’autre, le nom du fichier dans l’URL signée est utilisé. Les lignes de données d’image sont importées ; celles des vidéos, du texte et des autres données non image sont ignorées. Une exportation de catalogue sans annotations est importée sous forme de jeu de données d’images non annotées, prêtes à être annotées dans l’éditeur d’annotations de Platform.
Voici à quoi ressemble une seule ligne de données, réduite aux champs lus par Platform :
{
"data_row": {
"external_id": "000000000307.jpg",
"global_key": "000000000307.jpg",
"row_data": "https://storage.labelbox.com/...?Expires=...&Signature=..."
},
"media_attributes": { "height": 480, "width": 640, "mime_type": "image/jpeg" },
"projects": {
"<project-id>": {
"labels": [
{
"annotations": {
"objects": [
{
"name": "Dog",
"annotation_kind": "ImageBoundingBox",
"bounding_box": { "top": 200.0, "left": 407.0, "height": 172.0, "width": 176.0 }
}
]
}
}
]
}
}
}Tout le reste de l’exportation — embeddings, metadata_fields, attachments, project_details — est ignoré. Il est préférable de désélectionner les embeddings lors de l’exportation : dans un exemple d’exportation, ils représentaient environ les quatre cinquièmes du fichier, contre un cinquième pour les champs réellement lus par Platform.
Pour l’instant, seules les boîtes englobantes et les polygones sont lus, et uniquement à partir d’une annotation d’objet ; les classifications au niveau de l’image se trouvent ailleurs dans l’exportation et sont ignorées. Un projet entièrement annoté avec l’outil de masque de segmentation (pinceau), des points, des polylignes ou des classifications importe les images, mais aucune annotation, sans afficher d’erreur. Tu peux le vérifier sur la page du jeu de données : un jeu de données importé dont les annotations ont été conservées affiche des nombres d’images annotées et d’annotations à côté du nombre d’images ; si elles ont été perdues, ces nombres n’apparaissent pas.
Une exportation Labelbox référence chaque image par une URL signée au lieu d’intégrer les pixels, et ces signatures expirent. Platform télécharge les images depuis ces URL et vérifie un échantillon avant de commencer ; une exportation dont tous les liens ont expiré échoue immédiatement et en indique la raison : réexporte depuis Labelbox et téléverse le nouveau fichier. Si seuls certains liens de l’exportation ont expiré, les images encore accessibles sont importées et les autres sont ignorées ; téléverse donc le fichier peu après l’exportation.
Une exportation contenant à la fois des boîtes englobantes et des polygones est importée comme jeu de données de segmentation, qui ne conserve que la géométrie des polygones : les annotations de boîtes ne sont ni utilisées pour l’entraînement ni incluses dans les exportations de versions. Exporte les boîtes et les polygones dans des projets Labelbox distincts si tu as besoin des deux. Les polygones doivent également comporter au moins trois points pour être lus.
FAQ#
Les boîtes englobantes sont importées comme jeu de données de détection et les polygones comme jeu de données de segmentation. Les masques de segmentation, les points, les polylignes, les relations et les classifications ne sont pas encore lus ; un projet annoté uniquement avec ces outils importe donc ses images sans annotations.
Platform lit le format NDJSON, avec un objet JSON par ligne. Une exportation enregistrée sous forme d’un seul tableau JSON est entièrement ignorée. Utilise la boucle SDK ci-dessus ou le téléchargement Export data de Labelbox, qui est déjà au format NDJSON.
Les exportations Labelbox référencent les images par des URL signées, dont les signatures expirent. Réexporte depuis Labelbox et téléverse le nouveau fichier peu après la fin de l’exportation.
Non. Une exportation mixte est importée comme jeu de données de segmentation et seuls les polygones sont utilisés. Exporte les boîtes et les polygones dans des projets Labelbox distincts si tu as besoin des deux.