Spaces:
Sleeping
Sleeping
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"
|