Labelbox-Integration#
Die Ultralytics Platform liest NDJSON-Exporte aus Labelbox direkt ein. Du musst keinen Schlüssel einfügen, keine Verbindung aufrechterhalten und kein Konvertierungsskript pflegen – exportiere aus Labelbox, lade die Datei hoch, und deine Beschriftungen kommen als normaler Platform-Datensatz an.
Aus Labelbox importieren#
- Aus Labelbox exportieren. Öffne das Beschriftungsprojekt oder den Katalog, den du importieren möchtest, und wechsle zum Tab Datenzeilen. Wähle Alle aus, klicke auf Daten exportieren, wähle die einzuschließenden Felder aus und bestätige. Exportierst du aus dem Katalog statt aus einem Projekt? Aktiviere Beschriftungen aus Projekt exportieren und wähle das Projekt aus, sonst enthält die Datei überhaupt keine Annotationen.
- Datei herunterladen. Labelbox führt den Export als Hintergrundauftrag aus. Suche unter Benachrichtigungen danach und klicke auf Herunterladen, sobald der Vorgang abgeschlossen ist, um die Datei
.ndjsonzu speichern. - In Platform hochladen. Erstelle einen neuen Datensatz und lade die Datei
.ndjsonhoch oder füge einen direkten Link darauf ein. Du kannst auch über Einstellungen > Integrationen > Labelbox beginnen. - Trainieren. Sobald die Verarbeitung abgeschlossen ist, bearbeite die Annotationen und trainiere genau wie bei jedem anderen Platform-Datensatz.

Anders als bei CVAT und Label Studio musst du kein Format auswählen – der eigene Export von Labelbox ist das unterstützte Format.
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 besteht aus einem JSON-Objekt pro Zeile. json.dump(list_of_rows, f) schreibt stattdessen ein einzelnes Array, und Platform überspringt jede Zeile, die kein JSON-Objekt ist – der Import findet überhaupt keine Datenzeilen. Verwende die Schleife oben oder "\n".join(json.dumps(r) for r in rows).
Was importiert wird#
Platform erkennt das Labelbox-Format automatisch und ordnet Begrenzungsrahmen und Polygone dem passenden YOLO-Aufgabentyp zu:
| Labelbox-Annotation | Importiert |
|---|---|
| Begrenzungsrahmen | Erkennen |
| Polygon | Segmentieren |
| Segmentierungsmaske, Punkt, Polylinie, Beziehung, Klassifizierung | Noch nicht |
Das name jedes Objekts wird zum Klassennamen – eine "name": "Dog"-Annotation wird also als Klasse Dog importiert, nicht als ihr kleingeschriebenes value – und die Pixelkoordinaten werden anhand der media_attributes-Abmessungen im Export normalisiert. Jedes Bild wird nach seinem data_row.external_id benannt. Fehlt im Export eine externe ID, wird stattdessen der Dateiname aus der signierten URL verwendet. Ein Katalogexport ohne Annotationen wird als nicht beschrifteter Bilddatensatz importiert, der in Platform im Annotationseditor beschriftet werden kann.
Eine einzelne Datenzeile sieht, gekürzt auf die von Platform gelesenen Felder, so aus:
{
"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 Einbettungen beim Export abzuwählen: In einem Beispiel-Export machten sie etwa vier Fünftel der Datei aus, während die von Platform tatsächlich gelesenen Felder ein Fünftel belegten.
Derzeit werden nur Begrenzungsrahmen und Polygone gelesen, und zwar nur aus einer Objektannotation – bildweite Klassifizierungen befinden sich an anderer Stelle im Export und werden übersprungen. Ein Projekt, das vollständig mit dem Segmentierungswerkzeug (Pinsel), mit Punkten, Polylinien oder Klassifizierungen beschriftet wurde, importiert seine Bilder, aber keine Annotationen, ohne dass ein Fehler ausgegeben wird. Du erkennst dies auf der Datensatzseite: Bei einem importierten Datensatz, dessen Beschriftungen erhalten geblieben sind, werden neben der Bildanzahl auch die Anzahl der beschrifteten Bilder und der Annotationen angezeigt; bei einem Datensatz, bei dem sie verloren gegangen sind, fehlt beides.
Ein Labelbox-Export verweist auf jedes Bild über eine signierte URL, statt die Pixel einzubetten, und diese Signaturen laufen ab. Platform lädt die Bilder über diese URLs herunter und prüft vor dem Start eine Stichprobe. Ein Export, dessen Links bereits alle abgelaufen sind, schlägt daher sofort fehl und nennt den Grund – exportiere erneut aus Labelbox und lade die neue Datei hoch. Bei einem nur teilweise abgelaufenen Export werden die Bilder importiert, die noch erreichbar sind, während der Rest übersprungen wird. Lade die Datei daher bald nach dem Export hoch.
Ein Export mit Begrenzungsrahmen und Polygonen wird als Segmentierungsdatensatz importiert, und ein Segmentierungsdatensatz enthält nur Polygongeometrien – die Rahmenannotation wird weder zum Training verwendet noch in Versions-Exporten berücksichtigt. Exportiere Rahmen und Polygone als separate Labelbox-Projekte, wenn du beides benötigst. Polygone müssen außerdem mindestens drei Punkte enthalten, damit sie gelesen werden.