调试移动场景下的视觉算法,画面抖动导致的特征点丢失和误判是绕不开的难题。尤其是在机器人巡检、手持设备等场景中,物理云台的响应延迟和成本限制,使得软件层面的电子防抖(DIS)成为刚需。
Rockchip RV1126B平台内置了硬件加速的DIS模块,但在实际部署中,从摄像头接线、内核驱动加载到应用层参数配置,任何一个环节出错都会导致出图异常。本文基于 EASY-EAI-Nano-TB 开发板,记录从零开始运行DIS方案的完整实操步骤,供嵌入式视觉工程师参考。
PART.01
编译环境准备与源码构建
DIS方案依赖特定的内核驱动和用户态库,建议在灵眸提供的Docker编译环境中进行操作,以避免依赖缺失。
第一步:进入编译环境
在PC端Ubuntu系统中,启动EASY-EAI编译容器:
cd ~/develop_environment./run.sh 2404easyeai-compiler
第二步:获取Toolkit仓库
在/opt目录下克隆完整的Toolkit仓库(注意不要单独下载某个目录,以免遗漏依赖):
cd /optmkdir EASY-EAI-Toolkit && cd EASY-EAI-Toolkitgit clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-1126B.git
第三步:编译与部署
进入DIS实例目录,执行编译脚本。
cd EASY-EAI-Toolkit-1126B/Solutions/dis./build.sh all
参数说明:
./build.sh:仅编译,产物输出到Release/。
./build.sh deploy:仅部署.ko驱动和.json配置到板端。
./build.sh all:推荐。先执行deploy,再编译并将产物拷贝到板端/userdata目录。
./build.sh clear:清理build/和Release/目录。
PART.02
板端运行与效果验证
编译完成后,通过串口或SSH登录到板卡后台,执行以下步骤启动DIS。
1. 停用3A服务
DIS运行需要独占ISP资源,需先停止系统默认的rkaiq_3A服务。
systemctl stop rkaiq_3A.service# 如需永久禁用,执行 systemctl disable rkaiq_3A.service
2. 加载内核驱动
插入DIS所需的FEC驱动模块。
cd /userdata/Solu/disinsmod video_rkfec.ko
3. 运行DIS例程
执行生成的dis可执行文件,指定分辨率、IQ文件及配置文件。
./dis -w 2688 -h 1520 -a /etc/iqfiles/ -r ./sc450ai_CRK4F4209_dis.json
-w: 视频宽度
-h: 视频高度
-a: AIQ IQfiles路径
-r: DIS配置JSON文件路径(必需)
4. 预览效果
运行成功后,终端会打印RTSP端口号。使用VLC播放器通过网络串流(如rtsp://<板卡IP>:8554/dis)进行预览。此时晃动镜头,可直观观察到画面的稳定效果。
PART.03
开发指南:工程结构与CMake解析
对于需要在DIS基础上进行二次开发的工程师,理解Toolkit的工程结构至关重要。
工程目录结构
一个标准的Solution实例包含以下核心元素:
build.sh:编译部署脚本。
CMakeLists.txt:CMake工程管理文件。
src/:存放业务源代码(如main.c)。
include/:存放头文件。
libs/:存放第三方预编译库(.a或.so)。
CMakeLists.txt 逻辑拆解
为了适配嵌入式交叉编译,CMakeLists.txt通常分为四个逻辑块:
环境配置: 设置CMake最低版本,定义CMAKE_SYSTEM_NAME(如Linux),导入cross.cmake工具链文件,判断是否启用交叉编译。
API配置: 引入灵眸easyeai-api组件,配置头文件路径(api_inc)、源码路径(api_srcs)及链接库(sysLib_list)。
第三方库配置: 配置自定义的第三方库。通过link_directories指定库路径,通过target_include_directories指定头文件路径,通过aux_source_directory递归添加src目录下的源文件。
本方案配置: 将所有的源文件、头文件和库链接成一个可执行目标。
build.sh 脚本逻辑
路径定位: 脚本首先获取当前目录的绝对路径(SHELL_FOLDER),便于后续部署。
清除逻辑: 当传入参数为clear时,删除build和Release文件夹。
编译逻辑: 调用cmake生成Makefile并执行make,随后将生成的驱动、配置文件和可执行文件拷贝至/mnt/userdata(板卡映射目录)。
写在最后
理解了上述数据流,也就掌握了DIS方案的核心逻辑:原始图像数据从Sensor经由MIPI CSI双通道进入VIPCAP,经过video_rkfec驱动模块进行硬件级的防抖矫正,最终交由应用层进行编码或算法分析。
基于此逻辑,我们在EASY-EAI-Toolkit中将驱动加载、IQ文件配置与应用层解耦。这意味着你可以很方便地复用这套框架——无论是更换不同分辨率的Sensor,还是在DIS稳定后的视频流上叠加自研的AI算法(如目标检测或人脸识别),只需调整CMakeLists.txt中的源文件引用和build.sh的部署逻辑,无需从头搭建底层通路。

以上工程框架已在EASY-EAI-Nano-TB开发板上完成验证。关于DIS算法内部参数的动态调节(如基于陀螺仪数据的融合防抖),以及多Sensor同步触发机制,我们将在后续的深度解析文章中探讨。
更多关于RV1126B平台的视觉方案与API调用细节,欢迎访问灵眸科技官网查阅。
全部0条评论
快来发表一下你的评论吧 !