跳到主要内容

常见问题 - SDK相关

当前 SDK 信息

这是一个基于 Rockchip RV1126BYOLOv5 目标检测流处理项目

通过查看项目结构和关键文件,可以得出以下信息:

警告

RV1126 / RV1126B-p 注意区分

跳转到 RV1126 SDK | 跳转到 RV1126B-p SDK


📁 RV1126BP SDK Linux V1.1.0

一般情况下选择,当前标准版 SDK

推流功能 已经提供

链接: https://pan.baidu.com/s/1lII38XSRn42JqwvwLTyyAg?pwd=fanc

提取码: fanc


编译方式参考

RV1126B-p 编译固件


📋 项目摘要

条目内容
项目类型Rockchip RV1126B 平台嵌入式开发 + AI 视觉(YOLOv5)
核心芯片RV1126B(Rockchip 的 AIoT SoC,带 NPU)
AI 模型YOLOv5(目标检测)
操作系统/构建系统Buildroot, Debian, Ubuntu, Yocto(多系统支持)
关键文件Makefile, build.sh, kernel, rkflash.sh, RV1126B_YOLOV5_STREAM_PLAN.md

📁 主要目录结构说明

目录作用
app/应用程序代码(可能包含 YOLOv5 推理、视频流处理等)
buildroot/Buildroot 构建系统配置
debian/, ubuntu/, yocto/不同 Linux 发行版的根文件系统
device/设备树、板级配置
docs/项目文档
external/第三方依赖库
hal/硬件抽象层(Rockchip HAL)
kernel-6.1/Linux 内核源码(版本 6.1)
prebuilts/预编译工具链/二进制文件
rkbin/Rockchip 固件/二进制文件(BL31, DDR init 等)
rtos/实时操作系统组件(RV1126B 通常有 MCU 核)
tools/工具脚本
u-boot/U-Boot 引导加载器

🔍 关键文件备注

  • RV1126B_YOLOV5_STREAM_PLAN.md — 可能是该项目的核心说明/计划文档,建议先查看此文件了解项目目标。
  • build.sh — 主构建脚本。
  • rkflash.sh — 烧录脚本(将固件刷入 RV1126B 板子)。
  • kernel — 可能是指向 kernel-6.1 的软链接。

常用代码位置

RV1126BP SDK Linux V1.1.0

一般情况下选择,当前标准版 SDK

推流功能 已经提供

链接: https://pan.baidu.com/s/1lII38XSRn42JqwvwLTyyAg?pwd=fanc 提取码: fanc

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,与畸变算法本身无关。

系统调试

NPU 负载查看

NPU 频率调整

root@rv1126bp-buildroot:/sys/class/devfreq# cat 21f40000.rkvenc/available_governors 
venc_ondemand rknpu_ondemand userspace simple_ondemand
root@rv1126bp-buildroot:/sys/class/devfreq# cat 22000000.npu/available_governors
venc_ondemand rknpu_ondemand userspace simple_ondemand

NPU 对应的 devfreq 节点是 22000000.npu。视频编码器 21f40000.rkvenc 的节点可以忽略。

你列出的可用调频策略(governors)有:

  • venc_ondemand:视频编码专用(不适合 NPU)
  • rknpu_ondemand推荐,根据 NPU 负载自动调频
  • userspace:手动固定频率
  • simple_ondemand:通用负载调频

✅ 推荐操作:使用 rknpu_ondemand 自动调频(无需干预)

大部分情况下保持这个策略即可,NPU 会在空闲时自动降频、推理时自动升频:

echo rknpu_ondemand > /sys/class/devfreq/22000000.npu/governor

然后查看当前策略是否生效:

cat /sys/class/devfreq/22000000.npu/governor

🔧 手动固定频率(调试用)

  1. 查看支持的频率列表

    cat /sys/class/devfreq/22000000.npu/available_frequencies

    根据 RV1126 规格,常见档位如 300MHz、400MHz、500MHz、600MHz、700MHz、800MHz 等(以实际输出为准)。

  2. 改为 userspace 模式

    echo userspace > /sys/class/devfreq/22000000.npu/governor
  3. 设置目标频率(例如 600000000 Hz):

    echo 600000000 > /sys/class/devfreq/22000000.npu/userspace/set_freq
  4. 确认当前频率

    cat /sys/class/devfreq/22000000.npu/cur_freq

📌 注意事项

  • 手动固定频率后,NPU 将不再根据负载自动调节,可能会导致过热或不必要的功耗,建议调试完成后恢复 rknpu_ondemand
  • 如果你的应用是用 RKNN API 跑模型,通常驱动会自动管理频率,无需手动调整。只有需要性能压测或功耗优化时才需干预。

如果你想查看当前实际运行的频率(即使是通过 devfreq 调整后的),依然可以用你之前找到的 debugfs 路径:

cat /sys/kernel/debug/clk/clk_npu_pll/clk_rate

或者直接读取 devfreq 的 cur_freq