本章节介绍 GK7206 的综合快速演示应用示例 —— sample_quickstart。该应用演示了端到端的完整 AI 视觉管线,包括视频采集、VPSS 处理、VENC 编码、NPU 人脸检测以及 Web 展示。
应用源码位于 SDK 目录 sample/quickstart/,是一个快速上手的综合示例,适合了解 GK7206 的完整功能。
| 参数 | 值 |
|---|---|
传感器分辨率 |
2560 × 1440(SC465SL) |
检测输入分辨率 |
640 × 360 |
NPU 推理帧率 |
~15 FPS |
Web 服务端口 |
80 |
视频编码格式 |
MJPEG |
模型格式 |
.xmm(GK7206 NPU 专用格式) |
sample/quickstart/
├── Makefile # 构建脚本
├── sample_quickstart.c # 主程序
└── models/ # NPU 模型文件(需单独下载)
└── person_detect.xmm # 人体检测模型
在编译本应用之前,请确保已完成以下准备工作:
models/ 目录# 进入 sample 目录
cd <SDK_PATH>/sample
# 编译 quickstart 示例
make -C quickstart clean && make -C quickstart
# 挂载 SD 卡(推荐)
mkdir -p /sd_card
mount -t vfat /dev/mmcblk1p1 /sd_card
# 使用 SCP 传输到开发板
scp sample/quickstart/sample_quickstart root@<板端IP>:/sd_card/
# 传输 NPU 模型
scp -Or sample/quickstart/models root@<板端IP>:/sd_card/
# 添加执行权限
chmod +x /sd_card/sample_quickstart
# 进入 SD 卡目录
cd /sd_card
# 运行
./sample_quickstart
成功运行后,终端会输出类似以下信息:
sample_quickstart running
sensor: 2560x1440 @ 30fps
npu: Initializing...
npu: Loading person_detect.xmm
npu: Model loaded!
pipeline: VI→VPSS→VENC(MJPEG) + VPSS→NPU(640x360)
web: http://192.168.1.100/
rtsp://192.168.1.100:554/livestream/0
浏览器访问 http://<板端IP>/ 可以看到实时的人脸检测画面。
本应用采用以下架构:
Sensor → VI → VPSS → VENC(MJPEG) → Web 展示
↓
NPU 推理 → 检测结果叠加
// 步骤 1:初始化视频管线
sample_comm_sys_init(&sys_config);
sample_comm_isp_init();
sample_comm_vi_start(...);
sample_comm_vpss_start(...);
sample_comm_venc_start(...);
// 步骤 2:初始化 NPU
init_npu();
// 步骤 3:启动 NPU 推理线程
pthread_create(&npu_thread, NULL, npu_inference_thread, NULL);
// 步骤 4:启动 Web 服务器
web_server_run();
xmedia_cl_graph graph;
xmedia_u64 work_phy, weight_phy;
void *work_buf, *weight_buf;
// 查询模型所需内存大小
xmedia_cl_graph_querysize_from_file("models/person_detect.xmm",
&worksize, &weightsize);
// 分配 MMZ 内存
work_buf = xmedia_mmz_alloc_map("npu_work", &work_phy, worksize);
weight_buf = xmedia_mmz_alloc_map("npu_weight", &weight_phy, weightsize);
// 加载模型
xmedia_cl_graph_loadmodel_from_file_withmem(&ctx, "models/person_detect.xmm",
work_buf, worksize, weight_buf, weightsize, &graph);
void *npu_inference_thread(void *arg)
{
while (running) {
// 从 VPSS 获取帧
xmedia_vpss_acquire_ochn_frame(pipe, ochn, &frame, timeout);
// 前处理(YUV → RGB)
yuv420sp_to_rgb888(frame.y_vir, frame.c_vir, rgb_buf, width, height);
// NPU 推理
xmedia_cl_graph_process(graph);
// 后处理(解析检测结果)
parse_detections(output_buf, &detections);
// 释放帧
xmedia_vpss_release_ochn_frame(pipe, ochn, &frame);
}
}
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
svp create fail |
NPU 模型文件缺失或格式错误 | 检查模型文件是否存在且格式正确 |
| 检测结果不准 | 模型输入图像格式错误 | 检查 YUV→RGB 转换是否正确 |
| 内存不足(OOM) | 26 MB 跑 NPU+视频编码易 OOM | 挂载 SD 卡,释放内存 |