rkipc的npu(iva)学习笔记 - 实践
2025-09-15 14:25 tlnshuju 阅读(30) 评论(0) 收藏 举报rkipc这里支持很多产品

详见 SDK/project/app/rkipc/rkipc/docs
比如我们用的是rv1106的开发板,在./build.sh lunch 的时候,选择luckfox_pro_max
后面 ./build.sh app的时候 就编译的是rv1106_ipc 这个产品类型
源码位置:SDK/project/app/rkipc/src/rv1106_ipc/main.c

主函数里检测rkipc-200w.ini 里的enable_npu 设置是否为1
如果开启npu 则进入iva初始化
跳到SDK/project/app/rkipc/rkipc/common/rockiva/rockiva.c 这里
globalParams.detModel |= ROCKIVA_DET_MODEL_PFP;
这里指定使用 PFP(person、face、pet)前级目标检测算法模型
initParams.baRules.areaInBreakRule[0].objType = ROCKIVA_OBJECT_TYPE_BITMASK(ROCKIVA_OBJECT_TYPE_PERSON);
// initParams.baRules.areaInBreakRule[0].objType |= ROCKIVA_OBJECT_TYPE_BITMASK(ROCKIVA_OBJECT_TYPE_FACE);
initParams.baRules.areaInBreakRule[0].objType |= ROCKIVA_OBJECT_TYPE_BITMASK(ROCKIVA_OBJECT_TYPE_PET);
假如我们不想识别人脸的话可以注释掉;
SDK/project/app/rkipc/rkipc/src/rv1106_ipc/video/video.c的rkipc_get_nn_update_osd() 函数把识别到的人体框出来,默认是没把哈基米框出来,但可以在终端中打印出识别结果,这里手动给加上
if (object->objInfo.type == ROCKIVA_OBJECT_TYPE_PERSON) {
draw_rect_2bpp((RK_U8 *)stCanvasInfo.u64VirAddr, stCanvasInfo.u32VirWidth,
stCanvasInfo.u32VirHeight, x, y, w, h, line_pixel,
RGN_COLOR_LUT_INDEX_0);
} else if (object->objInfo.type == ROCKIVA_OBJECT_TYPE_FACE) {
draw_rect_2bpp((RK_U8 *)stCanvasInfo.u64VirAddr, stCanvasInfo.u32VirWidth,
stCanvasInfo.u32VirHeight, x, y, w, h, line_pixel,
RGN_COLOR_LUT_INDEX_0);
} else if (object->objInfo.type == ROCKIVA_OBJECT_TYPE_PET) {
draw_rect_2bpp((RK_U8 *)stCanvasInfo.u64VirAddr, stCanvasInfo.u32VirWidth,
stCanvasInfo.u32VirHeight, x, y, w, h, line_pixel,
RGN_COLOR_LUT_INDEX_1);
}

rockiva.c 这里有个回调函数



坐标 xy,归一化为1-10000,要乘于图像分辨率才是真正的物体在图像中的坐标;objId是检测到的第几个物体,假如哈基米在图像中消失了,当哈基米再次出现在画面中时,objId加1;type 6对应的是哈基米 ;
浙公网安备 33010602011771号