init
This commit is contained in:
42
finetune/mmseg/utils/io.py
Normal file
42
finetune/mmseg/utils/io.py
Normal file
@@ -0,0 +1,42 @@
|
||||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
import gzip
|
||||
import io
|
||||
import pickle
|
||||
|
||||
import cv2
|
||||
import numpy as np
|
||||
|
||||
|
||||
def datafrombytes(content: bytes, backend: str = 'numpy') -> np.ndarray:
|
||||
"""Data decoding from bytes.
|
||||
|
||||
Args:
|
||||
content (bytes): The data bytes got from files or other streams.
|
||||
backend (str): The data decoding backend type. Options are 'numpy',
|
||||
'nifti', 'cv2' and 'pickle'. Defaults to 'numpy'.
|
||||
|
||||
Returns:
|
||||
numpy.ndarray: Loaded data array.
|
||||
"""
|
||||
if backend == 'pickle':
|
||||
data = pickle.loads(content)
|
||||
else:
|
||||
with io.BytesIO(content) as f:
|
||||
if backend == 'nifti':
|
||||
f = gzip.open(f)
|
||||
try:
|
||||
from nibabel import FileHolder, Nifti1Image
|
||||
except ImportError:
|
||||
print('nifti files io depends on nibabel, please run'
|
||||
'`pip install nibabel` to install it')
|
||||
fh = FileHolder(fileobj=f)
|
||||
data = Nifti1Image.from_file_map({'header': fh, 'image': fh})
|
||||
data = Nifti1Image.from_bytes(data.to_bytes()).get_fdata()
|
||||
elif backend == 'numpy':
|
||||
data = np.load(f)
|
||||
elif backend == 'cv2':
|
||||
data = np.frombuffer(f.read(), dtype=np.uint8)
|
||||
data = cv2.imdecode(data, cv2.IMREAD_UNCHANGED)
|
||||
else:
|
||||
raise ValueError
|
||||
return data
|
||||
Reference in New Issue
Block a user