AIISP 快速入门
1. 概述与作用
本样例演示 Hi3516CV610 上 AIISP(AI Image Signal Processing)子系统的 AIBNR 算法调用流程,隶属于 AI 图像处理域,解决低照度、高 ISO 场景下 RAW 域噪声难以用传统滤波消除的问题,通过 AI 模型对时域参考帧与当前帧联合降噪,输出 H.265 码流。
专业名词与缩写:
- AIISP — AI Image Signal Processing,海思基于 AI 算法增强画质的 ISP 子系统
- AIBNR — AI Bayesian Noise Reduction,AI 贝叶斯降噪,对 RAW 域噪声做 AI 模型降噪
- NLC — Non-Linear Correction,非线性校正
- SFS — Spatial Filter Strength,空间滤波强度,默认 31
- WDR — Wide Dynamic Range,宽动态,本样例默认关闭
- Pro mode — 高 ISO 模式,使用 pro 模型,FPS 降到 5
- Ref mode — 参考帧模式,时域降噪
- Line mode — 行模式,12 fps
说明:
本文默认
sensor为HY006-3814-0011,如需适配新sensor,请参考《Sensor 调试指南》和《Sensor适配说明》
2. 执行准备
在编译本样例之前,请参照Hi3516CV610环境搭建指南和快速上手指南完成编译环境的搭建。
2.1 编译
进入样例目录执行 make 即可完成编译:
编译成功之后,在当前目录下会生成一个sample_aiisp的可执行文件,可以放社区支持的开发板上运行。
2.2 加载 KO
ko加载脚本位于 output/mpp/ko/load_ko,有两个脚本,load3516cv610_20s和load3516cv610_20s_debug。区别为load3516cv610_20s_debug脚本会打开 logmpp_show=1(日志记录)、proc_show=1(proc信息打印),并将 mem_process_isolation 置为 0(不启用进程间mmz隔离)。
由于当前版本不支持进程间mmz隔离,因此需要在load3516cv610_20s脚本中将 mem_process_isolation 置为 0或者使用load3516cv610_20s_debug脚本,此处以load3516cv610_20s_debug脚本为例,20s内存大小为128MB,默认分配为 32MB OS、96MB MMZ,加载命令为:
可以通过-h命令查看具体用法:
./load3516cv610_20s_debug -h
Usage: ./load3516cv610_20s_debug [-option] [-sensor0~1]
options:
-i insert modules
-r remove modules
-a remove modules first, then insert modules
-sensor0~1 sensor_name config sensor type [default: hy006_3814_0011]
-mmz_start config MMZ start addr [default: 0x42000000]
-mmz_size config MMZ mem size [unit: M, default: 96M]
-ir_auto config ir_auto enable [default: 0]
-profile config sys_profile [default: 0]
-h help information
Available sensors:hy006_3814_0011 bt1120/bt656/bt601
for example: ./load3516cv610_20s_debug -i -sensor0 hy006_3814_0011 -sensor1 hy006_3814_0011 -mmz_start 0x42000000 -mmz_size 96M -ir_auto 1
如果需要调整os和mmz的大小,需要参考《内存布局调整指南》对内存大小进行调整。
如果是使用社区默认提供的镜像,这些ko已经打包到文件系统中,烧录到单板上后位于
/ko目录下,在系统启动后会自动加载这些ko。
2.3 运行时依赖
在运行样例前,需要提前准备:
- 指定运行时依赖的so库路径
MPP样例依赖的so库位于soc/libs/musl下,需要将该目录下的so库拷贝到开发板上(或将这些so库所在的目录挂载到开发板上),并指定运行时依赖库的环境变量,假设这些so库位于/mnt/libs/,执行如下命令:
```shell
export LD_LIBRARY_PATH=/mnt/libs/:$LD_LIBRARY_PATH
```
如果是使用社区默认提供的镜像,这些so库已经打包到文件系统中,烧录到单板上后位于
/usr/lib目录下,该目录是系统默认搜索目录,不需要执行export LD_LIBRARY_PATH命令去指定。
- 启动MPP服务
当前MPP媒体模块处于用户态,通过一个独立进程提供相关接口的调用服务,该进程位于samples/mpp/sdk_server下,执行如下命令即可生成sdk_server可执行文件:
```shell
cd samples/mpp/sdk_server && make
```
在单板上执行./sdk_server &即可启动MPP服务。
- sdk_server同样依赖
soc/libs/musl下的so库,因此也需要参照上述export LD_LIBRARY_PATH指定路径;- 如果是使用社区默认提供的镜像,sdk_server进程已经打包到文件系统中,烧录到单板上后位于
/usr/bin目录下,并在系统启动时会自动启动sdk_server。
- 样例运行时候需要的资源文件
运行时所需要的模型文件位于output/mpp/model/aiisp/aibnr目录下,模型文件按照如下规则命名:
output/mpp/model/aiisp/aibnr/aibnr_model_<W>x<H>.bin
output/mpp/model/aiisp/aibnr/aibnr_model_<W>x<H>_high_iso.bin
output/mpp/model/aiisp/aibnr/aibnr_model_<W>x<H>_pro.bin
注意:需要将模型文件放置到与
sample_aiisp样例可执行文件一个目录下。本样例默认使用的Sensor对应W=2560、H=1440,如果模型文件找不到,样例运行时会报错(如realpath file failed),程序异常退出。
2.4 运行样例
调用语法为 ./sample_aiisp <case_id>,case_id 取值为 0–1。可以执行./sample_aiisp -h查看用法。

3. 支持的 Case 列表
调用语法:./sample_aiisp <case_id>
| 序号 | 调用示例 | 简述 | 备注 |
|---|---|---|---|
| 0 | ./sample_aiisp 0 |
普通模式,加载xxx.bin和xxx_high_iso.bin,FPS 12 | 默认 case |
| 1 | ./sample_aiisp 1 |
pro模式,加载xxx_pro.bin,FPS 5 | 高 ISO 场景 |
3.1 代码流程
-
启动数据流通路,从前往后分别启动各媒体模块(VI、VPSS、VENC......)。
-
初始化aibnr模块,详细使用参考接口
ss_mpi_aibnr_init。 -
加载aibnr的模型文件,详细使用参考接口
ss_mpi_aibnr_load_model。 -
设置aibnr的算法相关配置参数,详细使用请参考接口
ss_mpi_aibnr_set_cfg。 -
使能aibnr的数据流开关,详细使用请参考接口
ss_mpi_aibnr_enable。 -
设置aibnr的属性,详细使用请参考接口
ss_mpi_aibnr_set_attr。 -
停止业务时,需要先关闭aibnr数据流开关,再卸载aibnr的模型文件,最后去初始化aibnr模块,详细使用请参考接口
ss_mpi_aibnr_disable、ss_mpi_aibnr_unload_model、ss_mpi_aibnr_exit。
说明
本章节涉及的相关接口均参考《AIISP开发参考》“AIBNR API参考”章节。
需要配置profile=0或者profile=2,配置方法为
该功能由sdk_server服务进程提供,默认情况下profile=0,因此需要打开它重新编译sdk_server,具体方法如下
1)修改文件
samples/mpp/common/sdk_init函数sys_init,修改后如下:static td_s32 sys_init(td_void) { td_u32 sys_profile = 0; /* 或者 2 */ return ot_sys_mod_init(sys_profile); }2)进入
samples/mpp/sdk_server执行make clean;make重编sdk_server3)将新的
sdk_server替换掉单板当前运行的sdk_server后,重新启动sdk_server
- 线性普通模型推荐用于12帧场景,线性时域pro模型推荐用于5帧场景。
具体操作流程如下图所示。

3.2 case 0 - AIBNR线性普通模式
线性普通模式下,通过高ISO模型和低ISO模型的切换,实现不同照度下的图像清晰度提升。
调用命令
第一次按回车键使能AIBNR
第二次按回车键选择模型0
第三次按回车键选择模型1
第四次按回车键选择auto模式
第五次按回车键去使能AIBNR
第六次按回车键退出用例
执行结果验证
1.sample同级目录下会生成码流文件stream_chn0.h265;
2.控制台串口无报错打印,输出:
软件配置流程
可参考代码流程章节,其中加载的aibnr模型包含高ISO和低ISO两种模型,既可以手动指定使用高ISO模型或低ISO模型,又可以根据配置的ISO段自动选择模型,参考接口ss_mpi_aibnr_set_model_attr。
数据流

3.3 case 1 - AIBNR线性时域模式
时域模型细节表现更好,可以优化普通模型细节粗的问题。
调用命令
第一次按回车键使能AIBNR
第二次按回车键去使能AIBNR
第三次按回车键退出用例
执行结果验证
1.sample同级目录下会生成码流文件stream_chn0.h265;
2.控制台串口无报错打印,输出:
软件配置流程
可参考代码流程章节,其中加载的aibnr模型是pro时域模型。
数据流
