09 智能视频引擎应用
本章节介绍 GK7206 的智能视频引擎(Intelligent Video Engine,IVE)应用示例 —— sample_ive。该应用演示了 IVE 的各种图像处理算法,包括 Sobel 边缘检测、Canny 边缘检测、GMM 背景建模、Motion detect(运动检测)、Od(遮挡检测)、St Lk(光流)等。
应用源码位于 SDK 目录 sample/ive/,是开发智能视频分析相关应用的参考模板。
1 应用概述
1.1 功能特性
- 多种算法:Sobel、Edge、Gmm2、MemoryTest、Motion detect、Od、St Lk、dma
- 两种数据流:FILE→FILE(需输入图片)和 VI→VENC(需 sensor)
- 灵活输入:支持从图片文件或视频流获取输入
1.2 技术参数
| 参数 | 值 |
|---|---|
index | 0~8(见下表) |
complete | 是否完整模式(1)或快速模式(0) |
encode | 是否编码输出(1)或原始输出(0) |
vo | 是否 VO 输出(1)或 VENC 输出(0) |
1.3 测试用例列表
| index | 名称 | 数据流 | index | 名称 | 数据流 |
|---|---|---|---|---|---|
| 0 | Sobel | FILE→FILE | 5 | Canny | FILE→FILE |
| 1 | Edge | FILE→FILE | 6 | Od(遮挡检测) | VI→VENC |
| 2 | Gmm2 | FILE→FILE | 7 | St Lk(光流) | FILE→FILE |
| 3 | MemoryTest | FILE→FILE | 8 | dma | FILE→FILE |
| 4 | Motion detect | VI→VENC |
1.4 目录结构
sample/ive/
├── Makefile # 构建脚本
└── sample_ive.c # 主程序2 编译与部署
2.1 前置条件
在编译本应用之前,请确保已完成以下准备工作:
- SDK 环境已搭建:参照 SDK 编译 完成交叉编译工具链和 SDK 配置
- FILE 类需输入图片到
/sd_card - VI 类需 sensor
2.2 编译应用
# 进入 sample 目录
cd <SDK_PATH>/sample
# 编译 ive 示例
make -C ive clean && make -C ive2.3 部署到板端
# 挂载 SD 卡(推荐)
mkdir -p /sd_card
mount -t vfat /dev/mmcblk1p1 /sd_card
# 使用 SCP 传输到开发板
scp sample/ive/sample_ive root@<板端IP>:/sd_card/
# 对于 FILE 类,传输输入图片
scp input.jpg root@<板端IP>:/sd_card/2.4 运行应用
# 添加执行权限
chmod +x /sd_card/sample_ive
# 进入 SD 卡目录
cd /sd_card
# FILE 类(Sobel 边缘检测)
./sample_ive 0
# VI 类(运动检测)
./sample_ive 4 1 1 02.5 预期输出
成功运行后(FILE 类),终端会输出类似以下信息:
sample_ive running
ive test index: 0
...
ive Sobel test success!
output file: /sd_card/output_sobel.yuv3 内部执行逻辑详解
3.1 应用架构
本应用采用以下架构:
FILE 类:输入图片 → IVE 处理 → 输出图片
VI 类:Sensor → VI → VPSS → IVE → VENC → RTSP 推流3.2 IVE 初始化流程
// 步骤 1:IVE 初始化
xmedia_ive_init();
// 步骤 2:创建 IVE 任务
xmedia_ive_handle_t ive_handle = xmedia_ive_create();
// 步骤 3:配置 IVE 任务
switch(index) {
case 0: // Sobel
xmedia_ve_sobel(ive_handle, &src_img, &dst_img);
break;
case 5: // Canny
xmedia_ive_canny(ive_handle, &src_img, &dst_img);
break;
// ... 其他 case
}
// 步骤 4:销毁 IVE 任务
xmedia_ive_destroy(ive_handle);
// 步骤 5:IVE 退出
xmedia_ive_exit();4 关键编程要点
4.1 Sobel 边缘检测
xmedia_ve_sobel_attr_t sobel_attr;
sobel_attr.edge_type = XMEDIA_IVE_SOBEL_EDGE_TYPE_BOTH; // 水平+垂直
sobel_attr.bit_width = 8;
xmedia_ve_sobel(ive_handle, &src_img, &dst_img, &sobel_attr);4.2 Canny 边缘检测
xmedia_ive_canny_attr_t canny_attr;
canny_attr.low_threshold = 50;
canny_attr.high_threshold = 150;
xmedia_ive_canny(ive_handle, &src_img, &dst_img, &canny_attr);4.3 GMM 背景建模
xmedia_ive_gmm_attr_t gmm_attr;
gmm_attr.max_bg_num = 3;
gmm_attr.variance_threshold = 2500;
xmedia_ive_gmm(ive_handle, &src_img, &bg_model, &fg_mask, &gmm_attr);4.4 Motion detect 运动检测
xmedia_ive_motion_detect_attr_t md_attr;
md_attr.width = 640;
md_attr.height = 480;
md_attr.threshold = 100;
xmedia_ive_motion_detect(ive_handle, &curr_img, &prev_img, &motion_result, &md_attr);5 常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| FILE 类找不到输入文件 | 输入图片未上传到 /sd_card | 将输入图片上传到 /sd_card |
| VI 类初始化失败 | Sensor 未连接 | 检查 sensor 连接和配置 |
| IVE 处理失败 | 输入图像格式不支持 | 检查输入图像格式是否为 YUV420SP |
