跳到主要内容

SDK相关 - 常见问题

导航栏

当前 SDK 信息​

这是一个基于 Rockchip RV1126B 的 YOLOv5 目标检测流处理项目。

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

警告

RV1126 / RV1126B-p 注意区分

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


📁 RV1126BP SDK Linux V1.1.0 更新版 V1.2.1​

信息

新版本 V1.2.1 更新部份驱动 已经提供,可选择下载。

链接: https://pan.baidu.com/s/1Br7GJm_1y5o274LQgSFmJw?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/1Br7GJm_1y5o274LQgSFmJw?pwd=fanc 提取码: fanc

IPC 源码​

位置作用
app/rkipc/src/rv1126b_ipc/RV1126B IPC 主程序(main.c、video/、分辨率 ini)
app/rkipc/common/公共模块(编码、网络、OSD、存储、ISP 等)
external/底层依赖(camera_engine_rkaiq、mpp 等)
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/S99rkipc → RkLunch-buildroot.sh
  • 改完在 SDK 根目录:./build.sh(或单独重编 rkipc 包)

WEB 前端​

位置作用
app/ipcweb-backend/www-rkipc/前端静态页(Angular 打包产物,.js.gz / .css.gz)
app/ipcweb-backend/src/Web 后端 API(*_api.cpp、rest_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 = big → ROCKIVA_DET_MODEL_CLS8(含人形、人脸、车等)
  • small/medium → ROCKIVA_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.c 中 ROCKIVA_OBJECT_TYPE_PERSON/FACE 分支
改算法阈值/规则逻辑rockiva.c 的 sense、minObjSize、alertTime 等
人脸识别/比对(1:N)需自行接 rockiva_face_api.h(ROCKIVA_FACE_Init 等),现有 rkipc 未集成
改检测模型本身只能换 models/ 下 .data 或向 Rockchip 要新库,无源码

改完重编 rkipc、iva 包并刷机。模型安装到设备的 /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_setLdchEn、setLdchCorrectLevel、setFecEn 等
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 页面​

图像增强 → sDistortionCorrection(FEC / 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。


设备信息查询/设置​

答案先说: 这台 10.0.0.102(RV1126B-P / rkipc / IMX415)用 HTTP CGI 查/设最方便;主码流当前是 3840×2160,白平衡默认已是 autoWhiteBalance。

分辨率​

查询分辨率

# 当前编码分辨率(主/子码流)
curl -s http://10.0.0.102/cgi-bin/entry.cgi/video
curl -s http://10.0.0.102/cgi-bin/entry.cgi/video/0 # 主码流
curl -s http://10.0.0.102/cgi-bin/entry.cgi/video/1 # 子码流

# 板端配置文件(等价)
adb -s 10.0.0.102:5555 shell "grep -E '^(width|height|stream_type|output_data)' /userdata/rkipc.ini | head -40"

# 传感器实际输出(底层)
adb -s 10.0.0.102:5555 shell "media-ctl -p -d /dev/media1 | grep -E 'fmt:|crop'"

说明:
/video 返回 sResolution(如 3840*2160)。本机能力里主码流可选:3840*2160、2880*1616、1920*1080、1280*720、960*540、640*360、320*240;子码流:1280*720、640*480、352*288、320*240。

设置分辨率

# 主码流改成 1920*1080(示例;PUT 会立刻改编码参数)
curl -s -X PUT http://10.0.0.102/cgi-bin/entry.cgi/video/0 \
-H 'Content-Type: application/json' \
-d '{
"id": 0,
"sStreamType": "mainStream",
"sResolution": "1920*1080",
"sFrameRate": "30",
"sFrameRateIn": "30",
"sOutputDataType": "H.265",
"sRCMode": "VBR",
"sRCQuality": "highest",
"sSmart": "open",
"sGOPMode": "normalP",
"sH264Profile": "high",
"sVideoType": "compositeStream",
"iMaxRate": 4096,
"iMinRate": 0,
"iTargetRate": 0,
"iGOP": 60,
"iStreamSmooth": 50
}'

# 或改配置后重启 rkipc
adb -s 10.0.0.102:5555 shell '
sed -i "s/^width = 3840/width = 1920/; s/^height = 2160/height = 1080/" /userdata/rkipc.ini
# 注意:上面 sed 会同时改到 jpeg 等段,更稳妥是只改 [video.0] 段
killall rkipc; /usr/bin/RkLunch.sh &
'

说明:Web/CGI 用 PUT /video/0(主)或 /video/1(子),字段 sResolution 格式为 宽*高。改完可用 GET /video/0 确认;拉流地址仍是 rtsp://10.0.0.102:554/live/0。


白平衡 / 图像参数​

查询白平衡

# 白平衡
curl -s http://10.0.0.102/cgi-bin/entry.cgi/image/0/white-blance

# 图像总览(含白平衡、曝光、亮度对比度等)
curl -s http://10.0.0.102/cgi-bin/entry.cgi/image/0
# 或
curl -s http://10.0.0.102/cgi-bin/entry.cgi/image/white-blance

说明:当前设备已是自动白平衡:sWhiteBlanceStyle=autoWhiteBalance。可选:autoWhiteBalance、manualWhiteBalance、lockingWhiteBalance、fluorescentLamp、incandescent、warmLight、naturalLight。

设置白平衡(开启自动)

curl -s -X PUT http://10.0.0.102/cgi-bin/entry.cgi/image/0/white-blance \
-H 'Content-Type: application/json' \
-d '{
"sWhiteBlanceStyle": "autoWhiteBalance",
"iWhiteBalanceRed": 50,
"iWhiteBalanceGreen": 50,
"iWhiteBalanceBlue": 50
}'

手动白平衡示例

curl -s -X PUT http://10.0.0.102/cgi-bin/entry.cgi/image/0/white-blance \
-H 'Content-Type: application/json' \
-d '{
"sWhiteBlanceStyle": "manualWhiteBalance",
"iWhiteBalanceRed": 50,
"iWhiteBalanceGreen": 50,
"iWhiteBalanceBlue": 50
}'

说明:也可一次性改整组图像参数:PUT /image/0,body 里带 whiteBlance、exposure、imageAdjustment 等字段。网页端:http://10.0.0.102/ → 图像设置。

配置文件等价项(/userdata/rkipc.ini):

[isp.0.white_blance]
white_blance_style = autoWhiteBalance
white_blance_red = 50
white_blance_green = 50
white_blance_blue = 50

改 ini 后需重启 rkipc 才生效;优先用 CGI PUT。