Link to this sectionIntégration Labelbox#
Ultralytics Platform lit directement les exports NDJSON de Labelbox. Il n'y a pas de clé à coller, pas de connexion à maintenir active, et aucun script de conversion à maintenir — exporte depuis Labelbox, importe le fichier, et tes étiquettes arrivent comme un jeu de données Platform normal.
Link to this sectionImporter depuis Labelbox#
- Exporte depuis Labelbox. Ouvre le projet de labélisation ou le catalogue que tu souhaites récupérer et va dans l'onglet Data Rows. Sélectionne All, clique sur Export data, choisis les champs à inclure et confirme. Tu exportes depuis le catalogue plutôt que depuis un projet ? Active Export labels from project et choisis le projet, sinon le fichier arrivera sans aucune annotation.
- Télécharge le fichier. Labelbox exécute l'export en tant que tâche de fond. Surveille-le dans les Notifications et clique sur Download lorsqu'il est terminé pour enregistrer le fichier
.ndjson. - Importe sur Platform. Crée un nouveau jeu de données et importe le fichier
.ndjson, ou colle un lien direct vers celui-ci. Tu peux aussi commencer depuis Settings > Integrations > Labelbox. - Entraîne. Une fois le traitement terminé, modifie les annotations et entraîne exactement comme n'importe quel autre jeu de données Platform.
Contrairement à CVAT et Label Studio, il n'y a pas de format à choisir — l'export natif de Labelbox est celui pris en charge.
Link to this sectionExporter avec le SDK#
Labelbox propose également la tâche d'export dans son SDK Python, ce qui représente la solution la plus simple pour un pipeline répétable. Diffuse la tâche en flux continu 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() # streaming a task that isn't COMPLETE raises
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 NDJSON correspond à un objet JSON par ligne. json.dump(list_of_rows, f) écrit à la place un tableau unique, et Platform ignore toute ligne qui n'est pas un objet JSON — l'import ne trouve alors aucune ligne de données. Utilise la boucle ci-dessus, ou "\n".join(json.dumps(r) for r in rows).
Link to this sectionCe qui est importé#
Platform reconnaît de lui-même le format Labelbox et associe les boîtes englobantes et les polygones au type de tâche YOLO correspondant :
| Annotation Labelbox | Importé |
|---|---|
| Boîte englobante | Detect |
| Polygone | Segment |
| Masque de segmentation, point, polyligne, relation, classification | Pas encore |
Le name de chaque objet devient le nom de classe — une annotation "name": "Dog" est donc importée en tant que classe Dog, et non pas son value en minuscules — et les coordonnées de pixels sont normalisées par rapport aux dimensions media_attributes dans l'export. Un export de catalogue sans annotations est importé en tant que jeu de données d'images non étiquetées, prêt à être labélisé dans l'éditeur d'annotations de Platform.
Une seule ligne de données ressemble à ceci, tronquée aux champs lus par Platform :
{
"data_row": {
"external_id": "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'export — embeddings, metadata_fields, attachments, project_details — est ignoré. Il est préférable de désélectionner les embeddings lors de l'export : dans un export d'exemple, ils représentaient environ les quatre cinquièmes du fichier, contre un cinquième pour les champs réellement lus par Platform.
Seules les boîtes englobantes et les polygones sont lus actuellement, et uniquement à partir d'une annotation d'objet — les classifications au niveau de l'image se trouvent ailleurs dans l'export et sont ignorées. Un projet étiqueté entièrement avec l'outil de masque de segmentation (pinceau), des points, des polylignes ou des classifications importe ses images mais aucune annotation, et aucune erreur n'est générée. Tu peux le repérer sur la page du jeu de données : un jeu de données importé qui a conservé ses étiquettes affiche un compteur d'éléments étiquetés et d'annotations à côté du nombre d'images, tandis que celui qui les a perdus n'affiche ni l'un ni l'autre.
Un export Labelbox référence chaque image par une URL signée plutôt que d'intégrer les pixels, et ces signatures expirent. Platform télécharge les images à partir de ces URL, en testant un échantillon avant de commencer ; un export dont tous les liens ont expiré échoue donc immédiatement et t'en indique la raison — ré-exporte depuis Labelbox et importe le nouveau fichier. Un export partiellement expiré importe les images qu'il peut encore atteindre et ignore le reste, alors importe rapidement après l'export.
Un export contenant à la fois des boîtes englobantes et des polygones est importé en tant que jeu de données de segments, et un jeu de données de segments ne transporte que la géométrie des polygones — les annotations de boîtes ne sont pas utilisées pour l'entraînement et ne sont pas incluses dans les exports de versions. Exporte les boîtes et les polygones sous forme de projets Labelbox séparés si tu as besoin des deux. Les polygones ont également besoin d'au moins trois points pour être lus.