本章节介绍 GK7206 的智能视频引擎(Intelligent Video Engine,IVE)应用示例 —— sample_ive。该应用演示了 IVE 的各种图像处理算法,包括 Sobel 边缘检测、Canny 边缘检测、GMM 背景建模、Motion detect(运动检测)、Od(遮挡检测)、St Lk(光流)等。
应用源码位于 SDK 目录 sample/ive/,是开发智能视频分析相关应用的参考模板。
| 参数 | 值 |
|---|---|
index |
0~8(见下表) |
complete |
是否完整模式(1)或快速模式(0) |
encode |
是否编码输出(1)或原始输出(0) |
vo |
是否 VO 输出(1)或 VENC 输出(0) |
| 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 |
sample/ive/
├── Makefile # 构建脚本
└── sample_ive.c # 主程序
在编译本应用之前,请确保已完成以下准备工作:
/sd_card# 进入 sample 目录
cd <SDK_PATH>/sample
# 编译 ive 示例
make -C ive clean && make -C ive
# 挂载 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/
# 添加执行权限
chmod +x /sd_card/sample_ive
# 进入 SD 卡目录
cd /sd_card
# FILE 类(Sobel 边缘检测)
./sample_ive 0
# VI 类(运动检测)
./sample_ive 4 1 1 0
成功运行后(FILE 类),终端会输出类似以下信息:
sample_ive running
ive test index: 0
...
ive Sobel test success!
output file: /sd_card/output_sobel.yuv
本应用采用以下架构:
FILE 类:输入图片 → IVE 处理 → 输出图片
VI 类:Sensor → VI → VPSS → IVE → VENC → RTSP 推流
// 步骤 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();
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);
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);
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);
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);
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| FILE 类找不到输入文件 | 输入图片未上传到 /sd_card | 将输入图片上传到 /sd_card |
| VI 类初始化失败 | Sensor 未连接 | 检查 sensor 连接和配置 |
| IVE 处理失败 | 输入图像格式不支持 | 检查输入图像格式是否为 YUV420SP |