10.3.1. ARM运行时API¶
10.3.1.1. 通用API说明¶
10.3.1.1.1. 数据类型与数据结构¶
10.3.1.1.1.1. HB_DSP_VERSION_MAJOR¶
#define HB_DSP_VERSION_MAJOR 0U
DSP主版本号信息。
10.3.1.1.1.2. HB_DSP_VERSION_MINOR¶
#define HB_DSP_VERSION_MINOR 3U
DSP次版本号信息。
10.3.1.1.1.3. HB_DSP_VERSION_PATCH¶
#define HB_DSP_VERSION_PATCH 3U
DSP补丁版本号信息。
10.3.1.1.1.4. HB_DSP_INITIALIZE_RPC_CTRL_PARAM¶
#define HB_DSP_INITIALIZE_RPC_CTRL_PARAM(param) \
{ \
(param)->dspCoreId = HB_DSP_CORE_ANY; \
(param)->rpcCmd = HB_DSP_RPC_CMD_BUTT; \
(param)->priority = 0; \
(param)->customId = 0; \
(param)->reserved1 = 0; \
(param)->reserved2 = 0; \
}
初始化控制参数。
10.3.1.1.1.5. hbDSPRpcCmd¶
typedef enum {
// Naming rules: B means begin, E means end
// [0x1, 0x400) reserved for framework
HB_DSP_RPC_CMD_R_B = 0x0,
HB_DSP_RPC_CMD_PING = HB_DSP_RPC_CMD_R_B,
HB_DSP_RPC_CMD_R_E = 0x3ff,
// [0x400, 0x800) for neural network operators
HB_DSP_RPC_CMD_NN_B = 0x400,
HB_DSP_RPC_CMD_NN_SOFTMAX = HB_DSP_RPC_CMD_NN_B,
HB_DSP_RPC_CMD_NN_E = 0x7ff,
// [0x800, 0xfff) for cv operators
HB_DSP_RPC_CMD_CV_B = 0x800,
HB_DSP_RPC_CMD_CV_E = 0xfff,
// [0x1000, 0xffff] for custom purpose
HB_DSP_RPC_CMD_BUTT = 0xffff
} hbDSPRpcCmd;
DSP RPC命令。
成员
成员名称
描述
HB_DSP_RPC_CMD_R_B
DSP保留命令起始编码。
HB_DSP_RPC_CMD_PING
DSP Ping命令。
HB_DSP_RPC_CMD_R_E
DSP保留命令结束编码。
HB_DSP_RPC_CMD_NN_B
DSP NN命令起始编码。
HB_DSP_RPC_CMD_NN_SOFTMAX
DSP SoftMax命令。
HB_DSP_RPC_CMD_NN_E
DSP NN命令结束编码。
HB_DSP_RPC_CMD_CV_B
DSP CV命令起始编码。
HB_DSP_RPC_CMD_CV_E
DSP CV命令结束编码。
HB_DSP_RPC_CMD_BUTT
DSP 最大命令编码,获取注册命令信息。
10.3.1.1.1.6. hbDspRpcPriority¶
typedef enum {
HB_DSP_RPC_PRIORITY_LOWEST = 0,
HB_DSP_RPC_PRIORITY_HIGHEST = 255,
HB_DSP_RPC_PRIORITY_PREEMP = HB_DSP_RPC_PRIORITY_HIGHEST
} hbDspRpcPriority;
DSP RPC任务优先级。
成员
成员名称
描述
HB_DSP_RPC_PRIORITY_LOWEST
DSP RPC最低优先级。
HB_DSP_RPC_PRIORITY_HIGHEST
DSP RPC最高优先级。
HB_DSP_RPC_PRIORITY_PREEMP
DSP RPC抢占型任务。
10.3.1.1.1.7. hbDSPRpcCtrlParam¶
typedef struct {
int32_t dspCoreId;
int32_t rpcCmd;
int32_t priority;
int64_t customId;
int32_t reserved1;
int32_t reserved2;
} hbDSPRpcCtrlParam;
DSP RPC控制参数。
成员
成员名称
描述
dspCoreId
DSP核ID;0为任意核,1为核0,2为核1。
rpcCmd
DSP任务命令。
priority
任务优先级,第一优先级。
customId
自定义ID,值越小,优先级越高,第二优先级。
reserved1
保留字段1。
Reserved2
保留字段2。
10.3.1.1.1.8. hbDSPTask_t¶
typedef void *hbDSPTask_t;
DSP任务指针。
10.3.1.1.2. API接口¶
10.3.1.1.2.1. hbDSPGetVersion¶
const char *hbDSPGetVersion();
获取DSP的版本信息。
返回值
返回DSP的版本相关信息。
10.3.1.1.2.2. hbDSPRpc¶
int32_t hbDSPRpc(hbDSPTask_t *task,
hbSysMem *input,
hbSysMem *output,
hbDSPRpcCtrlParam *rpcCtrlParam);
向DSP提交一个rpc任务。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
input
表示任务的输入内存。[in/out]
output
表示任务的输出内存。[in]
rpcCtrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.1.2.3. hbDSPWaitTaskDone¶
int32_t hbDSPWaitTaskDone(hbDSPTask_t task,
int32_t timeout);
等待任务运行结束。
参数
[in]
task
任务句柄。[in]
timeout
任务超时时间, 单位是ms。
返回值
返回
0
则表示API成功执行,否则执行失败。
注解
timeout > 0
表示等待时间;timeout = 0
表示一直等待,直到任务完成。
10.3.1.1.2.4. hbDSPReleaseTask¶
int32_t hbDSPReleaseTask(hbDSPTask_t task);
释放task handle,需要在 hbDSPWaitTaskDone
之后调用。
参数
[in]
task
task handle。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.2. 错误码¶
typedef enum {
HB_DSP_SUCCESS = 0, // 执行成功
HB_DSP_INVALID_ARGUMENT = -7000001, // 非法参数
HB_DSP_MEM_ALLOC_FAIL = -7000002, // 内存申请失败
HB_DSP_TASK_TIME_OUT = -7000003, // 任务超时
HB_DSP_CMD_UNAVAILABLE = -7000004, // 非法命令
HB_DSP_DSP_UNAVAILABLE = -7000005, // DSP不可用
HB_DSP_TASK_RUN_FAIL = -7000006, // 任务失败
HB_DSP_OP_NOT_REGISTER = -7000007, // DSP算子未注册
HB_DSP_MMAP_FAIL = -7000008, // DSP内存映射失败
HB_DSP_XV_ALLOC_FAIL = -7000009, // DSP内存申请失败
HB_DSP_XV_FREE_FAIL = -7000010, // DSP内存释放失败
HB_DSP_IDMA_COPY_FAIL = -7000011, // DSP DMA拷贝失败
HB_DSP_IDMA_BAD_INIT = -7000012, // DSP DMA初始化失败
HB_DSP_TASK_NUMBER_EXCEED_LIMIT = -7000013, // 任务数量超限
HB_DSP_INVALID_SCALE = -7000014, // DSP无效缩放比例
} hbDSPStatus;
10.3.1.3. 配置信息¶
环境变量:
HB_DSP_LOG_LEVEL // 设置ARM侧日志等级,值为1、2、3、4、5、6,分别对应为Verbose、Debug、Info、Warning、Error、Always等级。
HB_DSP_VDSP_LOG_LEVEL // 设置DSP侧日志等级,值为1、2、3、4、5,分别对应为Debug、Info、Warning、Error、Always等级。
HB_DSP_ENABLE_DIRECT_MODE // 使能RPC直连模式,值为true、false,默认值为false,即中继模式。
HB_DSP_ENABLE_CORES // 使能DSP核,0 for all(默认), 1 for vdsp0, 2 for vdsp1。
HB_DSP_RPMSG_RECV_TIMEOUT // 设置RPMSG超时时间,默认值为0ms,表示不使用timeout。
注解
DSP侧日志可以通过如下步骤获取:
配置环境变量,使能DSP日志输出
export HB_DSP_ENABLE_CONFIG_VDSP=true export HB_DSP_WRITE_VDSP_LOG_TO_ARM=true
启动日志监听服务
# VDSP0的日志服务: /usr/bin/hrut_remoteproc_log -b dsp0 # VDSP1的日志服务: /usr/bin/hrut_remoteproc_log -b dsp1
10.3.1.4. RPC模式¶
RPC包含两种模式:直连模式与中继模式。
直连模式:不支持多进程,通信开销约200us。
中继模式支持多进程,通信开销约300us。
直连模式配置方法如下:
直连模式与中继模式冲突,确保后台没有
dsp_relay_server
进程(如有,可kill dsp_relay_server && rm /var/run/vdsp_relay_*);export HB_DSP_ENABLE_DIRECT_MODE=true。
中继模式配置方法如下:
unset HB_DSP_ENABLE_DIRECT_MODE;
export PATH=$PATH:{path of dsp_relay_server},dsp_relay_server进程启动后常驻。
在使用中继模式运行可执行程序时,请先确保 PATH
路径下存在 dsp_relay_server
文件。若在运行代码时仍出现
异常情况,则意味着 dsp_relay_server
文件没有执行权限,修改权限的示例命令如下:
chmod -R 777 execute_file
10.3.1.5. CV侧API说明¶
10.3.1.5.1. 内置约束¶
此小结用来描述内置的参数和属性约束,辅助用户了解接口的隐含属性,减少试错成本。
10.3.1.5.1.1. 输入输出图片的尺寸约束¶
部分算子的输入输出有对应的比例关系,优先遵从算子内的约束。
约束名称 |
值 |
---|---|
图片宽度最小值 |
32 |
图片高度最小值 |
16 |
图片宽度最大值 |
4096 |
图片高度最大值 |
2160 |
10.3.1.5.1.2. 对NV12图片格式的约束¶
当前部分算子提供了对NV12格式的支持,具体有哪些算子可以查看算子中的参数约束。其中NV12格式的图片需要保证遵循以下约束:
图片的宽和高均需为偶数;
图片使用的两个指针需分别指向Y区域数据和UV区域数据;
UV区域的高在像素单位和字节单位上均需等于Y区域高的一半;
UV区域的宽在像素单位上需等于Y区域宽的一半,在字节单位上需等于Y区域的宽。
若NV12图片没有遵循上述约束,则将会被认为是非法的NV12格式,虽然算子已经在内部对以上约束进行了错误检查,但仍可能会导致在算子执行过程中出现预期之外的情况, 请在使用NV12格式时充分保证输入输出的有效性。
10.3.1.5.2. 数据类型与数据结构¶
10.3.1.5.2.1. hbDSPImageFormat¶
typedef enum {
HB_DSP_IMAGE_FORMAT_Y = 0,
HB_DSP_IMAGE_FORMAT_NV12, /*YYYYYYYY... UVUV...*/
HB_DSP_IMAGE_FORMAT_RGB_P, /*RRRR...GGGG...BBBB...*/
HB_DSP_IMAGE_FORMAT_RGB, /*RGBRGBRGB...(C3) or RGB_RGB_RGB_...(C4)*/
HB_DSP_IMAGE_FORMAT_BGR_P, /*BBBB...GGGG...RRRR*/
HB_DSP_IMAGE_FORMAT_BGR, /*BGRBGRBGR...(C3) or BGR_BGR_BGR_...(C4)*/
HB_DSP_IMAGE_FORMAT_YUV444, /*YUVYUVYUV... or YUV_YUV_YUV_...*/
HB_DSP_IMAGE_FORMAT_YUV444_P, /*YYYY...UUUU...VVVV...*/
HB_DSP_IMAGE_FORMAT_YUV420 /*YYYY...U...V...*/
} hbDSPImageFormat;
图片的格式枚举。
成员
成员名称
描述
HB_DSP_IMAGE_FORMAT_Y
灰度格式。
HB_DSP_IMAGE_FORMAT_NV12
NV12格式,通道排布为YYYYYYYY… UVUV…。
HB_DSP_IMAGE_FORMAT_RGB_P
RGB_P格式,通道排布为RRRR…GGGG…BBBB…。
HB_DSP_IMAGE_FORMAT_RGB
RGB格式,通道排布为RGBRGBRGB…(C3) or RGB*RGB*RGB*…(C4)。
HB_DSP_IMAGE_FORMAT_BGR_P
BGR_P格式,通道排布为BBBB…GGGG…RRRR。
HB_DSP_IMAGE_FORMAT_BGR
BGR格式,通道排布为BGRBGRBGR…(C3) or BGR*BGR*BGR*…(C4)。
HB_DSP_IMAGE_FORMAT_YUV444
YUV_P格式,通道排布为YUVYUVYUV… or YUV*YUV*YUV*…。
HB_DSP_IMAGE_FORMAT_YUV444_P
YUV格式,通道排布为YYYY…UUUU…VVVV…。
HB_DSP_IMAGE_FORMAT_YUV420
YUV格式,通道排布为YYYY…U…V…。
10.3.1.5.2.2. hbDSPImageType¶
typedef enum {
HB_DSP_IMAGE_TYPE_U8C1 = 0,
HB_DSP_IMAGE_TYPE_U8C3,
HB_DSP_IMAGE_TYPE_U8C4,
HB_DSP_IMAGE_TYPE_S16C1,
HB_DSP_IMAGE_TYPE_S16C2,
HB_DSP_IMAGE_TYPE_S32C1,
HB_DSP_IMAGE_TYPE_F32C1
} hbDSPImageType;
图片的类型枚举,图片的类型包括图片的深度和通道数。
成员
成员名称
描述
HB_DSP_IMAGE_TYPE_U8C1
单通道uint_8类型。
HB_DSP_IMAGE_TYPE_U8C3
三通道uint_8类型。
HB_DSP_IMAGE_TYPE_U8C4
四通道uint_8类型。
HB_DSP_IMAGE_TYPE_S16C1
单通道int_16类型。
HB_DSP_IMAGE_TYPE_S16C2
双通道int_16类型。
HB_DSP_IMAGE_TYPE_S32C1
单通道int_32类型。
HB_DSP_IMAGE_TYPE_F32C1
单通道float_32类型。
10.3.1.5.2.3. hbDSPImage¶
typedef struct {
uint8_t imageFormat;
uint8_t imageType;
int32_t width;
int32_t height;
int32_t stride;
void *dataVirAddr;
uint64_t dataPhyAddr;
void *uvVirAddr;
uint64_t uvPhyAddr;
int32_t uvStride;
} hbDSPImage;
图片结构体。只支持BPU内存使用。
成员
成员名称
描述
imageFormat
图片格式。
imageType
图片类型。
width
图片的像素宽度。
height
图片的像素高度。
stride
图片的像素偏移量,以字节数量表示。
dataVirAddr
图片在arm侧的逻辑地址。
dataPhyAddr
图片的物理地址。
uvVirAddr
图片格式为NV12时,uv数据逻辑地址。
uvPhyAddr
图片格式为NV12时,uv数据物理地址。
uvStride
图片格式为NV12时,uv数据的偏移量,以字节数量表示。
10.3.1.5.2.4. hbDSPRoi¶
typedef struct {
int32_t left;
int32_t top;
int32_t right;
int32_t bottom;
} hbDSPRoi;
图片ROI区域结构体,参数为ROI区域的四条边下标,编号从0开始。ROI区域的width等于right - left + 1,height = bottom - top + 1。
成员
成员名称
描述
left
ROI区域的左边下标。
top
ROI区域的上边下标。
right
ROI区域的右边下标。
bottom
ROI区域的下边下标。
10.3.1.5.2.5. hbDSPRpcCmd¶
typedef enum {
HB_DSP_RPC_CMD_CV_RESIZE = 0x800,
HB_DSP_RPC_CMD_CV_CVT_COLOR = 0x801,
HB_DSP_RPC_CMD_CV_THRESHOLD = 0x802,
HB_DSP_RPC_CMD_CV_BILATERAL_FILTER = 0x803,
HB_DSP_RPC_CMD_CV_BOX_FILTER = 0x804,
HB_DSP_RPC_CMD_CV_GAUSSIAN_BLUR = 0x805,
HB_DSP_RPC_CMD_CV_MEDIAN_BLUR = 0x806,
HB_DSP_RPC_CMD_CV_SOBEL = 0x807,
HB_DSP_RPC_CMD_CV_ERODE = 0x808,
HB_DSP_RPC_CMD_CV_PYR_UP = 0x809,
HB_DSP_RPC_CMD_CV_EQUALIZE_HIST = 0x80a,
HB_DSP_RPC_CMD_CV_FILTER2D = 0x80b,
HB_DSP_RPC_CMD_CV_SEP_FILTER2D = 0x80c,
HB_DSP_RPC_CMD_CV_TRANSPOSE = 0x80d,
HB_DSP_RPC_CMD_CV_PYR_DOWN = 0x80e,
HB_DSP_RPC_CMD_CV_WARP_AFFINE = 0x80f,
HB_DSP_RPC_CMD_CV_WARP_PERSPECTIVE = 0x810,
HB_DSP_RPC_CMD_CV_FLIP = 0x811,
HB_DSP_RPC_CMD_CV_DILATE = 0x812,
HB_DSP_RPC_CMD_CV_INTEGRAL = 0x813,
HB_DSP_RPC_CMD_CV_CANNY = 0x814,
HB_DSP_RPC_CMD_CV_ROTATE = 0x815,
HB_DSP_RPC_CMD_CV_CORNER_HARRIS = 0x816,
HB_DSP_RPC_CMD_CV_ROI_RESIZE = 0x817,
HB_DSP_RPC_CMD_CV_REMAP = 0x818,
} hbDSPCvCmd;
调用CV算子的RPC命令。
成员
成员名称
描述
HB_DSP_RPC_CMD_CV_RESIZE
DSP CV Resize命令。
HB_DSP_RPC_CMD_CV_CVT_COLOR
DSP CV CvtColor命令。
HB_DSP_RPC_CMD_CV_THRESHOLD
DSP CV Threshold命令。
HB_DSP_RPC_CMD_CV_BILATERAL_FILTER
DSP CV BilateralFilter命令。
HB_DSP_RPC_CMD_CV_BOX_FILTER
DSP CV Box Filter命令。
HB_DSP_RPC_CMD_CV_GAUSSIAN_BLUR
DSP CV GaussianBlur命令。
HB_DSP_RPC_CMD_CV_MEDIAN_BLUR
DSP CV MedianBlur命令。
HB_DSP_RPC_CMD_CV_SOBEL
DSP CV Sobel命令。
HB_DSP_RPC_CMD_CV_ERODE
DSP CV Erode命令。
HB_DSP_RPC_CMD_CV_PYR_UP
DSP CV PyrUp命令。
HB_DSP_RPC_CMD_CV_EQUALIZE_HIST
DSP CV Equalize命令。
HB_DSP_RPC_CMD_CV_FILTER2D
DSP CV Filter2D命令。
HB_DSP_RPC_CMD_CV_SEP_FILTER2D
DSP CV SepFilter2D命令。
HB_DSP_RPC_CMD_CV_TRANSPOSE
DSP CV Transpose命令。
HB_DSP_RPC_CMD_CV_PYR_DOWN
DSP CV PyrDown命令。
HB_DSP_RPC_CMD_CV_WARP_AFFINE
DSP CV WarpAffine命令。
HB_DSP_RPC_CMD_CV_WARP_PERSPECTIVE
DSP CV WarpPerspective命令。
HB_DSP_RPC_CMD_CV_FLIP
DSP CV Flip命令。
HB_DSP_RPC_CMD_CV_DILATE
DSP CV Dilate命令。
HB_DSP_RPC_CMD_CV_INTEGRAL
DSP CV Intergral命令。
HB_DSP_RPC_CMD_CV_CANNY
DSP CV Canny命令。
HB_DSP_RPC_CMD_CV_ROTATE
DSP CV Rotate命令。
HB_DSP_RPC_CMD_CV_CORNER_HARRIS
DSP CV CornerHarris命令。
HB_DSP_RPC_CMD_CV_ROI_RESIZE
DSP CV RoiResize命令。
HB_DSP_RPC_CMD_CV_REMAP
DSP CV Remap命令。
10.3.1.5.2.6. hbDSPCVInterpolationFlags¶
typedef enum {
HB_CV_INTER_NEAREST = 0,
HB_CV_INTER_LINEAR = 1,
} hbDSPCVInterpolationFlags;
插值方式。
成员
成员名称
描述
HB_CV_INTER_NEAREST
最邻近插值。
HB_CV_INTER_LINEAR
双线性插值。
10.3.1.5.2.7. hbDSPCVBorderTypes¶
typedef enum {
HB_CV_BORDER_CONSTANT = 0,
HB_CV_BORDER_REPLICATE = 1,
} hbDSPCVBorderTypes;
填充类型。
成员
成员名称
描述
HB_CV_BORDER_CONSTANT
值填充,iiiiii|abcdefgh|iiiiiii。
HB_CV_BORDER_REPLICATE
边界复制填充,aaaaaa|abcdefgh|hhhhhhh。
10.3.1.5.2.8. hbDSPCVThresholdType¶
typedef enum
{
HB_CV_THRESH_TOZERO = 3
} hbDSPCVThresholdType;
Threshold类型。
成员
成员名称
描述
HB_CV_THRESH_TOZERO
阈值类型,if(src > thresh) dst = src else dst = 0。
10.3.1.5.2.9. hbDSPCVCannyNorm¶
typedef enum {
HB_CV_NORM_L1 = 1,
} hbDSPCVCannyNorm;
Canny norm参数。
成员
成员名称
描述
HB_CV_NORM_L1
Canny参数,NORM_L1。
10.3.1.5.2.10. hbDSPRotateDegree¶
typedef enum {
HB_CV_ROTATE_90_CLOCKWISE = 0,
HB_CV_ROTATE_180_CLOCKWISE,
HB_CV_ROTATE_90_COUNTERCLOCKWISE,
} hbDSPRotateDegree;
Rotate degree参数。
成员
成员名称
描述
HB_CV_ROTATE_90_CLOCKWISE
Rotate参数,顺时针旋转90度。
HB_CV_ROTATE_180_CLOCKWISE
Rotate参数,顺时针旋转180度。
HB_CV_ROTATE_90_COUNTERCLOCKWISE
Rotate参数,逆时针旋转90度。
10.3.1.5.2.11. hbDSPResizeParam¶
typedef struct { int8_t interpolation; } hbDSPResizeParam;
Resize算子参数。
成员
成员名称
描述
interpolation
Resize 中的插值类型,只支持hbDSPCVInterpolationFlags中的类型。
10.3.1.5.2.12. hbDSPWarpAffineParam¶
typedef struct {
float transformMatrix[6];
int8_t interpolation;
int8_t borderType;
uint8_t borderValue;
} hbDSPWarpAffineParam;
WarpAffine算子参数。
成员
成员名称
描述
transformMatrix[6]
WarpAffine 逆转换矩阵(dst->src),2X3矩阵。
interpolation
WarpAffine 中的插值类型,只支持 hbDSPCVInterpolationFlags 中的类型。
borderType
保留参数。
borderValue
保留参数。
10.3.1.5.2.13. hbDSPWarpPerspectiveParam¶
typedef struct {
float transformMatrix[9];
int8_t interpolation;
int8_t borderType;
uint8_t borderValue;
} hbDSPWarpPerspectiveParam;
WarpPerspective算子参数。
成员
成员名称
描述
transformMatrix[9]
WarpPerspective 转换矩阵,3X3矩阵。
interpolation
WarpPerspective 中的插值类型,支持 hbDSPCVInterpolationFlags 中的类型。
borderType
保留参数。
borderValue
保留参数。
10.3.1.5.2.14. hbDSPFlipParam¶
typedef struct {
uint8_t flipMode;
} hbDSPFlipParam;
Flip算子参数。
成员
成员名称
描述
flipMode
翻转参数,0为绕 X 轴翻转,大于0的正整数为绕 Y 轴翻转。
10.3.1.5.2.15. hbDSPThresholdParam¶
typedef struct {
float64_t thresh;
float64_t maxVal;
int8_t type;
} hbDSPThresholdParam;
Threshold算子参数。
成员
成员名称
描述
thresh
阈值,值小于等于255。
maxVal
保留参数。
type
阈值类型,保留参数。
10.3.1.5.2.16. hbDSPBilateralFilterParam¶
typedef struct {
float64_t sigmaColor;
float64_t sigmaSpace;
int8_t kernelSize;
int8_t borderType;
} hbDSPBilateralFilterParam;
BilateralFilter算子参数。
成员
成员名称
描述
sigmaColor
颜色空间中的sigma滤波参数。
sigmaSpace
坐标空间中的sigma滤波参数。
kernelSize
滤波核大小,支持大小为 5 或者 9 。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.17. hbDSPBoxFilterParam¶
typedef struct {
int8_t kernelHeight;
int8_t kernelWidth;
int8_t pointLocX;
int8_t pointLocY;
int8_t normalize;
int8_t borderType;
} hbDSPBoxFilterParam;
BoxFilter算子参数。
成员
成员名称
描述
kernelHeight
滤波核的高度,值为[3,31)间的奇数,核高和宽相等。
kernelWidth
滤波核的宽度,值为[3,31)间的奇数,核宽和高相等。
pointLocX
保留参数。
pointLocY
保留参数。
normalize
保留参数。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.18. hbDSPGaussianBlurParam¶
typedef struct {
float64_t sigmaX;
float64_t sigmaY;
int8_t kernelSize;
int8_t borderType;
} hbDSPGaussianBlurParam;
GaussianBlur算子参数。
成员
成员名称
描述
sigmaX
保留参数。
sigmaY
保留参数。
kernelSize
滤波核的尺寸,支持 3X3 和 5X5 的尺寸。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.19. hbDSPMedianBlurParam¶
typedef struct { int8_t maskWidth; } hbDSPMedianBlurParam;
MedianBlur算子参数。
成员
成员名称
描述
maskWidth
滤波核大小,需要为大于 1 小于 9 的奇数。
10.3.1.5.2.20. hbDSPSobelParam¶
typedef struct {
float64_t scale;
float64_t delta;
int8_t dx;
int8_t dy;
int8_t kernelSize;
int8_t borderType;
} hbDSPSobelParam;
Sobel算子参数。
成员
成员名称
描述
scale
保留参数。
delta
保留参数。
dx
导数 X 的阶。
dy
导数 Y 的阶。
kernelSize
sobel扩展核大小,支持 3 和 5 。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.21. hbDSPErodeParam¶
typedef struct {
int8_t pointLocX;
int8_t pointLocY;
int8_t iterations;
int8_t borderType;
uint8_t borderValue;
} hbDSPErodeParam;
Erode算子参数。
成员
成员名称
描述
pointLocX
保留参数 。
pointLocY
保留参数 。
iterations
保留参数 。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
borderValue
保留参数。
10.3.1.5.2.22. hbDSPDilateParam¶
typedef struct {
int8_t pointLocX;
int8_t pointLocY;
int8_t iterations;
int8_t borderType;
uint8_t borderValue;
} hbDSPDilateParam;
Dilate算子参数。
成员
成员名称
描述
pointLocX
保留参数。
pointLocY
保留参数。
iterations
保留参数。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
borderValue
保留参数。
10.3.1.5.2.23. hbDSPFilter2DParam¶
typedef struct {
float64_t delta;
int8_t pointLocX;
int8_t pointLocY;
int8_t borderType;
} hbDSPFilter2DParam;
Filter2D算子参数。
成员
成员名称
描述
delta
保留参数。
pointLocX
保留参数。
pointLocY
保留参数。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.24. hbDSPSepFilter2DParam¶
typedef struct {
int32_t delta;
int8_t pointLocX;
int8_t pointLocY;
int8_t borderType;
} hbDSPSepFilter2DParam;
SepFilter2D算子参数。
成员
成员名称
描述
delta
保留参数。
pointLocX
保留参数。
pointLocY
保留参数。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.25. hbDSPCannyParam¶
typedef struct {
uint32_t threshold1;
uint32_t threshold2;
int8_t kernelSize;
int8_t norm;
int8_t overlap;
int8_t borderType;
} hbDSPCannyParam;
Canny算子参数。
成员
成员名称
描述
threshold1
低位阈值。
threshold2
高位阈值。
kernelSize
核尺寸,支持 3X3, 5X5 和 7x7。
norm
支持 hbDSPCVCannyNorm 中的类型。
overlap
保留参数。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.26. hbDSPRotateParam¶
typedef struct {
int8_t rotateCode;
} hbDSPRotateParam;
Rotate算子参数。
成员
成员名称
描述
rotateCode
旋转角度,支持 hbDSPRotateDegree 中的类型。
10.3.1.5.2.27. hbDSPCornerHarrisParam¶
typedef struct {
int8_t borderType;
int8_t kernelSize;
uint32_t blockSize;
float sensitivity;
} hbDSPCornerHarrisParam;
CornerHarris算子参数。
成员
成员名称
描述
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
kernelSize
核尺寸,支持 3X3, 5X5 和 7x7。
blockSize
邻域尺寸,取值为[3, 27]内的奇数
sensitivity
检测器自由参数,推荐取值范围为[0.04, 0.06]
10.3.1.5.2.28. hbDSPRoiResizeParam¶
typedef struct {
int8_t interpolation;
uint8_t paddingValue[4];
} hbDSPRoiResizeParam;
RoiResize算子参数。
成员
成员名称
描述
interpolation
插值类型,支持 hbDSPCVInterpolationFlags 中的类型。
paddingValue[4]
Padding 值,每个通道对应一个值,NV12使用三个通道。
10.3.1.5.2.29. hbDSPRemapParam¶
typedef struct {
int8_t interpolation;
int8_t borderType;
uint8_t borderValue;
} hbDSPRemapParam;
Remap算子参数。
成员
成员名称
描述
interpolation
Remap 中的插值类型,支持 hbDSPCVInterpolationFlags 中的类型。
borderType
保留参数。
borderValue
保留参数。
10.3.1.5.3. CV API接口¶
10.3.1.5.3.1. hbDSPResize¶
int32_t hbDSPResize(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPResizeParam *resizeParam,
hbDSPRpcCtrlParam *ctrlParam);
调用Resize API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type和format与输入图像一致,图像尺寸可由输入图像和缩放比例计算得出。[in]
srcImg
输入图像,type支持U8C1,format支持Y和nv12。[in]
resizeParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.2. hbDSPCvtColor¶
int32_t hbDSPCvtColor(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPRpcCtrlParam *ctrlParam);
调用 CvtColor API,支持RGB转换为GRAY,RGB与BGR转换为NV12。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,大小与输入图像一致,type支持U8C1,format支持Y和nv12。[in]
srcImg
输入图像,type支持U8C3,format支持RGB和BGR。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
转换支持表
srcFmtdstFmt
gray
nv12
rgb_p
rgb
bgr_p
bgr
yuv_p
yuv
gray
N
N
N
N
N
N
N
N
nv12
N
N
N
N
N
N
N
N
rgb_p
N
N
N
N
N
N
N
N
rgb
Y
Y
N
N
N
N
N
N
bgr_p
N
N
N
N
N
N
N
N
bgr
N
Y
N
N
N
N
N
N
yuv_p
N
N
N
N
N
N
N
N
yuv
N
N
N
N
N
N
N
N
10.3.1.5.3.3. hbDSPWarpAffine¶
int32_t hbDSPWarpAffine(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPWarpAffineParam *warpAffineParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 WarpAffine API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type和format与输入图像一致,尺寸大小由转换矩阵计算得出。[in]
srcImg
输入图像,type支持U8C1,format支持Y和nv12。[in]
warpAffineParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.4. hbDSPWarpPerspective¶
int32_t hbDSPWarpPerspective(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPWarpPerspectiveParam *warpPerspectiveParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 WarpPerspective API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和size与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y和nv12。[in]
warpPerspectiveParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.5. hbDSPThreshold¶
int32_t hbDSPThreshold(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPThresholdParam *thresholdParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 Threshold API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,支持U8C1,format Y,大小和输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
thresholdParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.6. hbDSPBilateralFilter¶
int32_t hbDSPBilateralFilter(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPBilateralFilterParam *bilateralParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 bilateralFilter API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
bilateralParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.7. hbDSPBoxFilter¶
int32_t hbDSPBoxFilter(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPBoxFilterParam *boxParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 boxFilter API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
boxParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.8. hbDSPGaussianBlur¶
int32_t hbDSPGaussianBlur(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPGaussianBlurParam *gaussianParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 gaussianBlur API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
gaussianParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.9. hbDSPMedianBlur¶
int32_t hbDSPMedianBlur(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPMedianBlurParam *medianParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 medianBlur API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
medianParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.10. hbDSPSobel¶
int32_t hbDSPSobel(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPSobelParam *sobelParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 Sobel API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,format和大小与输入图像一致,type支持S16C1。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
sobelParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.11. hbDSPErode¶
int32_t hbDSPErode(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPImage *krnImg,
hbDSPErodeParam *erodeParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 Erode API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
krnImg
算子处理核,type支持U8C1,format支持Y,宽和高为小于等于9的奇数。[in]
erodeParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.12. hbDSPDilate¶
int32_t hbDSPDilate(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPImage *krnImg,
hbDSPDilateParam *dilateParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 Dilate API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
krnImg
算子处理核,type支持U8C1,format支持Y,宽和高为小于等于9的奇数。[in]
dilateParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.13. hbDSPPyrUp¶
int32_t hbDSPPyrUp(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPRpcCtrlParam *ctrlParam);
调用 PyrUp API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type和format与输入图像一致,其长和宽均为输入图像的两倍。[in]
srcImg
输入图像,type支持U8C1,format支持Y和nv12。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.14. hbDSPEqualizeHist¶
int32_t hbDSPEqualizeHist(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPRpcCtrlParam *ctrlParam);
调用 EqualizeHist API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.15. hbDSPFilter2D¶
int32_t hbDSPFilter2D(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPImage *krnImg,
hbDSPFilter2DParam *filter2DParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 Filter2D API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
krnImg
算子处理核,type支持F32C1,format支持Y,尺寸为小于等于9的正奇数。[in]
filter2DParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.16. hbDSPSepFilter2D¶
int32_t hbDSPSepFilter2D(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPImage *krnXImg,
hbDSPImage *krnYImg,
hbDSPSepFilter2DParam *sepFilter2DParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 SepFilter2D API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
krnXImg
算子每行滤波系数,type支持F32C1,format支持Y,大小为1xN,N为小于等于9的正奇数。[in]
krnYImg
算子每列滤波系数,type支持F32C1,format支持Y,大小为Nx1,N为小于等于9的正奇数。[in]
sepFilter2DParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.17. hbDSPTranspose¶
int32_t hbDSPTranspose(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPRpcCtrlParam *ctrlParam);
调用 Transpose API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type与format与输入图像一致,其width等于输入图像的height,height等于输入图像的width。[in]
srcImg
输入图像,type支持U8C1,format支持Y和nv12。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.18. hbDSPPyrDown¶
int32_t hbDSPPyrDown(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPRpcCtrlParam *ctrlParam);
调用 PyrDown API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type与format与输入图像一致,其width为输入图像width的一半(上取整),其height为输入图像height的一半(上取整)。[in]
srcImg
输入图像,type支持U8C1,format支持Y和nv12。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.19. hbDSPFlip¶
int32_t hbDSPFlip(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPFlipParam *flipParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 Flip API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y和nv12。[in]
flipParam
算子参数,参数中值为0表示沿x轴翻转,值为正整数表示沿y轴翻转。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.20. hbDSPIntegral¶
int32_t hbDSPIntegral(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPRpcCtrlParam *ctrlParam);
调用 Integral API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,format与输入图像一致,type支持S32C1,其width为输入图像的width加一,其height为输入图像的height加一。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.21. hbDSPCanny¶
int32_t hbDSPCanny(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPCannyParam *cannyParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 Canny API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type、format和大小与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
cannyParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.22. hbDSPRotate¶
int32_t hbDSPRotate(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPRotateParam *rotateParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 Rotate API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,type和format与输入图像一致,其大小根据旋转角度与输入图像的大小决定。[in]
srcImg
输入图像,type支持U8C1,format支持Y和nv12。[in]
rotateParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.23. hbDSPCornerHarris¶
int32_t hbDSPCornerHarris(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPCornerHarrisParam *cornerHarrisParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 CornerHarris API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,format与输入图像一致,type支持S32C1,大小与输入一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y。[in]
cornerHarrisParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.24. hbDSPRoiResize¶
int32_t hbDSPRoiResize(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPRoi *roi,
hbDSPRoiResizeParam *roiResizeParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 RoiResize API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,format和type与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y和nv12。[in]
roi
ROI区域,有效范围取ROI区域与srcImg的交集,且有效范围需要符合图片的内置约束。[in]
roiResizeParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.5.3.25. hbDSPRemap¶
int32_t hbDSPRemap(hbDSPTask_t *task,
hbDSPImage *dstImg,
hbDSPImage *srcImg,
hbDSPImage *map1,
hbDSPImage *map2,
hbDSPRemapParam *remapParam,
hbDSPRpcCtrlParam *ctrlParam);
调用 Remap API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstImg
输出图像,format和type与输入图像一致。[in]
srcImg
输入图像,type支持U8C1,format支持Y和nv12。[in]
map1
map1映射坐标(x,y),type支持S16C2,大小与输出图像一致,坐标交错排列xyxy。[in]
map2
map2映射坐标(x,y),type支持S16C2,大小与输出图像一致,坐标交错排列xyxy。当插值类型为HB_CV_INTER_NEAREST时,只用到map1,当插值类型为HB_CV_INTER_LINEAR时,存储坐标权重,可自定义或者由opencv接口convertMaps转换得到。[in]
remapParam
算子参数。[in]
ctrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
注解
由于DSP 实现分 tile 计算,且 TCM 大小限制 J5 2 x 128 KB,所以 tile 也有大小限制。分 tile 计算需要根据输出 tile 的大小映射到输入 tile 大小,所以当前缩小变换时,输入 tile 会比输出 tile 大(当前 remap 实现缩小比例限制 >= 0.25);
如果输出 tile 需要的输入 tile 过大,会走到内部未优化的分支,性能会特别慢,此时可以检查 map 数据是否存在上述情况。
![../../../_images/remap_restrict.png](../../../_images/remap_restrict.png)
10.3.1.6. NN侧API说明¶
10.3.1.6.1. 数据类型与数据结构¶
10.3.1.6.1.1. hbDSPDataLayout¶
typedef enum {
HB_DSP_LAYOUT_NONE = 0,
HB_DSP_LAYOUT_NCHW = 1,
HB_DSP_LAYOUT_NHWC = 2,
} hbDSPDataLayout;
DSP NN数据排布类型枚举。
成员
成员名称
描述
HB_DSP_LAYOUT_NONE
DSP NN 无排布,使用默认参数。
HB_DSP_LAYOUT_NCHW
DSP NN 数据 NCHW 顺序排布。
HB_DSP_LAYOUT_NHWC
DSP NN 数据 NHWC 顺序排布。
10.3.1.6.1.2. hbDSPDataType¶
typedef enum {
HB_DSP_TENSOR_TYPE_S8 = 0x01,
HB_DSP_TENSOR_TYPE_S16 = 0x02,
HB_DSP_TENSOR_TYPE_S32 = 0x03,
HB_DSP_TENSOR_TYPE_F32 = 0x04,
} hbDSPDataType;
DSP NN数据类型枚举。
成员
成员名称
描述
HB_DSP_TENSOR_TYPE_S8
DSP NN 8位int类型。
HB_DSP_TENSOR_TYPE_S16
DSP NN 16位int类型。
HB_DSP_TENSOR_TYPE_S32
DSP NN 32位int类型。
HB_DSP_TENSOR_TYPE_F32
DSP NN float类型。
10.3.1.6.1.3. hbDSPTensor¶
#define HB_DSP_TENSOR_MAX_DIMENSIONS 8
typedef struct {
int32_t dimensionSize[HB_DSP_TENSOR_MAX_DIMENSIONS];
int32_t numDimensions;
} hbDSPTensorShape;
typedef struct {
hbDSPTensorShape dataShape;
// Tensor data layout NCHW | NHWC : 1 | 2
uint8_t dataLayout;
// Tensor data type int8_t | int16_t | int32_t | float_t : 1 | 2 | 3 | 4
uint8_t dataType;
// Physical address for tensor data
uint64_t dataPhyAddr;
} hbDSPTensor;
成员
成员名称
描述
hbDSPTensorShape
张量尺寸。
dataLayout
张量布局。
dataType
数据类型。
dataPhyAddr
张量数据物理地址。
10.3.1.6.1.4. hbDSPNNCmd¶
typedef enum {
// [0x400, 0x800) for neural network operators
HB_DSP_RPC_CMD_NN_QUANTIZE = 0x401,
HB_DSP_RPC_CMD_NN_DEQUANTIZE = 0x402,
} hbDSPNNCmd;
DSP调用NN API的RPC命令。
成员
成员名称
描述
HB_DSP_RPC_CMD_NN_QUANTIZE
DSP NN Quantize命令。
HB_DSP_RPC_CMD_NN_DEQUANTIZE
DSP NN Dequantize命令。
10.3.1.6.1.5. hbDSPQuantizeParam¶
typedef struct {
int32_t scaleChannel;
int32_t zeroPointChannel;
uint64_t scalePhyAddr;
uint64_t zeroPointPhyAddr;
int32_t min;
int32_t max;
} hbDSPQuantizeParam;
量化算子参数。
成员
成员名称
描述
scaleChannel
scale通道数。
zeroPointChannel
zeroPoint通道数。
scalePhyAddr
scale物理地址,其中的数据必须是float32_t类型。
zeroPointPhyAddr
zeroPoint物理地址,其中的数据必须是float32_t类型。
min
量化最小值。
max
量化最大值。
10.3.1.6.1.6. hbDSPDequantizeParam¶
typedef struct {
int32_t scaleChannel;
int32_t zeroPointChannel;
uint64_t scalePhyAddr;
uint64_t zeroPointPhyAddr;
} hbDSPDequantizeParam;
反量化算子参数。
成员
成员名称
描述
scaleChannel
scale通道数。
zeroPointChannel
zeroPoint通道数。
scalePhyAddr
scale物理地址,其中的数据必须是float32_t类型。
zeroPointPhyAddr
zeroPoint物理地址,其中的数据类型必须与输入数据类型一致。
注解
scaleChannel取值为1或者与输入通道数一致;
zeroPointChannel取值为 0、1或者scaleChannel,且zeroPointChannel <= scaleChannel。
10.3.1.6.2. NN API接口¶
10.3.1.6.2.1. hbDSPQuantize¶
int32_t hbDSPQuantize(hbDSPTask_t *task,
hbDSPTensor *dstTs,
hbDSPTensor *srcTs,
hbDSPQuantizeParam *quantizeParam,
hbDSPRpcCtrlParam *ctrlParam);
调用Quantize API。
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstTs
输出张量。[in]
srcTs
输入张量。[in]
quantizeParam
算子参数。[in]
rpcCtrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.6.2.2. hbDSPDequantize¶
int32_t hbDSPDequantize(hbDSPTask_t *task,
hbDSPTensor *dstTs,
hbDSPTensor *srcTs,
hbDSPDequantizeParam *dequantizeParam,
hbDSPRpcCtrlParam *ctrlParam);
参数
[out]
task
任务句柄,用hbDSPWaitTaskDone
等待指定任务结束。[in/out]
dstTs
输出张量。[in]
srcTs
输入张量。[in]
dequantizeParam
算子参数。[in]
rpcCtrlParam
任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回
0
则表示API成功执行,否则执行失败。
10.3.1.6.3. NN PLUGIN¶
NN PLUGIN作为libdnn的plugin被调用,在使用libdnn进行模型推理时,派发到ARM上的quantize或dequantize算子可使用如下环境变量控制ARM是否将计算卸载到DSP上执行。
export HB_DNN_PLUGIN_PATH=${ARM_PLUGIN} // libhb_dsp_nn_plugin.so所在路径
export HB_DNN_ENABLE_DSP=1
// 当前plugin策略选择是否卸载到DSP执行
// quantize输入数据类型为float,输出数据类型为int8_t,输入数据尺寸需要大于等于1x2^18
// dequantize输入数据类型为int8_t/int32_t,输出数据类型为float,输入数据尺寸需要大于等于1x2^20
export HB_DNN_DISABLE_ACC_AUTO_DEPLOY=1 // 此开关控制是否所有尺寸卸载到DSP执行