5.1. Basic function

主要用于获取或配置设备信息与属性。

5.1.1. get_available_tpu_num

获取当前设备中可用智能视觉深度学习处理器的数量。

接口形式:
def get_available_tpu_num() -> int

返回值说明:

返回当前设备中可用智能视觉深度学习处理器的数量。

示例代码:
import sophon.sail as sail
if __name__ == '__main__':
    tpu_len = sail.get_available_tpu_num()
    print('available tpu:',tpu_len)

5.1.2. set_print_flag

设置是否打印程序的计算耗时信息。

接口形式:
def set_print_flag(print_flag: bool) -> None

参数说明:

  • print_flag: bool

print_flag为True时,打印程序的计算主要的耗时信息,否则不打印。

示例代码:
import sophon.sail as sail
if __name__ == '__main__':
    sail.set_print_flag(True)

5.1.3. set_dump_io_flag

设置是否存储输入数据和输出数据。 每个输入或输出Tensor数据将被分别保存为一个独立的二进制文件。文件名的前缀为时间戳。

接口形式:
def set_dump_io_flag(dump_io_flag: bool) -> None

参数说明:

  • dump_io_flag: bool

dump_io_flag为True时,存储输入数据和输出数据,否则不存储。

示例代码:
import sophon.sail as sail
if __name__ == '__main__':
    sail.set_dump_io_flag(True)

5.1.4. set_loglevel

设置运行过程中的日志级别为指定级别。 较低的日志等级通常用于生产环境,以减少性能开销和日志数据量,而较高的日志等级则适用于开发和调试,以便能够记录更详细的信息。

接口形式:
def set_loglevel(sail.LogLevel loglevel) -> int

参数说明:

  • loglevel: LogLevel

期望的日志级别,为 sail.LogLevel 枚举值。可选的级别包括 TRACEDEBUGINFOWARNERRCRITICALOFF,默认级别为 INFO

返回值说明:

返回类型:int

0:日志级别设置成功。 -1:传入了未知的日志级别,设置失败。

示例代码:
import sophon.sail as sail
if __name__ == '__main__':
    ret = sail.set_loglevel(sail.LogLevel.TRACE)
    if (ret == 0):
        print("Set log level successfully")
    else:
        print("Unknown log level, set failed.")

5.1.5. set_decoder_env

通过环境变量设置Decoder(也包括MultiDecoder)的参数。 必须在Decoder构造前设置,否则使用默认值。主要适用于视频解码。

接口形式:
def set_decoder_env(env_name: str, env_value: str) -> None

参数说明:

  • env_name: str

选择设置Decoder的属性名称,可选的属性名称有:

  • 'rtsp_transport' 设置RTSP采用的传输协议。默认为TCP。

  • 'extra_frame_buffer_num' 设置Decoder的最大缓存帧数。默认为5。

  • 'stimeout' 设置阻塞超时时间,单位为ms。默认为20000000,即20s。

  • 'skip_non_idr' 解码跳帧模式。0,关闭跳帧;1,跳过Non-RAP帧;2,跳过非参考帧。默认为0。

  • 'fflags' 格式相关的flag。比如"nobuffer"。详细信息请参考ffmpeg官方文档。

  • 'rtsp_flags' 设置RTSP是否自定义IO。默认为prefer_tcp。

  • 'refcounted_frames' 是否使用引用计数机制。设置为1时,解码出来的图像需要程序手动释放,为0时由Decoder自动释放。

  • 'probesize' 解析视频流时读取的最大字节数。默认为5000000。

  • 'analyzeduration' 解析文件时读取的最大时长,单位为ms。默认为5000000。

  • 'buffer_size' 设置缓存大小。

  • 'max_delay' 设置最大时延。

  • env_value: str

该属性的配置值

示例代码:
import sophon.sail as sail
if __name__ == '__main__':
    sail.set_decoder_env("extra_frame_buffer_num", "3") # 减小buffer以降低内存占用
    sail.set_decoder_env("probesize", "1024") # 减小probesize以降低拉流延迟
    sail.set_decoder_env("skip_non_idr", "2") # 跳过非参考帧
    dev_id = 0
    handle = sail.Handle(dev_id)
    video_path = "input_video.mp4"
    decoder = sail.Decoder(video_path, True, dev_id)
    bmimg = decoder.read(handle)

5.1.6. base64_encode

将字节数据进行base64编码,返回bytes类型的编码数据。不支持BM1688和CV186AH PCIE模式。

接口形式:
def base64_encode(handle: Handle, input_bytes: bytes) -> bytes:

参数说明:

  • handle: sail.Handle

设备的handle句柄,使用sail.Handle(dev_id)创建

  • input_bytes: bytes

待编码的字节数据

返回值说明

返回base64编码的字节数据

示例代码
import sophon.sail as sail
import numpy as np

if __name__ == "__main__":
    # 示例 NumPy 数组
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    # 转为字节数据
    arr_bytes = arr.tobytes()
    # 创建handle,soc设备默认为dev_id为0
    handle = sail.Handle(0)
    # base字节编码
    base64_encoded_arr = sail.base64_encode(handle,arr_bytes)

5.1.7. base64_decode

将base64的字节编码数据进行解码,返回解码后的字节数据。不支持BM1688和CV186AH PCIE模式。

接口形式:
def base64_decode(handle: Handle, encode_bytes: bytes) -> bytes:

参数说明:

  • handle: sail.Handle

设备的handle句柄,使用sail.Handle(dev_id)创建

  • encode_bytes: bytes

base64的字节编码数据

返回值说明

返回base64解码的字节数据

示例代码
import sophon.sail as sail
import numpy as np

if __name__ == "__main__":
    # 示例 NumPy 数组
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    shape = arr.shape
    # 转为字节数据
    arr_bytes = arr.tobytes()
    # 创建handle,soc设备默认为dev_id为0
    handle = sail.Handle(0)
    # base字节编码
    base64_encoded_arr = sail.base64_encode(handle,arr_bytes)

    # 解码数据
    base64_decode_arr = sail.base64_decode(handle,base64_encoded_arr)
    # 将生成byte数据转换为numpy数据
    res_arr = np.frombuffer(arr_bytes, dtype=np.int64).reshape(shape)

5.1.8. base64_encode_array

对numpy.array进行base64编码,生成字节编码数据。不支持BM1688和CV186AH PCIE模式。

示例代码请参考 base64_decode_asarray 接口提供的示例代码

接口形式:
def base64_encode_array(handle: Handle, input_arr: numpy.ndarray) -> bytes:

参数说明:

  • handle: sail.Handle

设备的handle句柄,使用sail.Handle(dev_id)创建

  • input_arr: numpy.ndarray

待编码的numpy.ndarray数据

返回值说明

返回base64解码的字节数据

5.1.9. base64_decode_asarray

base64解码,生成numpy.array数据

接口形式:
def base64_decode_asarray(handle: Handle, encode_arr_bytes: bytes, array_type:str = "uint8") -> numpy.ndarray:

参数说明:

  • handle: sail.Handle

设备的handle句柄,使用sail.Handle(dev_id)创建

  • encode_arr_bytes: bytes

base64编码后的numpy.ndarray的字节数据

  • dtype: str

numpy.ndarray的数据类型,默认uint8,支持float、uint8、int8、int16、int32、int64

返回值说明

返回base64解码的一维numpay.array数组

示例代码
import sophon.sail as sail
import numpy as np

if __name__ == "__main__":
    # 示例 NumPy 数组
    arr = np.array([[1,2,3],[4,5,6]],dtype=np.uint8)
    # base64编码
    base64_encoded = sail.base64_encode_array(handle,arr)
    # base64解码
    res_array = sail.base64_decode_asarray(handle,base64_encoded).reshape(shape)

5.1.10. get_tpu_util

获取对应设备的处理器使用率

接口形式:
def get_tpu_util(dev_id: int) -> int

参数说明:

  • dev_id: int

需要获取处理器使用率的设备的ID。

返回值说明:

返回对应设备的处理器使用率百分比。

示例代码
import sophon.sail as sail
if __name__ == '__main__':
    dev_id = 0
    print("dev {} tpu-util is {} %".format(dev_id,sail.get_tpu_util(dev_id)))

5.1.11. get_vpu_util

获取对应设备的VPU使用率

接口形式:
def get_vpu_util(dev_id: int) -> list

参数说明:

  • dev_id: int

需要获取VPU使用率的设备的ID。

返回值说明:

bm1684为5核vpu,返回值为长度为5的List,bm1684x为3核vpu, 返回值为长度为3的List。 List中的每项数据为对应核心的使用率百分比。

示例代码
import sophon.sail as sail
if __name__ == '__main__':
    dev_id = 0
    print("get_vpu_util",sail.get_vpu_util(dev_id))

5.1.12. get_vpp_util

获取对应设备的VPP使用率

接口形式:
def get_vpp_util(dev_id: int) -> list

参数说明:

  • dev_id: int

需要获取VPP使用率的设备的ID。

返回值说明:

bm1684与bm1684x均为2核vpp,返回值为长度为2的List。 List中的每项数据为对应核心的使用率百分比。

示例代码
import sophon.sail as sail
if __name__ == '__main__':
    dev_id = 0
    print("get_vpp_util",sail.get_vpp_util(dev_id))

5.1.13. get_board_temp

接口形式:
def get_board_temp(dev_id: int) -> int

参数说明:

  • dev_id: int

需要获取对应板卡所在设备的ID。

返回值说明:

返回对应板卡的板级温度,默认单位摄氏度(℃)。

示例代码
import sophon.sail as sail
if __name__ == '__main__':
    dev_id = 0
    print("get_board_temp",sail.get_board_temp(dev_id))

5.1.14. get_chip_temp

接口形式:
def get_chip_temp(dev_id: int) -> int

参数说明:

  • dev_id: int

需要获取处理器温度的设备的ID。

返回值说明:

返回对应设备的处理器的温度。,默认单位摄氏度(℃)。

示例代码
import sophon.sail as sail
if __name__ == '__main__':
    dev_id = 0
    print("get_chip_temp",sail.get_chip_temp(dev_id))

5.1.15. get_dev_stat

接口形式:
def get_dev_stat(dev_id: int) -> list

参数说明:

  • dev_id: int

需要获取内存信息的设备的ID。

返回值说明:

返回对应设备的内存信息列表:[mem_total,mem_used,tpu_util]。

示例代码
import sophon.sail as sail
if __name__ == '__main__':
    dev_id = 0
    print("get_dev_stat",sail.get_dev_stat(dev_id))