Labelbox-Integration#
Ultralytics Platform liest Labelbox-NDJSON-Exporte direkt ein. Es muss kein Schlüssel eingefügt, keine Verbindung aufrechterhalten und kein Konvertierungsskript gepflegt werden – exportiere aus Labelbox, lade die Datei hoch, und deine Labels kommen als ganz normales Platform-Dataset an.
Aus Labelbox importieren#
- Aus Labelbox exportieren. Öffne das Labeling-Projekt oder den Katalog, das bzw. den du übernehmen möchtest, und wechsle zum Tab Data Rows. Wähle All, klicke auf Export data, wähle die einzubeziehenden Felder aus und bestätige. Exportierst du aus dem Katalog statt aus einem Projekt? Aktiviere Export labels from project und wähle das Projekt aus, andernfalls kommt die Datei völlig ohne Annotationen an.
- Datei herunterladen. Labelbox führt den Export als Hintergrund-Job aus. Achte auf die Benachrichtigungen in Notifications und klicke nach Abschluss auf Download, um die Datei
.ndjsonzu speichern. - Zu Platform hochladen. Erstelle ein neues Dataset und lade die Datei
.ndjsonhoch oder füge einen direkten Link zu ihr ein. Du kannst auch unter Settings > Integrations > Labelbox starten. - Trainieren. Sobald die Verarbeitung abgeschlossen ist, kannst du die Annotationen bearbeiten und trainieren – genau wie bei jedem anderen Platform-Dataset.

Im Gegensatz zu CVAT und Label Studio muss kein Format ausgewählt werden – der eigene Export von Labelbox wird unterstützt.
Mit dem SDK exportieren#
Labelbox bietet die Exportaufgabe auch in seinem Python-SDK an, was der einfachere Weg für eine wiederholbare Pipeline ist. Streame die Aufgabe und schreibe ein JSON-Objekt pro Zeile:
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())NDJSON bedeutet ein JSON-Objekt pro Zeile. json.dump(list_of_rows, f) schreibt stattdessen ein einziges Array, und Platform überspringt jede Zeile, die kein JSON-Objekt ist – der Import findet dann überhaupt keine Datenzeilen. Nutze stattdessen den obigen Ablauf oder "\n".join(json.dumps(r) for r in rows).
Was wird importiert#
Platform erkennt das Labelbox-Format eigenständig und bildet Bounding-Boxen und Polygone auf den passenden YOLO-Task-Typ ab:
| Labelbox-Annotation | Importiert |
|---|---|
| Bounding Box | Detect |
| Polygon | Segment |
| Segmentierungsmaske, Punkt, Polylinie, Beziehung, Klassifizierung | Noch nicht |
Jedes Objekt name wird zum Klassennamen – sodass eine "name": "Dog"-Annotation als Klasse Dog importiert wird, nicht als Kleinbuchstabe value –, und Pixelkoordinaten werden anhand der media_attributes-Dimensionen im Export normalisiert. Jedes Bild wird nach seiner data_row.external_id benannt, wobei auf den Dateinamen in der signierten URL zurückgegriffen wird, wenn der Export keine externe ID enthält. Ein Katalogexport ohne Annotationen wird als unbeschrifteter Bilddatensatz importiert, der im Annotation Editor der Platform beschriftet werden kann.
Eine einzelne Datenzeile sieht wie folgt aus, gekürzt auf die Felder, die Platform liest:
{
"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 }
}
]
}
}
]
}
}
}Alles andere im Export – embeddings, metadata_fields, attachments, project_details – wird ignoriert. Es lohnt sich, die Embeddings beim Export abzuwählen: In einem Beispiel-Export machten sie etwa vier Fünftel der Datei aus, während auf die von Platform tatsächlich gelesenen Felder nur ein Fünftel entfiel.
Derzeit werden nur Bounding Boxes und Polygone eingelesen, und das auch nur aus einer Objektannotation – bildweite Klassifizierungen befinden sich an anderer Stelle im Export und werden übersprungen. Ein Projekt, das ausschließlich mit dem Segmentierungsmasken- (Pinsel-) Werkzeug, Punkten, Polylinien oder Klassifizierungen beschriftet wurde, importiert zwar seine Bilder, aber keine Annotationen, und es wird kein Fehler ausgegeben. Du kannst dies auf der Datensatzseite erkennen: Ein importierter Datensatz, der seine Labels behalten hat, zeigt eine Anzahl an beschrifteten Elementen und Annotationen neben der Bildanzahl an, während ein Datensatz, der sie verloren hat, keines von beiden anzeigt.
Ein Labelbox-Export verweist auf jedes Bild über eine signierte URL, anstatt die Pixel einzubetten, und diese Signaturen laufen ab. Platform lädt die Bilder von diesen URLs herunter und testet vor dem Start eine Stichprobe; ein Export, dessen Links alle abgelaufen sind, schlägt daher sofort fehl und teilt dir den Grund mit – exportiere einfach erneut aus Labelbox und lade die neue Datei hoch. Ein Export, der nur teilweise abgelaufen ist, importiert die Bilder, die er noch erreichen kann, und überspringt den Rest. Lade die Datei daher bald nach dem Export hoch.
Ein Export, der sowohl Bounding Boxes als auch Polygone enthält, wird als Segmentdatensatz importiert, und ein Segmentdatensatz enthält ausschließlich Polygongeometrien – die Box-Annotationen werden weder für das Training verwendet noch in Versionsexporte einbezogen. Exportiere Boxen und Polygone als separate Labelbox-Projekte, wenn du beides benötigst. Polygone erfordern außerdem mindestens drei Punkte, um eingelesen zu werden.