main
sleap_io.io.main
¶
This module contains high-level wrappers for utilizing different I/O backends.
load_file(filename, format=None, **kwargs)
¶
Load a file and return the appropriate object.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
filename |
str | Path
|
Path to a file. |
required |
format |
Optional[str]
|
Optional format to load as. If not provided, will be inferred from the file extension. Available formats are: "slp", "nwb", "labelstudio", "jabs" and "video". |
None
|
Returns:
Type | Description |
---|---|
Union[Labels, Video]
|
A |
Source code in sleap_io/io/main.py
def load_file(
filename: str | Path, format: Optional[str] = None, **kwargs
) -> Union[Labels, Video]:
"""Load a file and return the appropriate object.
Args:
filename: Path to a file.
format: Optional format to load as. If not provided, will be inferred from the
file extension. Available formats are: "slp", "nwb", "labelstudio", "jabs"
and "video".
Returns:
A `Labels` or `Video` object.
"""
if isinstance(filename, Path):
filename = str(filename)
if format is None:
if filename.endswith(".slp"):
format = "slp"
elif filename.endswith(".nwb"):
format = "nwb"
elif filename.endswith(".json"):
format = "json"
elif filename.endswith(".h5"):
format = "jabs"
else:
for vid_ext in Video.EXTS:
if filename.endswith(vid_ext):
format = "video"
break
if format is None:
raise ValueError(f"Could not infer format from filename: '{filename}'.")
if filename.endswith(".slp"):
return load_slp(filename, **kwargs)
elif filename.endswith(".nwb"):
return load_nwb(filename, **kwargs)
elif filename.endswith(".json"):
return load_labelstudio(filename, **kwargs)
elif filename.endswith(".h5"):
return load_jabs(filename, **kwargs)
elif format == "video":
return load_video(filename, **kwargs)
load_jabs(filename, skeleton=None)
¶
Read JABS-style predictions from a file and return a Labels
object.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
filename |
str
|
Path to the jabs h5 pose file. |
required |
skeleton |
Optional[Skeleton]
|
An optional |
None
|
Returns:
Type | Description |
---|---|
Labels
|
Parsed labels as a |
Source code in sleap_io/io/main.py
def load_jabs(filename: str, skeleton: Optional[Skeleton] = None) -> Labels:
"""Read JABS-style predictions from a file and return a `Labels` object.
Args:
filename: Path to the jabs h5 pose file.
skeleton: An optional `Skeleton` object.
Returns:
Parsed labels as a `Labels` instance.
"""
return jabs.read_labels(filename, skeleton=skeleton)
load_labelstudio(filename, skeleton=None)
¶
Read Label Studio-style annotations from a file and return a Labels
object.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
filename |
str
|
Path to the label-studio annotation file in JSON format. |
required |
skeleton |
Optional[Union[Skeleton, list[str]]]
|
An optional |
None
|
Returns:
Type | Description |
---|---|
Labels
|
Parsed labels as a |
Source code in sleap_io/io/main.py
def load_labelstudio(
filename: str, skeleton: Optional[Union[Skeleton, list[str]]] = None
) -> Labels:
"""Read Label Studio-style annotations from a file and return a `Labels` object.
Args:
filename: Path to the label-studio annotation file in JSON format.
skeleton: An optional `Skeleton` object or list of node names. If not provided
(the default), skeleton will be inferred from the data. It may be useful to
provide this so the keypoint label types can be filtered to just the ones in
the skeleton.
Returns:
Parsed labels as a `Labels` instance.
"""
return labelstudio.read_labels(filename, skeleton=skeleton)
load_nwb(filename)
¶
Load an NWB dataset as a SLEAP Labels
object.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
filename |
str
|
Path to a NWB file ( |
required |
Returns:
Type | Description |
---|---|
Labels
|
The dataset as a |
load_slp(filename)
¶
Load a SLEAP dataset.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
filename |
str
|
Path to a SLEAP labels file ( |
required |
Returns:
Type | Description |
---|---|
Labels
|
The dataset as a |
load_video(filename, **kwargs)
¶
Load a video file.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
filename |
str
|
Path to a video file. |
required |
Returns:
Type | Description |
---|---|
Video
|
A |
save_file(labels, filename, format=None, **kwargs)
¶
Save a file based on the extension.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
labels |
Labels
|
A SLEAP |
required |
filename |
str | Path
|
Path to save labels to. |
required |
format |
Optional[str]
|
Optional format to save as. If not provided, will be inferred from the file extension. Available formats are: "slp", "nwb", "labelstudio" and "jabs". |
None
|
Source code in sleap_io/io/main.py
def save_file(
labels: Labels, filename: str | Path, format: Optional[str] = None, **kwargs
):
"""Save a file based on the extension.
Args:
labels: A SLEAP `Labels` object (see `load_slp`).
filename: Path to save labels to.
format: Optional format to save as. If not provided, will be inferred from the
file extension. Available formats are: "slp", "nwb", "labelstudio" and
"jabs".
"""
if isinstance(filename, Path):
filename = str(filename)
if format is None:
if filename.endswith(".slp"):
format = "slp"
elif filename.endswith(".nwb"):
format = "nwb"
elif filename.endswith(".json"):
format = "labelstudio"
elif "pose_version" in kwargs:
format = "jabs"
if format == "slp":
save_slp(labels, filename, **kwargs)
elif format == "nwb":
save_nwb(labels, filename, **kwargs)
elif format == "labelstudio":
save_labelstudio(labels, filename, **kwargs)
elif format == "jabs":
pose_version = kwargs.pop("pose_version", 5)
save_jabs(labels, pose_version, filename, **kwargs)
else:
raise ValueError(f"Unknown format '{format}' for filename: '{filename}'.")
save_jabs(labels, pose_version, root_folder=None)
¶
Save a SLEAP dataset to JABS pose file format.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
labels |
Labels
|
SLEAP |
required |
pose_version |
int
|
The JABS pose version to write data out. |
required |
root_folder |
Optional[str]
|
Optional root folder where the files should be saved. |
None
|
Note
Filenames for JABS poses are based on video filenames.
Source code in sleap_io/io/main.py
def save_jabs(labels: Labels, pose_version: int, root_folder: Optional[str] = None):
"""Save a SLEAP dataset to JABS pose file format.
Args:
labels: SLEAP `Labels` object.
pose_version: The JABS pose version to write data out.
root_folder: Optional root folder where the files should be saved.
Note:
Filenames for JABS poses are based on video filenames.
"""
jabs.write_labels(labels, pose_version, root_folder)
save_labelstudio(labels, filename)
¶
Save a SLEAP dataset to Label Studio format.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
labels |
Labels
|
A SLEAP |
required |
filename |
str
|
Path to save labels to ending with |
required |
save_nwb(labels, filename, append=True)
¶
Save a SLEAP dataset to NWB format.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
labels |
Labels
|
A SLEAP |
required |
filename |
str
|
Path to NWB file to save to. Must end in |
required |
append |
bool
|
If |
True
|
See also: nwb.write_nwb, nwb.append_nwb
Source code in sleap_io/io/main.py
def save_nwb(labels: Labels, filename: str, append: bool = True):
"""Save a SLEAP dataset to NWB format.
Args:
labels: A SLEAP `Labels` object (see `load_slp`).
filename: Path to NWB file to save to. Must end in `.nwb`.
append: If `True` (the default), append to existing NWB file. File will be
created if it does not exist.
See also: nwb.write_nwb, nwb.append_nwb
"""
if append and Path(filename).exists():
nwb.append_nwb(labels, filename)
else:
nwb.write_nwb(labels, filename)