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¶
DSP主版本号信息。
10.3.1.1.1.2. HB_DSP_VERSION_MINOR
DSP次版本号信息。
10.3.1.1.1.3. HB_DSP_VERSION_PATCH
DSP补丁版本号信息。
10.3.1.1.1.4. HB_DSP_INITIALIZE_RPC_CTRL_PARAM¶
初始化控制参数。
10.3.1.1.1.5. 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
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
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¶
DSP任务指针。
10.3.1.1.2. API接口¶
10.3.1.1.2.1. hbDSPGetVersion¶
获取DSP的版本信息。
返回值
返回DSP的版本相关信息。
10.3.1.1.2.2. hbDSPRpc¶
向DSP提交一个rpc任务。
参数
[out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。
[in/out] input 表示任务的输入内存。
[in/out] output 表示任务的输出内存。
[in] rpcCtrlParam 任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回 0 则表示API成功执行,否则执行失败。
10.3.1.1.2.3. hbDSPWaitTaskDone¶
等待任务运行结束。
参数
[in] task 任务句柄。
[in] timeout 任务超时时间, 单位是ms。
返回值
返回 0 则表示API成功执行,否则执行失败。
注解
timeout > 0 表示等待时间;
timeout = 0 表示一直等待,直到任务完成。
10.3.1.1.2.4. hbDSPReleaseTask¶
释放task handle,需要在 hbDSPWaitTaskDone 之后调用。
参数
[in] task task handle。
返回值
返回 0 则表示API成功执行,否则执行失败。
10.3.1.2. 错误码¶
10.3.1.3. 配置信息
环境变量:
注解
DSP侧日志可以通过如下步骤获取:
配置环境变量,使能DSP日志输出
启动日志监听服务
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 文件没有执行权限,修改权限的示例命令如下:
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¶
图片的格式枚举。
成员
成员名称
描述
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¶
图片的类型枚举,图片的类型包括图片的深度和通道数。
成员
成员名称
描述
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¶
图片结构体。只支持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¶
图片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¶
调用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¶
插值方式。
成员
成员名称
描述
HB_CV_INTER_NEAREST
最邻近插值。
HB_CV_INTER_LINEAR
双线性插值。
10.3.1.5.2.7. hbDSPCVBorderTypes¶
填充类型。
成员
成员名称
描述
HB_CV_BORDER_CONSTANT
值填充,iiiiii|abcdefgh|iiiiiii。
HB_CV_BORDER_REPLICATE
边界复制填充,aaaaaa|abcdefgh|hhhhhhh。
10.3.1.5.2.8. hbDSPCVThresholdType¶
Threshold类型。
成员
成员名称
描述
HB_CV_THRESH_TOZERO
阈值类型,if(src > thresh) dst = src else dst = 0。
10.3.1.5.2.9. hbDSPCVCannyNorm
Canny norm参数。
成员
成员名称
描述
HB_CV_NORM_L1
Canny参数,NORM_L1。
10.3.1.5.2.10. 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¶
Resize算子参数。
成员
成员名称
描述
interpolation
Resize 中的插值类型,只支持hbDSPCVInterpolationFlags中的类型。
10.3.1.5.2.12. hbDSPWarpAffineParam¶
WarpAffine算子参数。
成员
成员名称
描述
transformMatrix[6]
WarpAffine 逆转换矩阵(dst->src),2X3矩阵。
interpolation
WarpAffine 中的插值类型,只支持 hbDSPCVInterpolationFlags 中的类型。
borderType
保留参数。
borderValue
保留参数。
10.3.1.5.2.13. hbDSPWarpPerspectiveParam¶
WarpPerspective算子参数。
成员
成员名称
描述
transformMatrix[9]
WarpPerspective 转换矩阵,3X3矩阵。
interpolation
WarpPerspective 中的插值类型,支持 hbDSPCVInterpolationFlags 中的类型。
borderType
保留参数。
borderValue
保留参数。
10.3.1.5.2.14. hbDSPFlipParam¶
Flip算子参数。
成员
成员名称
描述
flipMode
翻转参数,0为绕 X 轴翻转,大于0的正整数为绕 Y 轴翻转。
10.3.1.5.2.15. hbDSPThresholdParam¶
Threshold算子参数。
成员
成员名称
描述
thresh
阈值,值小于等于255。
maxVal
保留参数。
type
阈值类型,保留参数。
10.3.1.5.2.16. hbDSPBilateralFilterParam¶
BilateralFilter算子参数。
成员
成员名称
描述
sigmaColor
颜色空间中的sigma滤波参数。
sigmaSpace
坐标空间中的sigma滤波参数。
kernelSize
滤波核大小,支持大小为 5 或者 9 。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.17. hbDSPBoxFilterParam¶
BoxFilter算子参数。
成员
成员名称
描述
kernelHeight
滤波核的高度,值为[3,31)间的奇数,核高和宽相等。
kernelWidth
滤波核的宽度,值为[3,31)间的奇数,核宽和高相等。
pointLocX
保留参数。
pointLocY
保留参数。
normalize
保留参数。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.18. hbDSPGaussianBlurParam¶
GaussianBlur算子参数。
成员
成员名称
描述
sigmaX
保留参数。
sigmaY
保留参数。
kernelSize
滤波核的尺寸,支持 3X3 和 5X5 的尺寸。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.19. hbDSPMedianBlurParam¶
MedianBlur算子参数。
成员
成员名称
描述
maskWidth
滤波核大小,需要为大于 1 小于 9 的奇数。
10.3.1.5.2.20. hbDSPSobelParam¶
Sobel算子参数。
成员
成员名称
描述
scale
保留参数。
delta
保留参数。
dx
导数 X 的阶。
dy
导数 Y 的阶。
kernelSize
sobel扩展核大小,支持 3 和 5 。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.21. hbDSPErodeParam¶
Erode算子参数。
成员
成员名称
描述
pointLocX
保留参数 。
pointLocY
保留参数 。
iterations
保留参数 。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
borderValue
保留参数。
10.3.1.5.2.22. hbDSPDilateParam¶
Dilate算子参数。
成员
成员名称
描述
pointLocX
保留参数。
pointLocY
保留参数。
iterations
保留参数。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
borderValue
保留参数。
10.3.1.5.2.23. hbDSPFilter2DParam¶
Filter2D算子参数。
成员
成员名称
描述
delta
保留参数。
pointLocX
保留参数。
pointLocY
保留参数。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.24. hbDSPSepFilter2DParam
SepFilter2D算子参数。
成员
成员名称
描述
delta
保留参数。
pointLocX
保留参数。
pointLocY
保留参数。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.25. hbDSPCannyParam¶
Canny算子参数。
成员
成员名称
描述
threshold1
低位阈值。
threshold2
高位阈值。
kernelSize
核尺寸,支持 3X3, 5X5 和 7x7。
norm
支持 hbDSPCVCannyNorm 中的类型。
overlap
保留参数。
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
10.3.1.5.2.26. hbDSPRotateParam¶
Rotate算子参数。
成员
成员名称
描述
rotateCode
旋转角度,支持 hbDSPRotateDegree 中的类型。
10.3.1.5.2.27. hbDSPCornerHarrisParam
CornerHarris算子参数。
成员
成员名称
描述
borderType
填充类型,支持 hbDSPCVBorderTypes 中的类型。
kernelSize
核尺寸,支持 3X3, 5X5 和 7x7。
blockSize
邻域尺寸,取值为[3, 27]内的奇数
sensitivity
检测器自由参数,推荐取值范围为[0.04, 0.06]
10.3.1.5.2.28. hbDSPRoiResizeParam¶
RoiResize算子参数。
成员
成员名称
描述
interpolation
插值类型,支持 hbDSPCVInterpolationFlags 中的类型。
paddingValue[4]
Padding 值,每个通道对应一个值,NV12使用三个通道。
10.3.1.5.2.29. hbDSPRemapParam¶
Remap算子参数。
成员
成员名称
描述
interpolation
Remap 中的插值类型,支持 hbDSPCVInterpolationFlags 中的类型。
borderType
保留参数。
borderValue
保留参数。
10.3.1.5.3. CV API接口¶
10.3.1.5.3.1. hbDSPResize¶
调用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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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
调用 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
调用 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
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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¶
调用 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
调用 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 数据是否存在上述情况。

10.3.1.6. NN侧API说明¶
10.3.1.6.1. 数据类型与数据结构
10.3.1.6.1.1. 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
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¶
成员
成员名称
描述
hbDSPTensorShape
张量尺寸。
dataLayout
张量布局。
dataType
数据类型。
dataPhyAddr
张量数据物理地址。
10.3.1.6.1.4. 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¶
量化算子参数。
成员
成员名称
描述
scaleChannel
scale通道数。
zeroPointChannel
zeroPoint通道数。
scalePhyAddr
scale物理地址,其中的数据必须是float32_t类型。
zeroPointPhyAddr
zeroPoint物理地址,其中的数据必须是float32_t类型。
min
量化最小值。
max
量化最大值。
10.3.1.6.1.6. 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¶
调用Quantize API。
参数
[out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。
[in/out] dstTs 输出张量。
[in] srcTs 输入张量。
[in] quantizeParam 算子参数。
[in] rpcCtrlParam 任务控制参数,可以为任务指定运行核和任务优先级。
返回值
返回 0 则表示API成功执行,否则执行失败。
10.3.1.6.2.2. hbDSPDequantize¶
参数
[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上执行。
10.3.2. DSP运行时API¶
10.3.2.1. 数据类型与数据结构¶
10.3.2.1.1. handle_fn¶
函数指针,指向处理DSP任务的函数。
10.3.2.1.2. DSPLogLevel
DSP中打印日志的级别。
10.3.2.2. API接口¶
10.3.2.2.1. hb_dsp_set_log_level¶
DSP日志级别初始化。
10.3.2.2.2. hb_dsp_env_init¶
DSP环境初始化。
返回值
返回 0 则表示API成功执行,否则执行失败。
10.3.2.2.3. hb_dsp_start¶
启动DSP开始执行命令,实际上它从不返回。
10.3.2.2.4. hb_dsp_mem_map¶
将ARM端传入的物理内存地址映射为DSP端可读写虚拟地址。
参数
[in] ddr_address 内存物理地址。
[in] size 内存大小。
返回值
返回映射后可读写的虚拟地址。
10.3.2.2.5. hb_dsp_mem_unmap¶
与hb_dsp_mem_map成对使用,取消虚拟地址映射。
参数
[in] ddr_address 虚拟映射地址。
10.3.2.2.6. hb_dsp_register_fn¶
注册DSP op,应该在 hb_dsp_start 之前调用。
参数
[in] cmd DSP op编号。
[in] handle DSP op函数指针。
[in] latency DSP op运行时间,如果没有运行时间信息,则设置为0。
返回值
返回 0 则表示API成功执行,否则执行失败。
10.3.2.2.7. hb_dsp_unregister_fn¶
注销DSP op。
参数
[in] cmd DSP op编号。
返回值
返回 0 则表示API成功执行,否则执行失败。
10.3.2.3. CV可注册算子¶
NO. | CMD | Handle_fn |
|---|---|---|
1 | HB_DSP_RPC_CMD_CV_BILATERAL_FILTER | hb_dsp_bilateral_filter |
2 | HB_DSP_RPC_CMD_CV_BOX_FILTER | hb_dsp_box_filter |
3 | HB_DSP_RPC_CMD_CV_CANNY | hb_dsp_canny |
4 | HB_DSP_RPC_CMD_CV_CVT_COLOR | hb_dsp_cvt_color |
5 | HB_DSP_RPC_CMD_CV_CORNER_HARRIS | hb_dsp_cornerharris |
6 | HB_DSP_RPC_CMD_CV_DILATE | hb_dsp_dilate |
7 | HB_DSP_RPC_CMD_CV_EQUALIZE_HIST | hb_dsp_equalize_hist |
8 | HB_DSP_RPC_CMD_CV_ERODE | hb_dsp_erode |
9 | HB_DSP_RPC_CMD_CV_FILTER2D | hb_dsp_filter_2d |
10 | HB_DSP_RPC_CMD_CV_FLIP | hb_dsp_flip |
11 | HB_DSP_RPC_CMD_CV_GAUSSIAN_BLUR | hb_dsp_gaussian_blur |
12 | HB_DSP_RPC_CMD_CV_INTEGRAL | hb_dsp_integral |
13 | HB_DSP_RPC_CMD_CV_MEDIAN_BLUR | hb_dsp_median_blur |
14 | HB_DSP_RPC_CMD_CV_PYR_DOWN | hb_dsp_pyr_down |
15 | HB_DSP_RPC_CMD_CV_PYR_UP | hb_dsp_pyr_up |
16 | HB_DSP_RPC_CMD_CV_REMAP | hb_dsp_remap |
17 | HB_DSP_RPC_CMD_CV_RESIZE | hb_dsp_resize |
18 | HB_DSP_RPC_CMD_CV_ROI_RESIZE | hb_dsp_roi_resize |
19 | HB_DSP_RPC_CMD_CV_ROTATE | hb_dsp_rotate |
20 | HB_DSP_RPC_CMD_CV_SEP_FILTER2D | hb_dsp_sep_filter_2d |
21 | HB_DSP_RPC_CMD_CV_SOBEL | hb_dsp_sobel |
22 | HB_DSP_RPC_CMD_CV_THRESHOLD | hb_dsp_threshold |
23 | HB_DSP_RPC_CMD_CV_TRANSPOSE | hb_dsp_transpose |
24 | HB_DSP_RPC_CMD_CV_WARP_AFFINE | hb_dsp_warp_affine |
25 | HB_DSP_RPC_CMD_CV_WARP_PERSPECTIVE | hb_dsp_warp_perspective |
10.3.2.4. NN可注册算子
NO. | CMD | Handle_fn |
|---|---|---|
1 | HB_DSP_RPC_CMD_NN_DEQUANTIZE | hb_dsp_dequantize |
2 | HB_DSP_RPC_CMD_NN_QUANTIZE | hb_dsp_quantize |