From 391620fd5c0e2d5aca8ae6fe921eab9e2f778ba6 Mon Sep 17 00:00:00 2001 From: schneuwl Date: Sat, 10 Jan 2026 11:53:07 +0100 Subject: [PATCH] first refactored version --- createDataset.py | 50 +- main.py | 8 +- specs/labelstudio_export.json | 2703 +++++++++++++++++++++++++++++++++ specs/skier_pose.yaml | 24 + 4 files changed, 2759 insertions(+), 26 deletions(-) create mode 100644 specs/labelstudio_export.json create mode 100644 specs/skier_pose.yaml diff --git a/createDataset.py b/createDataset.py index bc98286..3354964 100644 --- a/createDataset.py +++ b/createDataset.py @@ -6,7 +6,7 @@ from urllib.parse import urlparse from tqdm.auto import tqdm -# --- KONFIGURATION --- +# s3 bucket configuration MINIO_CONFIG = { 'endpoint_url': 'https://minio.hgk.ch', 'access_key': 'meinAccessKey', @@ -14,28 +14,32 @@ MINIO_CONFIG = { 'bucket': 'skiai' } +# input specs, annotations JSON_PATH = 'datasets/skier_pose/labelstudio_export.json' -OUTPUT_DIR = 'datasets/skier_pose' -TRAIN_RATIO = 0.8 - -# Die Reihenfolge MUSS konsistent bleiben +# input specs, keypoint orde must stay consistent KP_ORDER = [ "leftski_tip", "leftski_tail", "rightski_tip", "rightski_tail", "leftpole_top", "leftpole_bottom", "rightpole_top", "rightpole_bottom" ] +# output specs +OUTPUT_DIR = 'datasets/skier_pose' +TRAIN_RATIO = 0.8 + + +# create folder structure +def __setup_directories(): -def setup_directories(): - """Erstellt die Struktur: train/images, train/labels, val/images, val/labels""" for split in ['train', 'val']: os.makedirs(os.path.join(OUTPUT_DIR, split, 'images'), exist_ok=True) os.makedirs(os.path.join(OUTPUT_DIR, split, 'labels'), exist_ok=True) -def download_from_minio(s3_path, local_path): +# download image from s3 +def __download_from_minio(s3_path, local_path): parsed = urlparse(s3_path) bucket = MINIO_CONFIG['bucket'] - # Entfernt 's3://bucketname/' falls vorhanden, sonst nur den slash + # removes 's3://bucketname/' if existing, otherwise slash key = parsed.path.lstrip('/') s3 = boto3.client('s3', @@ -45,8 +49,11 @@ def download_from_minio(s3_path, local_path): s3.download_file(bucket, key, local_path) -def convert_to_yolo(): - setup_directories() +# create YOLO dataset +def createYOLOdataset(): + __setup_directories() + + # read annotations with open(JSON_PATH, 'r', encoding='utf-8') as f: data = json.load(f) @@ -54,10 +61,11 @@ def convert_to_yolo(): random.shuffle(data) split_idx = int(len(data) * TRAIN_RATIO) + # loop over all images for i, entry in enumerate(tqdm(data, desc="Importing Images", unit="img")): split = 'train' if i < split_idx else 'val' - # Dateinamen aus dem 'data'-Feld holen + # get image name image_s3_path = entry['data']['image'] filename = os.path.basename(image_s3_path) base_name = os.path.splitext(filename)[0] @@ -66,20 +74,20 @@ def convert_to_yolo(): label_local_path = os.path.join(OUTPUT_DIR, split, 'labels', f"{base_name}.txt") try: - download_from_minio(image_s3_path, img_local_path) + __download_from_minio(image_s3_path, img_local_path) except Exception as e: tqdm.write(f"Error treating {filename}: {e}") continue yolo_lines = [] - # Sicherstellen, dass Annotationen vorhanden sind + # check if annotations, otherwise skip if not entry.get('annotations'): continue results = entry['annotations'][0].get('result', []) - # Hilfsmaps für das Matching über IDs + # dummy vars kp_map = {} # ID -> {label, x, y} visibility_map = {} # ID -> v_status (1 oder 2) bboxes = [] # Liste aller gefundenen BBoxes @@ -97,8 +105,6 @@ def convert_to_yolo(): } elif res_type == 'choices': - # Matching: Label Studio nutzt die gleiche ID für Keypoint und Choice - # Wir prüfen, ob die Checkbox "1" (dein Alias für verdeckt) gewählt wurde if "1" in val.get('choices', []): visibility_map[res_id] = 1 @@ -110,18 +116,16 @@ def convert_to_yolo(): by = (val['y'] / 100.0) + (bh / 2.0) bboxes.append(f"{bx:.6f} {by:.6f} {bw:.6f} {bh:.6f}") - # Für jede gefundene BBox eine YOLO Zeile generieren - # (Hinweis: Aktuell werden alle Keypoints an jede BBox gehängt) + # create yolo data for bbox_coords in bboxes: line = f"0 {bbox_coords}" for kp_name in KP_ORDER: - # Finde die ID des Keypoints mit diesem Namen target_id = next((id for id, d in kp_map.items() if d['label'] == kp_name), None) if target_id: coords = kp_map[target_id] - # Sichtbarkeit: 1 (verdeckt) wenn in visibility_map, sonst 2 (sichtbar) + # visibility, 0 missing, 1 invisible, 2 visible v = visibility_map.get(target_id, 2) line += f" {coords['x']:.6f} {coords['y']:.6f} {v}" else: @@ -132,7 +136,7 @@ def convert_to_yolo(): with open(label_local_path, 'w', encoding='utf-8') as f: f.write('\n'.join(yolo_lines)) - print(f"Fertig! Daten liegen in: {os.path.abspath(OUTPUT_DIR)}") + print(f"Finished! Dataset saved to: {os.path.abspath(OUTPUT_DIR)}") if __name__ == "__main__": - convert_to_yolo() \ No newline at end of file + createYOLOdataset() \ No newline at end of file diff --git a/main.py b/main.py index dfae9b8..a5f1b2d 100644 --- a/main.py +++ b/main.py @@ -1,16 +1,18 @@ + + from ultralytics import YOLO # Create a new YOLO model from scratch #model = YOLO("yolo11n.yaml") # Load a pretrained YOLO model (recommended for training) -model = YOLO("yolo11n-pose.pt") +#model = YOLO("yolo11n-pose.pt") # Train the model using the 'coco8.yaml' dataset for 3 epochs -results = model.train(data="datasets/skier_pose/skier_pose.yaml", epochs=200, imgsz=640, device='mps') +#results = model.train(data="datasets/skier_pose/skier_pose.yaml", epochs=200, imgsz=640, device='mps') # Evaluate the model's performance on the validation set -results = model.val() +#results = model.val() # Perform object detection on an image using the model #results = model("bus.jpg", device='cpu') diff --git a/specs/labelstudio_export.json b/specs/labelstudio_export.json new file mode 100644 index 0000000..038cfd5 --- /dev/null +++ b/specs/labelstudio_export.json @@ -0,0 +1,2703 @@ +[ + { + "id": 2, + "annotations": [ + { + "id": 2, + "completed_by": 1, + "result": [ + { + "id": "3y4Mgbt2kB", + "type": "keypointlabels", + "value": { + "x": 37.43977976600137, + "y": 87.58416137430717, + "width": 0.13764624913971094, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LN-LX_kLAb", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1600, + "original_height": 1124 + }, + { + "id": "o-FNSXN7a6", + "type": "keypointlabels", + "value": { + "x": 34.89332415691672, + "y": 23.51252654343817, + "width": 0.13764624913971094, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LN-LX_kLAb", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1600, + "original_height": 1124 + }, + { + "id": "dEpcluwZ5D", + "type": "keypointlabels", + "value": { + "x": 57.12319339298004, + "y": 97.96886059765903, + "width": 0.13764624913971094, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LN-LX_kLAb", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1600, + "original_height": 1124 + }, + { + "id": "45qooMr190", + "type": "keypointlabels", + "value": { + "x": 94.9070887818307, + "y": 87.7800990955025, + "width": 0.13764624913971094, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LN-LX_kLAb", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1600, + "original_height": 1124 + }, + { + "id": "LN-LX_kLAb", + "type": "rectanglelabels", + "value": { + "x": 3.9917412250516744, + "y": 2.057346072550832, + "width": 96.00825877494835, + "height": 97.94265392744919, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 1600, + "original_height": 1124 + }, + { + "id": "H3Wa-0ry1k", + "type": "keypointlabels", + "value": { + "x": 57.741456834532364, + "y": 52.33812949640287, + "width": 0.2526978417266187, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LN-LX_kLAb", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1600, + "original_height": 1124 + }, + { + "id": "H3Wa-0ry1k", + "type": "choices", + "value": { + "x": 57.741456834532364, + "y": 52.33812949640287, + "width": 0.2526978417266187, + "choices": [ + "1" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LN-LX_kLAb", + "from_name": "visibility", + "image_rotation": 0, + "original_width": 1600, + "original_height": 1124 + }, + { + "id": "sLvv8LF2qu", + "type": "keypointlabels", + "value": { + "x": 6.9491906474820135, + "y": 79.13669064748201, + "width": 0.2526978417266187, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LN-LX_kLAb", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1600, + "original_height": 1124 + }, + { + "id": "Fo4e7JpTtG", + "type": "keypointlabels", + "value": { + "x": 66.20683453237409, + "y": 89.74820143884892, + "width": 0.2526978417266187, + "keypointlabels": [ + "rightski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LN-LX_kLAb", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1600, + "original_height": 1124 + }, + { + "id": "Fo4e7JpTtG", + "type": "choices", + "value": { + "x": 66.20683453237409, + "y": 89.74820143884892, + "width": 0.2526978417266187, + "choices": [ + "1" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LN-LX_kLAb", + "from_name": "visibility", + "image_rotation": 0, + "original_width": 1600, + "original_height": 1124 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T09:27:01.159161Z", + "updated_at": "2026-01-09T13:20:39.819452Z", + "draft_created_at": "2026-01-08T09:25:09.279171Z", + "lead_time": 540.2599999999999, + "prediction": {}, + "result_count": 8, + "unique_id": "44d7e74c-bc14-456a-a81f-4b0ca702af89", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 2, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/the-top-step-8.jpg" + }, + "meta": {}, + "created_at": "2026-01-07T17:44:31.478954Z", + "updated_at": "2026-01-09T13:20:39.848075Z", + "allow_skip": true, + "inner_id": 2, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + }, + { + "id": 3, + "annotations": [ + { + "id": 3, + "completed_by": 1, + "result": [ + { + "id": "qhvT2XBsjY", + "type": "keypointlabels", + "value": { + "x": 55.27293359778122, + "y": 85.75851393188854, + "width": 0.13766608617131063, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "I7zwrFdgpf", + "type": "keypointlabels", + "value": { + "x": 88.38162732198143, + "y": 74.20020639834881, + "width": 0.13766608617131063, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "ZjTuMwiMi3", + "type": "keypointlabels", + "value": { + "x": 28.565712880546958, + "y": 84.52012383900929, + "width": 0.13766608617131063, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "YiOk6_Q9xZ", + "type": "keypointlabels", + "value": { + "x": 42.125822368421055, + "y": 39.73168214654283, + "width": 0.13766608617131063, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "Vv8McjDlJO", + "type": "keypointlabels", + "value": { + "x": 44.53497887641899, + "y": 85.13931888544892, + "width": 0.13766608617131063, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "-Vw7NXHGQY", + "type": "keypointlabels", + "value": { + "x": 62.36273703560372, + "y": 51.496388028895765, + "width": 0.13766608617131063, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "os0GwLObCT", + "type": "keypointlabels", + "value": { + "x": 89.82712122678019, + "y": 67.69865841073272, + "width": 0.13766608617131063, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "LSZ5I0UkXl", + "type": "rectanglelabels", + "value": { + "x": 25.468225941692467, + "y": 23.735810113519094, + "width": 71.7928639383385, + "height": 72.65221878224973, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T09:27:39.278216Z", + "updated_at": "2026-01-08T09:42:20.011758Z", + "draft_created_at": "2026-01-08T09:27:15.159620Z", + "lead_time": 140.12, + "prediction": {}, + "result_count": 8, + "unique_id": "04bdafdf-65f5-455d-b777-a3693da61795", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 3, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [ + { + "id": 17, + "user": "schneuwl@gmail.com", + "created_username": "schneuwl@gmail.com, 1", + "created_ago": "32 minutes", + "result": [ + { + "id": "qhvT2XBsjY", + "type": "keypointlabels", + "value": { + "x": 55.27293359778122, + "y": 85.75851393188854, + "width": 0.13766608617131063, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "I7zwrFdgpf", + "type": "keypointlabels", + "value": { + "x": 88.38162732198143, + "y": 74.20020639834881, + "width": 0.13766608617131063, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "ZjTuMwiMi3", + "type": "keypointlabels", + "value": { + "x": 28.565712880546958, + "y": 84.52012383900929, + "width": 0.13766608617131063, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "YiOk6_Q9xZ", + "type": "keypointlabels", + "value": { + "x": 42.125822368421055, + "y": 39.73168214654283, + "width": 0.13766608617131063, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "Vv8McjDlJO", + "type": "keypointlabels", + "value": { + "x": 44.53497887641899, + "y": 85.13931888544892, + "width": 0.13766608617131063, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "-Vw7NXHGQY", + "type": "keypointlabels", + "value": { + "x": 62.36273703560372, + "y": 51.496388028895765, + "width": 0.13766608617131063, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "os0GwLObCT", + "type": "keypointlabels", + "value": { + "x": 89.82712122678019, + "y": 67.69865841073272, + "width": 0.13766608617131063, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "LSZ5I0UkXl", + "type": "rectanglelabels", + "value": { + "x": 25.468225941692467, + "y": 23.735810113519094, + "width": 71.7928639383385, + "height": 72.65221878224973, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "Ly1wuDYInF", + "type": "keypointlabels", + "value": { + "x": 66.85730567007188, + "y": 85.0372533199843, + "width": 0.2526485558712121, + "keypointlabels": [ + "rightski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + }, + { + "id": "Ly1wuDYInF", + "type": "choices", + "value": { + "x": 66.85730567007188, + "y": 85.0372533199843, + "width": 0.2526485558712121, + "choices": [ + "1" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "LSZ5I0UkXl", + "from_name": "visibility", + "image_rotation": 0, + "original_width": 2048, + "original_height": 1366 + } + ], + "lead_time": 64.984, + "was_postponed": false, + "import_id": null, + "created_at": "2026-01-09T13:13:27.553222Z", + "updated_at": "2026-01-09T13:14:14.781301Z", + "task": 3, + "annotation": 3 + } + ], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/osjodalen_mikaela-ht1a9386_52642648120_o-scaled.webp" + }, + "meta": {}, + "created_at": "2026-01-08T09:19:15.893777Z", + "updated_at": "2026-01-08T09:42:20.039734Z", + "allow_skip": true, + "inner_id": 3, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + }, + { + "id": 4, + "annotations": [ + { + "id": 4, + "completed_by": 1, + "result": [ + { + "id": "jYIr3R1rp8", + "type": "keypointlabels", + "value": { + "x": 47.08380255255255, + "y": 87.68768768768767, + "width": 0.13357107107107105, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "eWN2SPY67g", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + }, + { + "id": "FdPDy5lwdl", + "type": "keypointlabels", + "value": { + "x": 60.173767517517504, + "y": 83.28328328328327, + "width": 0.13357107107107105, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "eWN2SPY67g", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + }, + { + "id": "FdPDy5lwdl", + "type": "choices", + "value": { + "x": 60.173767517517504, + "y": 83.28328328328327, + "width": 0.13357107107107105, + "choices": [ + "1" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "eWN2SPY67g", + "from_name": "visibility", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + }, + { + "id": "8p3WALzicl", + "type": "keypointlabels", + "value": { + "x": 53.89592717717717, + "y": 83.88388388388387, + "width": 0.13357107107107105, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "eWN2SPY67g", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + }, + { + "id": "8p3WALzicl", + "type": "choices", + "value": { + "x": 53.89592717717717, + "y": 83.88388388388387, + "width": 0.13357107107107105, + "choices": [ + "1" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "eWN2SPY67g", + "from_name": "visibility", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + }, + { + "id": "4FMvLGGEhI", + "type": "keypointlabels", + "value": { + "x": 64.71518393393393, + "y": 75.57557557557557, + "width": 0.13357107107107105, + "keypointlabels": [ + "rightski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "eWN2SPY67g", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + }, + { + "id": "v8DBBDZ8si", + "type": "keypointlabels", + "value": { + "x": 60.77483733733733, + "y": 68.56856856856855, + "width": 0.13357107107107105, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "eWN2SPY67g", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + }, + { + "id": "Bk__jK3plk", + "type": "keypointlabels", + "value": { + "x": 67.78731856856857, + "y": 75.27527527527526, + "width": 0.13357107107107105, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "eWN2SPY67g", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + }, + { + "id": "N2-Kc8WsrK", + "type": "keypointlabels", + "value": { + "x": 52.025932182182174, + "y": 62.962962962962955, + "width": 0.13357107107107105, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "eWN2SPY67g", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + }, + { + "id": "-IipVQi6S4", + "type": "keypointlabels", + "value": { + "x": 53.36164289289289, + "y": 81.98198198198197, + "width": 0.13357107107107105, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "eWN2SPY67g", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + }, + { + "id": "eWN2SPY67g", + "type": "rectanglelabels", + "value": { + "x": 41.540603103103095, + "y": 54.65465465465464, + "width": 31.85670045045046, + "height": 37.837837837837846, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 2560, + "original_height": 1708 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T09:45:30.906666Z", + "updated_at": "2026-01-09T13:12:27.966629Z", + "draft_created_at": "2026-01-08T09:42:46.423636Z", + "lead_time": 193.321, + "prediction": {}, + "result_count": 9, + "unique_id": "8457463d-87ba-47bb-8546-26df257adf1e", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 4, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/2502_16-4573_by.davidbirri-q1qrjcrqxnhpyy9.jpg" + }, + "meta": {}, + "created_at": "2026-01-08T09:24:31.106654Z", + "updated_at": "2026-01-09T13:12:27.996599Z", + "allow_skip": true, + "inner_id": 4, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + }, + { + "id": 5, + "annotations": [ + { + "id": 5, + "completed_by": 1, + "result": [ + { + "id": "PS0bXWPPU0", + "type": "keypointlabels", + "value": { + "x": 55.20834779550261, + "y": 78.51153039832285, + "width": 0.13351474678477052, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "32NqqUt3K8", + "from_name": "kp", + "image_rotation": 0, + "original_width": 3624, + "original_height": 2308 + }, + { + "id": "4DSDmdUzD2", + "type": "keypointlabels", + "value": { + "x": 46.79691874806207, + "y": 80.18867924528303, + "width": 0.13351474678477052, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "32NqqUt3K8", + "from_name": "kp", + "image_rotation": 0, + "original_width": 3624, + "original_height": 2308 + }, + { + "id": "Ll_ZYo_Uls", + "type": "keypointlabels", + "value": { + "x": 48.06530884251738, + "y": 56.70859538784067, + "width": 0.13351474678477052, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "32NqqUt3K8", + "from_name": "kp", + "image_rotation": 0, + "original_width": 3624, + "original_height": 2308 + }, + { + "id": "N1LOowwNRv", + "type": "keypointlabels", + "value": { + "x": 59.61433443940004, + "y": 73.16561844863732, + "width": 0.13351474678477052, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "32NqqUt3K8", + "from_name": "kp", + "image_rotation": 0, + "original_width": 3624, + "original_height": 2308 + }, + { + "id": "d_yPCF3xLr", + "type": "keypointlabels", + "value": { + "x": 45.66204340039152, + "y": 57.861635220125784, + "width": 0.13351474678477052, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "32NqqUt3K8", + "from_name": "kp", + "image_rotation": 0, + "original_width": 3624, + "original_height": 2308 + }, + { + "id": "Lh4E23-Li5", + "type": "keypointlabels", + "value": { + "x": 44.79419754629051, + "y": 77.67295597484278, + "width": 0.13351474678477052, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "32NqqUt3K8", + "from_name": "kp", + "image_rotation": 0, + "original_width": 3624, + "original_height": 2308 + }, + { + "id": "32NqqUt3K8", + "type": "rectanglelabels", + "value": { + "x": 38.91954868776061, + "y": 46.75052410901468, + "width": 25.167529768929242, + "height": 38.888888888888886, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 3624, + "original_height": 2308 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T09:46:52.251731Z", + "updated_at": "2026-01-08T09:46:52.251738Z", + "draft_created_at": "2026-01-08T09:45:45.998972Z", + "lead_time": 78.291, + "prediction": {}, + "result_count": 7, + "unique_id": "77cb0ab7-470b-440e-b922-8c5571777a70", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 5, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/72731d37_c0c4_4058_ba57_46ba38387ef6_5a489338-51cb-4410-bd4a-dc9c182a4491.jpg" + }, + "meta": {}, + "created_at": "2026-01-08T09:24:31.114669Z", + "updated_at": "2026-01-08T09:46:52.270573Z", + "allow_skip": true, + "inner_id": 5, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + }, + { + "id": 6, + "annotations": [ + { + "id": 6, + "completed_by": 1, + "result": [ + { + "id": "IXzJDhvhMy", + "type": "keypointlabels", + "value": { + "x": 74.16555407209613, + "y": 84.69317114176927, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "q2rArSdtsI", + "from_name": "kp", + "image_rotation": 0, + "original_width": 850, + "original_height": 540 + }, + { + "id": "NLMNo8KVUL", + "type": "keypointlabels", + "value": { + "x": 49.66622162883845, + "y": 69.35172823023291, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "q2rArSdtsI", + "from_name": "kp", + "image_rotation": 0, + "original_width": 850, + "original_height": 540 + }, + { + "id": "WJUZ3YTbdF", + "type": "keypointlabels", + "value": { + "x": 14.686248331108146, + "y": 82.48652524353459, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "q2rArSdtsI", + "from_name": "kp", + "image_rotation": 0, + "original_width": 850, + "original_height": 540 + }, + { + "id": "BAXIpKsjls", + "type": "keypointlabels", + "value": { + "x": 51.00133511348465, + "y": 71.55837412846758, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "q2rArSdtsI", + "from_name": "kp", + "image_rotation": 0, + "original_width": 850, + "original_height": 540 + }, + { + "id": "YR2zXWuIgZ", + "type": "keypointlabels", + "value": { + "x": 59.47930574098799, + "y": 39.08915591158581, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "q2rArSdtsI", + "from_name": "kp", + "image_rotation": 0, + "original_width": 850, + "original_height": 540 + }, + { + "id": "tUVwrJkMOg", + "type": "keypointlabels", + "value": { + "x": 68.02403204272363, + "y": 74.60564703555357, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "q2rArSdtsI", + "from_name": "kp", + "image_rotation": 0, + "original_width": 850, + "original_height": 540 + }, + { + "id": "EEs_PK85la", + "type": "keypointlabels", + "value": { + "x": 39.18558077436582, + "y": 44.02783958858725, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "q2rArSdtsI", + "from_name": "kp", + "image_rotation": 0, + "original_width": 850, + "original_height": 540 + }, + { + "id": "Ijq1UvX2FG", + "type": "keypointlabels", + "value": { + "x": 36.18157543391188, + "y": 70.82282549572268, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "q2rArSdtsI", + "from_name": "kp", + "image_rotation": 0, + "original_width": 850, + "original_height": 540 + }, + { + "id": "q2rArSdtsI", + "type": "rectanglelabels", + "value": { + "x": 12.216288384512684, + "y": 5.569153933639914, + "width": 65.62082777036049, + "height": 89.00138456213223, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 850, + "original_height": 540 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T09:47:46.548238Z", + "updated_at": "2026-01-08T09:47:46.548246Z", + "draft_created_at": "2026-01-08T09:47:05.161970Z", + "lead_time": 52.377, + "prediction": {}, + "result_count": 9, + "unique_id": "9c3fdd01-efda-4997-93ba-9426d617e370", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 6, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/Backcountry-Cross-Country_Skiing_Technique_Side-Step_Herringbone_Jared_Manninen.jpg" + }, + "meta": {}, + "created_at": "2026-01-08T09:24:31.120711Z", + "updated_at": "2026-01-08T09:47:46.566828Z", + "allow_skip": true, + "inner_id": 6, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + }, + { + "id": 7, + "annotations": [ + { + "id": 7, + "completed_by": 1, + "result": [ + { + "id": "YiTfUSHEkL", + "type": "keypointlabels", + "value": { + "x": 65.88628762541806, + "y": 89.21404682274247, + "width": 0.2229654403567447, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "j4asCO8pXP", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 2560 + }, + { + "id": "ys9lHHErBw", + "type": "keypointlabels", + "value": { + "x": 46.93422519509476, + "y": 76.67224080267559, + "width": 0.2229654403567447, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "j4asCO8pXP", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 2560 + }, + { + "id": "ys9lHHErBw", + "type": "choices", + "value": { + "x": 46.93422519509476, + "y": 76.67224080267559, + "width": 0.2229654403567447, + "choices": [ + "1" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "j4asCO8pXP", + "from_name": "visibility", + "image_rotation": 0, + "original_width": 1920, + "original_height": 2560 + }, + { + "id": "WikKtsdheD", + "type": "keypointlabels", + "value": { + "x": 61.53846153846154, + "y": 93.89632107023411, + "width": 0.2229654403567447, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "j4asCO8pXP", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 2560 + }, + { + "id": "m7V4faJ0M4", + "type": "keypointlabels", + "value": { + "x": 41.248606465997774, + "y": 77.75919732441471, + "width": 0.2229654403567447, + "keypointlabels": [ + "rightski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "j4asCO8pXP", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 2560 + }, + { + "id": "Mhj9cuaqK5", + "type": "keypointlabels", + "value": { + "x": 62.76477146042363, + "y": 46.57190635451505, + "width": 0.2229654403567447, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "j4asCO8pXP", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 2560 + }, + { + "id": "afYXVoSjHZ", + "type": "keypointlabels", + "value": { + "x": 67.00111482720177, + "y": 74.74916387959865, + "width": 0.2229654403567447, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "j4asCO8pXP", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 2560 + }, + { + "id": "CnzwOxkQY7", + "type": "keypointlabels", + "value": { + "x": 23.076923076923077, + "y": 53.929765886287626, + "width": 0.2229654403567447, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "j4asCO8pXP", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 2560 + }, + { + "id": "Oblsk1XFvm", + "type": "keypointlabels", + "value": { + "x": 35.11705685618729, + "y": 81.43812709030101, + "width": 0.2229654403567447, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "j4asCO8pXP", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 2560 + }, + { + "id": "j4asCO8pXP", + "type": "rectanglelabels", + "value": { + "x": 17.391304347826086, + "y": 42.642140468227424, + "width": 58.30546265328875, + "height": 54.01337792642141, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 1920, + "original_height": 2560 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T09:48:52.774922Z", + "updated_at": "2026-01-09T13:11:59.697286Z", + "draft_created_at": "2026-01-08T09:48:09.705238Z", + "lead_time": 66.276, + "prediction": {}, + "result_count": 9, + "unique_id": "d9ba9c51-04bc-4bc6-8007-7daf1fe38886", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 7, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/IMG_7235-scaled.jpg-1920x.jpg" + }, + "meta": {}, + "created_at": "2026-01-08T09:24:31.126407Z", + "updated_at": "2026-01-09T13:11:59.720862Z", + "allow_skip": true, + "inner_id": 7, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + }, + { + "id": 8, + "annotations": [ + { + "id": 8, + "completed_by": 1, + "result": [ + { + "id": "G_Hi74818g", + "type": "keypointlabels", + "value": { + "x": 49.532710280373834, + "y": 67.69025367156209, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "ok26yQCkp5", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1200, + "original_height": 800 + }, + { + "id": "YKRLBzqcIw", + "type": "keypointlabels", + "value": { + "x": 32.44325767690254, + "y": 84.81308411214954, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "ok26yQCkp5", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1200, + "original_height": 800 + }, + { + "id": "QbcizruHiz", + "type": "keypointlabels", + "value": { + "x": 46.461949265687586, + "y": 74.39919893190921, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "ok26yQCkp5", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1200, + "original_height": 800 + }, + { + "id": "2NJ2nzU6Ku", + "type": "keypointlabels", + "value": { + "x": 21.49532710280374, + "y": 99.93324432576769, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "ok26yQCkp5", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1200, + "original_height": 800 + }, + { + "id": "C4My1cZbPa", + "type": "keypointlabels", + "value": { + "x": 36.38184245660881, + "y": 60.981308411214954, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "ok26yQCkp5", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1200, + "original_height": 800 + }, + { + "id": "C4My1cZbPa", + "type": "choices", + "value": { + "x": 36.38184245660881, + "y": 60.981308411214954, + "width": 0.13351134846461948, + "choices": [ + "1" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "ok26yQCkp5", + "from_name": "visibility", + "image_rotation": 0, + "original_width": 1200, + "original_height": 800 + }, + { + "id": "lwqjHR0ZOr", + "type": "keypointlabels", + "value": { + "x": 16.02136181575434, + "y": 89.11882510013352, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "ok26yQCkp5", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1200, + "original_height": 800 + }, + { + "id": "xyO2V0MoZP", + "type": "keypointlabels", + "value": { + "x": 47.53004005340454, + "y": 47.5634178905207, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "ok26yQCkp5", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1200, + "original_height": 800 + }, + { + "id": "cgfPmSGMRJ", + "type": "keypointlabels", + "value": { + "x": 44.32576769025367, + "y": 81.5086782376502, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "ok26yQCkp5", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1200, + "original_height": 800 + }, + { + "id": "ok26yQCkp5", + "type": "rectanglelabels", + "value": { + "x": 13.017356475300401, + "y": 30.240320427236316, + "width": 41.32176234979973, + "height": 69.75967957276369, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 1200, + "original_height": 800 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T09:49:39.518161Z", + "updated_at": "2026-01-09T13:11:50.589586Z", + "draft_created_at": "2026-01-08T09:49:02.903339Z", + "lead_time": 56.625, + "prediction": {}, + "result_count": 9, + "unique_id": "ac8f98a1-b910-40cf-82ba-1b514af9fd0e", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 8, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/crosscountryski2.jpg" + }, + "meta": {}, + "created_at": "2026-01-08T09:24:31.132133Z", + "updated_at": "2026-01-09T13:11:50.613457Z", + "allow_skip": true, + "inner_id": 8, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + }, + { + "id": 9, + "annotations": [ + { + "id": 9, + "completed_by": 1, + "result": [ + { + "id": "U3gy6yweAx", + "type": "keypointlabels", + "value": { + "x": 46.32843791722296, + "y": 60.64382139148494, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "JXRoNMT2Db", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 1080 + }, + { + "id": "U2YLL-lBpG", + "type": "keypointlabels", + "value": { + "x": 64.28571428571429, + "y": 67.05236611778668, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "JXRoNMT2Db", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 1080 + }, + { + "id": "d6EVt0-dqA", + "type": "keypointlabels", + "value": { + "x": 71.8958611481976, + "y": 61.7119121792019, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "JXRoNMT2Db", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 1080 + }, + { + "id": "vTnRZp2hzd", + "type": "keypointlabels", + "value": { + "x": 61.548731642189594, + "y": 70.25663848093755, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "JXRoNMT2Db", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 1080 + }, + { + "id": "G2bMC5gipf", + "type": "keypointlabels", + "value": { + "x": 55.20694259012016, + "y": 30.262572318647084, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "JXRoNMT2Db", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 1080 + }, + { + "id": "ypCAohaAtr", + "type": "keypointlabels", + "value": { + "x": 51.068090787716955, + "y": 69.90060821836522, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "JXRoNMT2Db", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 1080 + }, + { + "id": "QC756pPfIe", + "type": "keypointlabels", + "value": { + "x": 66.75567423230974, + "y": 22.429906542056074, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "JXRoNMT2Db", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 1080 + }, + { + "id": "QC756pPfIe", + "type": "choices", + "value": { + "x": 66.75567423230974, + "y": 22.429906542056074, + "width": 0.13351134846461948, + "choices": [ + "1" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "JXRoNMT2Db", + "from_name": "visibility", + "image_rotation": 0, + "original_width": 1920, + "original_height": 1080 + }, + { + "id": "Q-CdNP3cIB", + "type": "keypointlabels", + "value": { + "x": 73.16421895861149, + "y": 61.47455867082036, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "JXRoNMT2Db", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1920, + "original_height": 1080 + }, + { + "id": "JXRoNMT2Db", + "type": "rectanglelabels", + "value": { + "x": 41.85580774365821, + "y": 4.035009642486278, + "width": 35.58077436582109, + "height": 74.4103248776146, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 1920, + "original_height": 1080 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T09:50:30.078157Z", + "updated_at": "2026-01-09T13:11:36.814285Z", + "draft_created_at": "2026-01-08T09:49:50.446281Z", + "lead_time": 57.918, + "prediction": {}, + "result_count": 9, + "unique_id": "7dd684a2-7a5a-4669-81b0-99ccb5a869bd", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 9, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/ea_012720_xcski__uphill.avif" + }, + "meta": {}, + "created_at": "2026-01-08T09:24:31.138601Z", + "updated_at": "2026-01-09T13:11:36.837960Z", + "allow_skip": true, + "inner_id": 9, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + }, + { + "id": 11, + "annotations": [ + { + "id": 10, + "completed_by": 1, + "result": [ + { + "id": "mn0Vsvep5U", + "type": "keypointlabels", + "value": { + "x": 58.010680907877166, + "y": 81.41225337487019, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "91TMUzy9iq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1280, + "original_height": 720 + }, + { + "id": "LmFDUMTnIa", + "type": "keypointlabels", + "value": { + "x": 44.65954606141522, + "y": 61.83058893339266, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "91TMUzy9iq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1280, + "original_height": 720 + }, + { + "id": "HRYiysyWnp", + "type": "keypointlabels", + "value": { + "x": 67.7570093457944, + "y": 86.1593235425011, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "91TMUzy9iq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1280, + "original_height": 720 + }, + { + "id": "-QJ9dkNWKp", + "type": "keypointlabels", + "value": { + "x": 45.99465954606142, + "y": 80.81886960391633, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "91TMUzy9iq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1280, + "original_height": 720 + }, + { + "id": "-QJ9dkNWKp", + "type": "choices", + "value": { + "x": 45.99465954606142, + "y": 80.81886960391633, + "width": 0.13351134846461948, + "choices": [ + "1" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "91TMUzy9iq", + "from_name": "visibility", + "image_rotation": 0, + "original_width": 1280, + "original_height": 720 + }, + { + "id": "nSVtZiqxir", + "type": "keypointlabels", + "value": { + "x": 65.15353805073431, + "y": 22.073876279483752, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "91TMUzy9iq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1280, + "original_height": 720 + }, + { + "id": "SrKlQmC16I", + "type": "keypointlabels", + "value": { + "x": 65.68758344459279, + "y": 81.53093012906096, + "width": 0.13351134846461948, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "91TMUzy9iq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1280, + "original_height": 720 + }, + { + "id": "m-B2SLODr7", + "type": "keypointlabels", + "value": { + "x": 44.592790387182916, + "y": 44.97848983830291, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "91TMUzy9iq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1280, + "original_height": 720 + }, + { + "id": "pNssI74VN5", + "type": "keypointlabels", + "value": { + "x": 36.58210947930574, + "y": 66.34030559264204, + "width": 0.13351134846461948, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "91TMUzy9iq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1280, + "original_height": 720 + }, + { + "id": "91TMUzy9iq", + "type": "rectanglelabels", + "value": { + "x": 29.572763684913216, + "y": 7.83266577659101, + "width": 48.13084112149532, + "height": 86.27800029669187, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 1280, + "original_height": 720 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T09:53:54.971286Z", + "updated_at": "2026-01-09T13:09:23.911927Z", + "draft_created_at": "2026-01-08T09:53:20.499121Z", + "lead_time": 58.162000000000006, + "prediction": {}, + "result_count": 9, + "unique_id": "015d2df1-80aa-4db9-8238-272a2806a366", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 11, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/maxresdefault.jpg" + }, + "meta": {}, + "created_at": "2026-01-08T09:24:31.150359Z", + "updated_at": "2026-01-09T13:09:23.940250Z", + "allow_skip": true, + "inner_id": 11, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + }, + { + "id": 12, + "annotations": [ + { + "id": 11, + "completed_by": 1, + "result": [ + { + "id": "GDFXnogwJn", + "type": "keypointlabels", + "value": { + "x": 37.06487975951904, + "y": 77.8557114228457, + "width": 0.13356713426853709, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "GoZ756tyuq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2000, + "original_height": 1333 + }, + { + "id": "fPaxJ4ttsK", + "type": "keypointlabels", + "value": { + "x": 66.18251503006012, + "y": 80.06012024048097, + "width": 0.13356713426853709, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "GoZ756tyuq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2000, + "original_height": 1333 + }, + { + "id": "6ZUODrEdEL", + "type": "keypointlabels", + "value": { + "x": 56.699248496993995, + "y": 73.24649298597195, + "width": 0.13356713426853709, + "keypointlabels": [ + "rightski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "GoZ756tyuq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2000, + "original_height": 1333 + }, + { + "id": "udAQJU9V6B", + "type": "keypointlabels", + "value": { + "x": 75.79934869739479, + "y": 75.75150300601203, + "width": 0.13356713426853709, + "keypointlabels": [ + "rightski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "GoZ756tyuq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2000, + "original_height": 1333 + }, + { + "id": "OjvShaYrpZ", + "type": "keypointlabels", + "value": { + "x": 45.813527054108214, + "y": 53.30661322645292, + "width": 0.13356713426853709, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "GoZ756tyuq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2000, + "original_height": 1333 + }, + { + "id": "Q33QS0WvzG", + "type": "keypointlabels", + "value": { + "x": 86.95220440881764, + "y": 15.931863727454912, + "width": 0.13356713426853709, + "keypointlabels": [ + "leftpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "GoZ756tyuq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2000, + "original_height": 1333 + }, + { + "id": "mNOEAoHwuI", + "type": "keypointlabels", + "value": { + "x": 56.8995991983968, + "y": 50.30060120240481, + "width": 0.13356713426853709, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "GoZ756tyuq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2000, + "original_height": 1333 + }, + { + "id": "Iw7mKtiU5A", + "type": "keypointlabels", + "value": { + "x": 90.55851703406815, + "y": 28.557114228456914, + "width": 0.13356713426853709, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "GoZ756tyuq", + "from_name": "kp", + "image_rotation": 0, + "original_width": 2000, + "original_height": 1333 + }, + { + "id": "GoZ756tyuq", + "type": "rectanglelabels", + "value": { + "x": 27.581613226452905, + "y": 4.208416833667336, + "width": 66.65, + "height": 89.47895791583167, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 2000, + "original_height": 1333 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T09:54:52.396263Z", + "updated_at": "2026-01-08T09:54:52.396270Z", + "draft_created_at": "2026-01-08T09:54:05.506084Z", + "lead_time": 55.574, + "prediction": {}, + "result_count": 9, + "unique_id": "4b4b2502-9ebc-4244-9ba2-7d28ba97d429", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 12, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/ski-de-fond-vallee-de-joux_2000.jpg" + }, + "meta": {}, + "created_at": "2026-01-08T09:24:31.157757Z", + "updated_at": "2026-01-08T09:54:52.415315Z", + "allow_skip": true, + "inner_id": 12, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + }, + { + "id": 14, + "annotations": [ + { + "id": 12, + "completed_by": 1, + "result": [ + { + "id": "dQAgsB91X6", + "type": "keypointlabels", + "value": { + "x": 54.947459312769354, + "y": 82.18859138533178, + "width": 0.13352967026189394, + "keypointlabels": [ + "leftski_tip" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "W3PL0Qin7X", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1510, + "original_height": 866 + }, + { + "id": "A-cNzqJxFs", + "type": "keypointlabels", + "value": { + "x": 74.50955600613682, + "y": 60.18626309662398, + "width": 0.13352967026189394, + "keypointlabels": [ + "rightski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "W3PL0Qin7X", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1510, + "original_height": 866 + }, + { + "id": "5EznV_Lze7", + "type": "keypointlabels", + "value": { + "x": 70.2366065577562, + "y": 51.68800931315482, + "width": 0.13352967026189394, + "keypointlabels": [ + "leftpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "W3PL0Qin7X", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1510, + "original_height": 866 + }, + { + "id": "woj1ESWT05", + "type": "keypointlabels", + "value": { + "x": 80.91898017870773, + "y": 65.54132712456344, + "width": 0.13352967026189394, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "W3PL0Qin7X", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1510, + "original_height": 866 + }, + { + "id": "0-RgA3qumr", + "type": "keypointlabels", + "value": { + "x": 57.68481755313818, + "y": 41.90919674039581, + "width": 0.13352967026189394, + "keypointlabels": [ + "rightpole_top" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "W3PL0Qin7X", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1510, + "original_height": 866 + }, + { + "id": "nytvXztOxX", + "type": "keypointlabels", + "value": { + "x": 59.020114255757115, + "y": 74.50523864959256, + "width": 0.13352967026189394, + "keypointlabels": [ + "rightpole_bottom" + ] + }, + "origin": "manual", + "to_name": "image", + "parentID": "W3PL0Qin7X", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1510, + "original_height": 866 + }, + { + "id": "W3PL0Qin7X", + "type": "rectanglelabels", + "value": { + "x": 45.53361755930583, + "y": 30.61699650756694, + "width": 39.72507690291345, + "height": 53.66705471478463, + "rotation": 0, + "rectanglelabels": [ + "skier" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "bbox", + "image_rotation": 0, + "original_width": 1510, + "original_height": 866 + }, + { + "id": "qJs4uO-a5R", + "type": "keypointlabels", + "value": { + "x": 71.54829916644434, + "y": 74.05151464009006, + "width": 0.25264754791842925, + "keypointlabels": [ + "leftski_tail" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "kp", + "image_rotation": 0, + "original_width": 1510, + "original_height": 866 + }, + { + "id": "qJs4uO-a5R", + "type": "choices", + "value": { + "x": 71.54829916644434, + "y": 74.05151464009006, + "width": 0.25264754791842925, + "choices": [ + "1" + ] + }, + "origin": "manual", + "to_name": "image", + "from_name": "visibility", + "image_rotation": 0, + "original_width": 1510, + "original_height": 866 + } + ], + "was_cancelled": false, + "ground_truth": false, + "created_at": "2026-01-08T10:00:28.616102Z", + "updated_at": "2026-01-09T13:11:12.168795Z", + "draft_created_at": "2026-01-08T09:59:40.820571Z", + "lead_time": 115.007, + "prediction": {}, + "result_count": 8, + "unique_id": "7a3a9701-807f-42e6-8b9f-9aef954f0276", + "import_id": null, + "last_action": null, + "bulk_created": false, + "task": 14, + "project": 4, + "updated_by": 1, + "parent_prediction": null, + "parent_annotation": null, + "last_created_by": null + } + ], + "drafts": [], + "predictions": [], + "data": { + "image": "s3:\/\/skiai\/input\/langlauf_styles_3.jpg" + }, + "meta": {}, + "created_at": "2026-01-08T09:59:25.779151Z", + "updated_at": "2026-01-09T13:11:12.196073Z", + "allow_skip": true, + "inner_id": 13, + "total_annotations": 1, + "cancelled_annotations": 0, + "total_predictions": 0, + "comment_count": 0, + "unresolved_comment_count": 0, + "last_comment_updated_at": null, + "project": 4, + "updated_by": 1, + "comment_authors": [] + } +] \ No newline at end of file diff --git a/specs/skier_pose.yaml b/specs/skier_pose.yaml new file mode 100644 index 0000000..f6e8860 --- /dev/null +++ b/specs/skier_pose.yaml @@ -0,0 +1,24 @@ +path: datasets/skier_pose # relativer Pfad zum Dataset-Ordner +train: train +val: val + +# Keypoints Konfiguration +kpt_shape: [8, 3] # 8 Keypoints, jeweils (x, y, visibility) + +# Flip-Indizes für Augmentation (Spiegelung) +# Wenn das Bild gespiegelt wird: +# 0 (left tip) wird zu 2 (right tip) und umgekehrt +# 1 (left tail) wird zu 3 (right tail) und umgekehrt +# 4 (left pole top) wird zu 6 (right pole top) etc. +flip_idx: [2, 3, 0, 1, 6, 7, 4, 5] + +# Skeleton: Verbindungen für die Visualisierung und Strukturhilfe +# Definiert Paare von Keypoint-Indizes (0-basiert) +skeleton: + - [0, 1] # Linker Ski (Tip zu Tail) + - [2, 3] # Rechter Ski (Tip zu Tail) + - [4, 5] # Linker Stock (Top zu Bottom) + - [6, 7] # Rechter Stock (Top zu Bottom) + +names: + 0: skier \ No newline at end of file