File size: 1,454 Bytes
7ee2ab0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from typing import Any, Tuple


def validate_submission(obj: Any) -> Tuple[bool, str]:
    if not isinstance(obj, list):
        return False, "Submission must be a JSON list of annotations."
    required_keys = {"image_id", "score", "category_id", "area", "bbox", "segmentation"}
    for i, ann in enumerate(obj):
        if not isinstance(ann, dict):
            return False, f"Annotation at index {i} must be an object/dict."
        missing = required_keys - set(ann.keys())
        if missing:
            return False, f"Annotation at index {i} missing keys: {sorted(list(missing))}"
        if not isinstance(ann["image_id"], int):
            return False, f"image_id at index {i} must be an integer."
        if not isinstance(ann["category_id"], int):
            return False, f"category_id at index {i} must be an integer."
        if not isinstance(ann["score"], (int, float)):
            return False, f"score at index {i} must be a number."
        if not isinstance(ann["area"], (int, float)):
            return False, f"area at index {i} must be a number."
        bbox = ann["bbox"]
        if not (isinstance(bbox, list) and len(bbox) == 4
                and all(isinstance(x, (int, float)) for x in bbox)):
            return False, f"bbox at index {i} must be a list of 4 numbers."
        if not isinstance(ann["segmentation"], list):
            return False, f"segmentation at index {i} must be a list."
    return True, "OK"