第三章 RK AIQ软件框架:架构、插件与工具链
好,咱们进入第三章。这一章我打算聊聊RK AIQ的软件框架。说实话,很多刚接触RK平台的工程师,一上来就被AIQ的代码结构搞懵了。代码量大,目录深,不知道从哪看起。
我个人习惯是,先看框架,再看细节。就像盖房子,你得先知道哪是承重墙,哪是隔断,才能决定怎么装修。AIQ也是一样,搞懂它的架构设计、插件机制和工具链,后面调参才能得心应手。
3.1 AIQ架构设计:分层与解耦
RK AIQ的全称是Rockchip Artificial Intelligence & Image Quality。说白了,它就是把传统的ISP调优和AI算法揉在了一起。但揉得好不好,关键看架构。
我画了一张架构分层图,你先有个整体印象:
你看,从上到下分了五层。每一层只干自己的事,接口是固定的。这样做的好处是——你想换一个AE算法?没问题,只要实现插件接口就行,核心调度层和HAL层完全不用动。
我在项目中遇到过最典型的例子:客户想用自己的AE算法,但又不想动底层驱动。按照这个架构,我们只需要写一个新的AE插件,注册进去,调度层自动就接管了。前后只花了两天时间。
3.2 算法插件机制:动态加载与注册
插件机制是AIQ的灵魂。你想想看,ISP调优涉及十几个算法模块,如果全写死在一个库里,那维护成本得多高?
RK的做法是:每个算法独立编译成一个动态库(.so),通过统一的接口注册到AIQ框架中。框架启动时,扫描指定目录下的插件,按优先级加载。
核心接口就三个:
// 插件必须实现的接口
typedef struct {
const char* name; // 算法名称,如 "ae_algo"
int32_t priority; // 优先级,数值越小优先级越高
int32_t (*init)(void* cfg); // 初始化
int32_t (*run)(void* in, void* out); // 每帧处理
int32_t (*deinit)(void); // 反初始化
} algo_plugin_t;
// 注册宏
#define REGISTER_ALGO_PLUGIN(plugin) \
__attribute__((constructor)) void register_##plugin() { \
aiq_register_plugin(&plugin); \
}
嗯,这里要注意:__attribute__((constructor)) 这个GCC扩展,保证了库加载时自动执行注册函数。你不需要手动调用任何注册代码。
我曾经踩过一个坑:插件注册成功了,但run函数一直没被调用。查了两天才发现,是优先级设得太低,被其他算法模块的耗时任务阻塞了。调度层是按优先级和时间片轮转的,优先级低的算法可能几帧都轮不到一次。
3.3 Tuning工具链介绍:从离线到在线
工具链这块,RK提供了两套方案:离线调优工具和在线调试工具。我分别说一下。
| 对比项 | 离线调优工具 | 在线调试工具 |
|---|---|---|
| 运行环境 | PC端(Windows/Linux) | 设备端(RK平台) |
| 数据来源 | 预先采集的RAW图 | 实时摄像头数据流 |
| 调优方式 | 批量处理 + 参数扫描 | 实时调节 + 即时预览 |
| 适用场景 | 前期标定、参数初版 | 现场微调、问题复现 |
| 输出产物 | XML/JSON参数文件 | 直接写入设备寄存器 |
离线工具我用的最多的是 RKISP_Tuner。它支持加载RAW图,然后模拟ISP pipeline跑一遍,你可以逐个模块调参数,看效果。调完了导出XML,烧到设备里就行。
在线工具是 RKAIQ_Online,通过adb或网络连接设备,实时拉取每一帧的统计信息,你改一个参数,下一帧就能看到效果。这个在调试AE收敛速度、AWB色温跳变时特别有用。
3.4 工具链工作流程
我整理了一个典型的工作流程,你照着走,基本不会乱:
- 采集RAW图:用RK提供的抓图工具,在不同光照、不同场景下采集RAW数据。至少采集20组以上。
- 离线标定:在PC上用RKISP_Tuner加载RAW图,做LSC、BLC、AWB等基础标定。生成标定文件。
- 参数初调:在离线工具里调整各模块参数,直到主观效果满意。导出XML参数文件。
- 烧录验证:把XML文件烧到设备上,跑实际场景,看效果是否符合预期。
- 在线微调:如果发现某个场景有问题(比如室内暖光下偏色),用RKAIQ_Online连接设备,实时微调对应参数。
- 固化参数:把最终调好的参数合并到固件中,发布。
这个流程我走了不下几十遍了。刚开始做的时候,我总想跳过离线标定,直接在线调。结果发现,在线调出来的参数换个场景就崩了。离线标定虽然麻烦,但它是参数鲁棒性的基础。
核心要点:AIQ框架的插件机制让算法模块解耦,工具链让调优过程可追溯。你不需要理解每一行底层代码,但必须清楚数据是怎么从sensor流到算法、再流回硬件的。这个数据流搞明白了,调优就成功了一半。
好了,这一章的内容就这些。框架、插件、工具链,这三样东西是你在RK平台上吃饭的碗。碗端稳了,后面才能谈怎么炒菜。