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() | |