4.1. Basic function

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

4.1.1. get_available_tpu_num

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

接口形式:
int get_available_tpu_num();

返回值说明:

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

示例代码:
#include <sail/cvwrapper.h>

int main() {
    int tpu_len = sail::get_available_tpu_num();
    std::cout << "available tpu: " << tpu_len << std::endl;
    return 0;
}

4.1.2. set_print_flag

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

接口形式:
int set_print_flag(bool print_flag);

参数说明:

  • print_flag: bool

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

示例代码:
#include <sail/cvwrapper.h>

int main() {
    int ret = sail::set_print_flag(true);
    if (ret == 0){
        std::cout << "set print time success" << std::endl;
    }
    return 0;
}

4.1.3. set_dump_io_flag

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

接口形式:
int set_dump_io_flag(bool dump_io_flag);

参数说明:

  • dump_io_flag: bool

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

示例代码:
#include <sail/cvwrapper.h>

int main() {
    ret = sail::set_dump_io_flag(true);
    if (ret == 0){
        std::cout << "set save data success" << std::endl;
    }
    return 0;
}

4.1.4. set_loglevel

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

接口形式:
int set_loglevel(LogLevel loglevel);

参数说明:

  • loglevel: LogLevel

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

返回值说明:

返回类型:int

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

示例代码:
#include <sail/cvwrapper.h>

int main() {
    int ret = sail::set_loglevel(sail::LogLevel::TRACE);
    if (ret == 0){
        std::cout << "Set log level successfully" << std::endl;
    }
    else{
        std::cout << "Unknown log level, set failed." << std::endl;
    }
    return 0;
}

4.1.5. set_decoder_env

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

接口形式:
int set_decoder_env(std::string env_name, std::string env_value);

参数说明:

  • env_name: string

选择设置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: string

该属性的配置值

示例代码:
#include <sail/cvwrapper.h>

int 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") // 跳过非参考帧
    int dev_id = 0;
    sail::Handle handle(dev_id);
    std::string video_path = "input_video.mp4";
    sail::Decoder decoder(video_path, true, dev_id);
    sail::BMImage bmimg = decoder.read(handle);
    return 0;
}

4.1.6. base64_enc

对数据进行base64编码,生成的对应的base64编码后的字符串。不支持BM1688和CV186AH PCIE模式。

接口形式:
int base64_enc(Handle& handle, const void *data, uint32_t dlen, std::string& encoded);

参数说明:

  • handle: Handle

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

  • data: void*

待编码的数据指针

  • dlen: uint32_t

待编码的数据字节长度

  • encoded: string

base64编码生成的字符串

返回值说明

base64编码成功返回0,否则返回-1

示例代码:
#include <sail/base64.h>

int main() {
    int dev_id = 0;
    int ret;
    sail::Handle handle(dev_id);

    std::string data = "hello,world!";

    // base64 encode
    std::string base64_encoded;
    uint32_t dlen = data.length();
    ret = sail::base64_enc(handle, data.c_str(), dlen, base64_encoded);
    if (ret == 0){
        std::cout << dlen << std::endl;
        std::cout << "base64 encode success!" << "based 64:" << base64_encoded << " lens" << dlen << std::endl;
    }
    return 0;
}

4.1.7. base64_dec

对数据进行base64编码,生成的对应的base64编码后的字符串。示例代码请参考base64_dec接口用法。不支持BM1688和CV186AH PCIE模式。

接口形式:
int base64_dec(Handle& handle, const void *data, uint32_t dlen, uint8_t* p_outbuf, uint32_t *p_size);

参数说明:

  • handle: Handle

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

  • data: void*

待解码的数据指针

  • dlen: uint32_t

待解码的数据字节长度

  • p_outbuf: uint8_t*

解码后的数据buffer

  • p_size: uint32_t

输出数据。解码后的数据指针长度

返回值说明

base64解码成功返回0,否则返回-1

示例代码:
#include <sail/base64.h>

int main() {
    int dev_id = 0;
    int ret;
    sail::Handle handle(dev_id);

    std::string data = "hello,world!";

    // base64 encode
    std::string base64_encoded;
    uint32_t dlen = data.length();
    ret = sail::base64_enc(handle, data.c_str(), dlen, base64_encoded);
    if (ret == 0){
        std::cout << dlen << std::endl;
        std::cout << "base64 encode success!" << "based 64:" << base64_encoded << "lens" << dlen << std::endl;
    }

    // base64_dec
    uint32_t dlen_based = base64_encoded.length();
    uint8_t out_data_buf[100]; // 假设有足够大的空间存放解码后的数据
    uint32_t out_data_size; // 用于存放解码后数据的长度
    ret =sail::base64_dec(handle, base64_encoded.c_str(), dlen_based, out_data_buf, &out_data_size);
    if (ret == 0){
        std::cout << "base64 decode success,data size is:" << out_data_size << std::endl;
        for(uint32_t i = 0; i < out_data_size; i++) {
            std::cout << out_data_buf[i];
        }
        std::cout << std::endl;
    }
    return 0;
}

4.1.8. get_tpu_util

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

接口形式:
int get_tpu_util(int dev_id);

参数说明:

  • dev_id: int

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

返回值说明:

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

示例代码:
#include <sail/cvwrapper.h>

int main() {
    int tpu_util;
    tpu_util = sail::get_tpu_util(0); //获取dev0的处理器使用率
    std::cout << "tpu_util " << tpu_util << "%"<< std::endl;
    return 0;
}

4.1.9. get_vpu_util

获取对应设备的VPU使用率

接口形式:
std::vector<int> get_vpu_util(int dev_id);

参数说明:

  • dev_id: int

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

返回值说明:

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

示例代码:
#include <sail/cvwrapper.h>

int main() {
    std::vector<int> vpu_util;
    vpu_util = sail::get_vpu_util(0); //获取dev0的vpu处理器使用率

    for(int i = 0; i < vpu_util.size(); i++) {
        std::cout << "VPU ID: " << i << ", Util Value: " << vpu_util[i] << "%" << std::endl;
    }
    return 0;
}

4.1.10. get_vpp_util

获取对应设备的VPP使用率

接口形式:
std::vector<int> get_vpp_util(int dev_id);

参数说明:

  • dev_id: int

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

返回值说明:

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

示例代码:
#include <sail/cvwrapper.h>

int main() {
    std::vector<int> vpp_util;
    vpp_util = sail::get_vpu_util(0); //获取dev0的vpu处理器使用率

    for(int i = 0; i < vpp_util.size(); i++) {
        std::cout << "VPU ID: " << i << ", Util Value: " << vpp_util[i] << "%" << std::endl;
    }
    return 0;
}

4.1.11. get_board_temp

接口形式:
int get_board_temp(int dev_id);

参数说明:

  • dev_id: int

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

返回值说明:

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

示例代码:
#include <sail/cvwrapper.h>

int main() {
    int board_temp;
    board_temp = sail::get_board_temp(0);
    std::cout << "board_temp " << board_temp << "℃"<< std::endl;
    return 0;
}

4.1.12. get_chip_temp

接口形式:
int get_chip_temp(int dev_id);

参数说明:

  • dev_id: int

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

返回值说明:

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

示例代码:
#include <sail/cvwrapper.h>

int main() {
    int chip_temp;
    chip_temp = sail::get_chip_temp(0);
    std::cout << "chip_temp " << chip_temp << "℃"<< std::endl;
    return 0;
}

4.1.13. get_dev_stat

接口形式:
std::vector<int> get_dev_stat(int dev_id);

参数说明:

  • dev_id: int

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

返回值说明:

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

示例代码:
#include <iostream>
#include "cvwrapper.h"

int main() {
    std::vector<int> dev_stat;
    dev_stat = sail::get_dev_stat(0);

    std::cout << "mem_total: " << dev_stat[0] << " MB" << std::endl;
    std::cout << "mem_used: " << dev_stat[1] << " MB" << std::endl;
    std::cout << "tpu_util: " << dev_stat[2] << " %" << std::endl;
    return 0;
}