跳到主要内容

常见问题 - SDK相关

常用代码位置

IPC 源码

位置作用
app/rkipc/src/rv1126b_ipc/RV1126B IPC 主程序(main.cvideo/、分辨率 ini)
app/rkipc/common/公共模块(编码、网络、OSD、存储、ISP 等)
external/底层依赖(camera_engine_rkaiqmpp 等)
buildroot/configs/rockchip_rv1126b_ipc_defconfigIPC 产品 defconfig
buildroot/board/rockchip/rv1126b/fs-overlay-ipc/启动脚本等 overlay

怎么改:

  • 业务逻辑 → rv1126b_ipc/ + common/
  • 分辨率/码流参数 → rkipc-*.ini
  • 开机启动 → fs-overlay-ipc/etc/init.d/S99rkipcRkLunch-buildroot.sh
  • 改完在 SDK 根目录:./build.sh(或单独重编 rkipc 包)

WEB 前端

位置作用
app/ipcweb-backend/www-rkipc/前端静态页(Angular 打包产物,.js.gz / .css.gz
app/ipcweb-backend/src/Web 后端 API*_api.cpprest_api.cpp
app/ipcweb-backend/ipcweb-env-*/etc4oem/nginx/Nginx 配置

设备上部署路径:/usr/www(由 buildroot 的 ipcweb-backend.mk 安装)。

怎么改:

  • 改页面/UI:SDK 里只有编译后的 www-rkipc没有 Angular 源码;需向 Rockchip 要前端工程,或只能直接改静态资源(难维护)
  • 改接口/功能:改 ipcweb-backend/src/*_api.cpp,后端通过 socket 与 rkipc 通信
  • 改完重编 ipcweb-backend 包并刷机

关系: 浏览器 → Nginx → entry.cgi(ipcweb-backend)→ socket → rkipc


IVA 人形/人脸

  1. 算法库(闭源,只能调 API)
路径内容
external/iva/librockiva/rockiva-rv1126b-Linux/include/API 头文件
rockiva_common.h类型定义:ROCKIVA_OBJECT_TYPE_PERSON / FACE
rockiva_det_api.h目标检测
rockiva_ba_api.h行为分析(区域入侵等)
rockiva_face_api.h人脸识别/比对(rkipc 当前未用
external/iva/librockiva/.../lib*.so预编译库
external/iva/models/rockiva_data_rv1126b/模型(iva_object_detection_*.data
  1. 应用层(可改源码,RV1126B IPC 主要在这)
路径作用
app/rkipc/common/rockiva/rockiva.c初始化、选模型、配置检测类型(人形+人脸)
app/rkipc/src/rv1126b_ipc/video/video.c送帧给 IVA、画人形/人脸框
app/rkipc/src/rv1126b_ipc/rkipc-*.ini[event.regional_invasion] 参数
external/samples/example/common/sample_comm_iva.c官方示例

Web 侧区域入侵配置:app/ipcweb-backend/src/event_api.cpp


  1. 当前 IPC 怎么用人形/人脸

rkipc 走的是 BA(行为分析)+ 检测,不是单独的人脸识别模块:

  • rockiva_model_type = bigROCKIVA_DET_MODEL_CLS8(含人形、人脸、车等)
  • small/mediumROCKIVA_DET_MODEL_PFP(人形、人脸、宠物)
  • 规则里同时开启:
	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);

画框在 video.c:人形一种颜色,人脸另一种颜色。


  1. 应该怎么改
需求改哪里
开关/灵敏度/检测区域rkipc-*.ini[event.regional_invasion]
模型大小(精度/性能)ini 里 rockiva_model_type(big/small/medium)
只检人形、不检人脸rockiva.c 里去掉 ROCKIVA_OBJECT_TYPE_FACE 的 bitmask
改框颜色/样式rv1126b_ipc/video/video.cROCKIVA_OBJECT_TYPE_PERSON/FACE 分支
改算法阈值/规则逻辑rockiva.csenseminObjSizealertTime
人脸识别/比对(1:N需自行接 rockiva_face_api.hROCKIVA_FACE_Init 等),现有 rkipc 未集成
改检测模型本身只能换 models/.data 或向 Rockchip 要新库,无源码

改完重编 rkipciva 包并刷机。模型安装到设备的 /usr/lib/(与 ini 中 rockiva_model_path 一致)。

两种抗畸变方式

有镜头抗畸变相关代码。
RV1126B-P 走与 RV1126B 同一套软件(rv1126bp_ipc defconfig 的 RK_BUILDROOT_BASE_CFG="rv1126b_ipc"),畸变校正逻辑共用。

模式说明硬件/模块
LDCH横向镜头畸变校正(轻量)ISP / RKAIQ
FEC基于标定文件的畸变校正(鱼眼/大畸变镜头)GDC + 标定 ini

默认均为 close


代码位置

应用层(主要改这里)

文件作用
app/rkipc/common/isp/rv1126b/isp.crk_isp_set_distortion_correction()rk_isp_set_ldch_level()rk_isp_set_fec_level()
app/rkipc/src/rv1126b_ipc/video/video.cFEC 时创建 GDC 通道、加载 fec_ini_file
app/rkipc/src/rv1126b_ipc/rkipc-*.ini配置项
app/ipcweb-backend/src/image_api.cppWeb 设置畸变参数

底层算法/驱动

路径作用
external/camera_engine_rkaiq/rkaiq/include/uAPI2/rk_aiq_uapi1_rv1126b.hrk_aiq_uapi_setLdchEnsetLdchCorrectLevelsetFecEn
external/camera_engine_rkaiq/IspFec/fec_calib/*.ini镜头标定文件(安装到 /usr/share/fec_calib/
external/camera_engine_rkaiq/rkaiq/algos/afec/FEC 算法
kernel-6.1/drivers/media/platform/rockchip/fec/FEC 内核驱动

文档

  • app/rkipc/docs/Rockchip_Developer_Guide_Linux_RKIPC_CN.md(RV1126B IPC 数据流、FEC/LDCH 说明)

用法

1. 改 ini(最直接)

app/rkipc/src/rv1126b_ipc/rkipc-xxx-buildroot.ini[isp.0.enhancement]

distortion_correction = LDCH   ; 或 FEC / close
ldch_level = 50 ; 0~100,仅 LDCH 有效
fec_level = 50 ; 0~100,仅 FEC 有效
fec_ini_file = /usr/share/fec_calib/sc450ai_CRK4F4209_ldc.ini ; FEC 必填

已有标定文件示例:

  • sc450ai_CRK4F4209_ldc.ini
  • sc850sl_CMK-OT2115-PC1_ldc.ini
  • imx415_CMK-OT1948-PV1_ldc.ini
  • sc200ai_CRK2F3537-V2_ldc.ini

2. Web 页面

图像增强 → sDistortionCorrectionFEC / LDCH / close)+ iLdchLevel / iFecLevel

3. 运行时 API

rk_isp_set_distortion_correction(0, "LDCH");  // 或 "FEC"
rk_isp_set_ldch_level(0, 50);
rk_isp_set_fec_level(0, 50);

注意: 切换 distortion_correction 会触发 rk_video_restart() 重建视频链路。

4. FEC 与 LDCH 数据流差异

  • LDCH:VI → VPSS online(开销小)
  • FEC:VI → GDC → VPSS offline(需 fec_ini_file,开销更大)

FEC 开启时 video.c 会走 rkipc_vi_gdc_vpss_init()


换镜头 / RV1126B-P 新板子怎么做

  1. 小畸变普通镜头 → 用 LDCH,调 ldch_level 即可。
  2. 大畸变/鱼眼 → 用 FEC,需为新镜头生成标定 ini(external/camera_engine_rkaiq/IspFec/ 工具链),放到 /usr/share/fec_calib/ 并在 ini 里指定路径。
  3. 精细系数也可在 RKAIQ IQ JSON 的 ldc 段配置(sw_ldcC_lensDistor_coeff 等)。

RV1126B-P 板级差异主要在 kernel-6.1/arch/arm64/boot/dts/rockchip/rv1126bp-evb*.dts,与畸变算法本身无关。