count-by-class / src /get_labels_from_samples.py
Tomatillo's picture
Create get_labels_from_samples.py
2d76586 verified
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()