Spaces:
Running
Running
from segments import SegmentsClient | |
def get_samples(client, dataset_identifier): | |
page = 1 | |
per_page = 1000 | |
samples = [] | |
while True: | |
response = client.get_samples(dataset_identifier, per_page=per_page, page=page) | |
# Handle both paginated and direct list responses | |
if isinstance(response, list): | |
samples.extend(response) | |
break # No pagination in this case | |
else: | |
samples.extend(response.results) | |
if not response.has_next: | |
break | |
page += 1 | |
return samples | |
def export_number_of_samples(samples): | |
"""Return the number of samples in the dataset.""" | |
return len(samples) | |
def export_frames_and_annotations(label): | |
"""Export frames and their annotations for non-multisensor (no sensors) labels.""" | |
frames = getattr(label.attributes, "frames", None) | |
if frames is None: | |
return [] | |
result = [] | |
for frame in frames: | |
annotations = getattr(frame, "annotations", []) | |
result.append({ | |
"frame": frame, | |
"annotations": annotations | |
}) | |
return result | |
def export_sensor_frames_and_annotations(label, sensor_name): | |
"""Export frames and annotations for a specific sensor in a multisensor label.""" | |
sensors = getattr(label.attributes, "sensors", None) | |
if sensors is None: | |
return [] | |
for sensor in sensors: | |
if getattr(sensor, "name", None) == sensor_name: | |
sensor_attrs = getattr(sensor, "attributes", None) | |
if sensor_attrs is None: | |
return [] | |
frames = getattr(sensor_attrs, "frames", None) | |
if frames is None: | |
return [] | |
result = [] | |
for frame in frames: | |
annotations = getattr(frame, "annotations", []) | |
result.append({ | |
"frame": frame, | |
"annotations": annotations | |
}) | |
return result | |
return [] | |
def export_all_sensor_frames_and_annotations(label): | |
"""Export all frames and annotations for all sensors in a multisensor label.""" | |
sensors = getattr(label.attributes, "sensors", None) | |
if sensors is None: | |
return [] | |
result = {} | |
for sensor in sensors: | |
sensor_name = getattr(sensor, "name", None) | |
sensor_attrs = getattr(sensor, "attributes", None) | |
if sensor_attrs is None: | |
result[sensor_name] = [] | |
continue | |
frames = getattr(sensor_attrs, "frames", None) | |
if frames is None: | |
result[sensor_name] = [] | |
continue | |
sensor_result = [] | |
for frame in frames: | |
annotations = getattr(frame, "annotations", []) | |
sensor_result.append({ | |
"frame": frame, | |
"annotations": annotations | |
}) | |
result[sensor_name] = sensor_result | |
return result | |
def main(): | |
api_key = DEFAULT_API_KEY | |
dataset_identifier = DEFAULT_DATASET_IDENTIFIER | |
client = SegmentsClient(api_key) | |
samples = get_samples(client, dataset_identifier) | |
number_of_samples = export_number_of_samples(samples) | |
print(number_of_samples) | |
first_sample = samples[0] | |
label = client.get_label(first_sample.uuid) | |
frames_and_annotations = export_frames_and_annotations(label) | |
print(frames_and_annotations) | |
sensor_name = "sensor_name" | |
sensor_frames_and_annotations = export_sensor_frames_and_annotations(label, sensor_name) | |
print(sensor_frames_and_annotations) | |
all_sensor_frames_and_annotations = export_all_sensor_frames_and_annotations(label) | |
print(all_sensor_frames_and_annotations) | |
if __name__ == "__main__": | |
main() | |