DLA Demo 程序说明¶
1. 功能场景介绍¶
1.1 程序概述¶
DLA这一系列算法是sgs对开源模型进行优化后的板端算法库与头文件,DLA demo 是基于算法库相关的演示程序。
1.2 Demo 列表¶
| Demo | 功能描述 | 目录 |
|---|---|---|
| det | 目标检测 - 多路视频实时目标检测与显示 | demo/dla/det |
| fr | 人脸识别 - 人脸注册与识别 | demo/dla/fr |
| mot | 多目标跟踪 - 视频中人员/车辆的实时检测与跟踪 | demo/dla/mot |
| reid | 以图搜图 - 人员/车辆重识别 | demo/dla/reid |
| ret | 以文搜图 - 文本检索图像 | demo/dla/ret |
| sgptv | 以图生文 - 图片自动生成文字描述 | demo/dla/sgptv |
| sot | 单目标跟踪 - 视频中单一人员/车辆的自动锁定与跟踪 | demo/dla/sot |
| vret | 文搜视频 - 文本检索视频并定位匹配片段 | demo/dla/vret |
1.3 DET Demo - 目标检测¶
相关算法文档:目标检测算法详细文档
1.3.1. 功能介绍¶
多路 H.264 视频文件实时目标检测与显示功能:
- 多路视频播放:支持最多16路 H.264 视频文件同时播放
- VDEC 双端口架构:Port 0 输出到 DISP 显示,Port 1 输出到检测算法
- 实时目标检测:使用 sgs_det_api 对 VDEC 输出进行目标检测
- 检测框显示:通过 SGS_GL 库在 framebuffer 上绘制检测框
- 多线程架构:每个视频通道独立的 VideoThread(视频解码)和 DetThread(目标检测)
- 自动布局:根据视频数量自动选择最优显示布局
1.3.2. Pipeline 流程¶
Video Files (最多16路 H.264)
│
▼
┌──────────────┐
│ │ Port 0 (原始分辨率) Port 1 (640x352)
│ VDEC ├────────────────────┬──────────────────┐
│ │ │ │
└──────────────┘ │ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ │ │ │
│ DISP │ │ DET │ 检测算法
│ │ │ │
└──────┬───────┘ └──────┬───────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ │ │ │
│ 视频显示 │ │ SGS_GL │ 绘制检测框
│ │ │ │
└──────────────┘ └──────┬───────┘
│
▼
┌──────────────┐
│ │
│ MI_FB │
│ │
└──────┬───────┘
│
▼
┌──────────────┐
│ │
│ 检测框显示 │
│ │
└──────────────┘
1.3.3. 自动布局规则¶
| 视频数量 | 自动布局 |
|---|---|
| 1 | 1x1 |
| 2 | 2x1 |
| 3~4 | 2x2 |
| 5~6 | 3x2 |
| 7~9 | 3x3 |
| 10~16 | 4x4 |
1.4 FR Demo - 人脸识别¶
相关算法文档:人脸识别算法详细文档
1.4.1. 功能介绍¶
人脸注册与识别功能:
- 人脸注册:从含人脸的裸流 ES 中提取 512 维特征向量以及 112x112 ARGB 裁剪图
- 人脸识别:实时检测画面,完成对齐、特征提取并与注册模板比对
- 双路 SCL 输出:Channel0 Port 0(1920x1080,用于显示)和 Channel1 Port 0(算法分辨率)
- HDMI 显示:DISP->HDMI 本地显示
- 帧缓冲叠加:MI_FB 根据比对结果绘制绿色(匹配)或白色(未匹配)矩形框
1.4.2. Pipeline 流程¶
H264/H265 ES --> VDEC (H264/H265 decode)
|
v
MI_SCL
+--------+------------------------------+
| |
v v
Channel0 Port0 --> DISP Layer --> HDMI
Channel1 Port0 --> FR Detect --> Align --> Feature --> Compare --> MI_FB --> HDMI OSD
|
'-- Feature / crop files (registration)
1.5 REID Demo - 以图搜图¶
相关算法文档:重识别算法详细文档
1.5.1. 功能介绍¶
基于视频码流的目标检测与重识别功能:
- 视频解码显示:从 ES 文件读取 H.264/H.265 码流,解码后通过 HDMI 输出显示
- 目标检测及保存:对视频帧进行检测,保存检测到目标的帧和裁剪图
- 以图搜图:支持 jpg 格式输入图片,支持在线/离线搜索
- 特征数据库生成:将识别特征和码流原图路径关联,生成 bin 文件
- 搜索结果展示:通过 PIP 方式将搜索结果显示在显示器画面上
1.5.2. Pipeline 流程¶
数据库 Pipeline (mode=0)
+-----------+ +-------+ +------+ +-----+
| ES File | --> | VDEC | --> | DISP | --> | HDMI|
+-----------+ +-------+ +------+ +-----+
| |
| v
| +----------+ +-----+ +------+
| | SCL DET | --> | DET | --> | RECT |
| +----------+ +-----+ +------+
| |
| |------------------------|
| v
| +----------+ +-----+
|--> | SCL REID | --> | REID|
| +----------+ +-----+
| |
| v
| +-----------+ +--------------+
| | VENC CROP |----> | source Files |
| +-----------+ +--------------+
|
| +------+ +------------+
|-----| VENC |----> | orgin Files |
+------+ +------------+
搜索 Pipeline (mode=1)
+------+ +------------+ +------------+ +--------------+ +--------------+ +------+ +------+ +---------+ +----------+
| IMAGE|---> | JPD SEARCH |--> | SCL SEARCH |--> | REID EXTRACT |--> | REID COMPARE |--->| FILE |--->| JPD |--->| SCL PIP |--->| DISP PIP |
+------+ +------------+ +------------+ +--------------+ +--------------+ +------+ +------+ +---------+ +----------+
1.6 RET Demo - 以文搜图¶
相关算法文档:文本检索算法详细文档
1.6.1. 功能介绍¶
基于视频码流进行人形检测与文本检索图像功能:
- 视频解码显示:从 ES 文件读取 H.264/H.265 码流,解码后通过 HDMI 输出显示
- 目标检测及保存:对视频帧进行人形检测,保存检测到目标的帧
- 以文搜图:支持输入文字,从保存的图片中进行搜索
- 数据库生成:将识别结果保存为数据库文件
- PIP 轮播:画中画轮播显示与文字最匹配的 5 张图片
1.6.2. Pipeline 流程¶
数据库 Pipeline
+-----------+ +-------+ +------+ +-----+
| ES File | --> | VDEC | --> | DISP | --> | HDMI|
+-----------+ +-------+ +------+ +-----+
| |
| v
| +-------+ +-----+ +------+
| | SCL | --> | DET | --> | RECT |
| +-------+ +-----+ +------+
| |
| |------------------------|
| v
| +------+ +-----+
|--> | SCL | --> | RET |
| +------+ +-----+
| |
| v
| +------+ +------------+
|-----| VENC |----> | JPEG Files |
+------+ +------------+
搜索 Pipeline
+------+ +------+ +------+ +------+ +-----+ +----------+
| TEXT |---> | RET |---> | FILE |--->| JPD |--->| SCL |--->| DISP PIP |
+------+ +------+ +------+ +------+ +-----+ +----------+
1.7 MOT Demo - 多目标跟踪¶
相关算法文档:VLM 算法详细文档
1.7.1. 功能介绍¶
基于视频码流进行多目标检测与跨帧跟踪功能:
- 视频解码显示:从 H.264 文件读取码流,解码后通过 HDMI 输出显示
- 多目标检测:对视频帧进行目标检测,识别行人与轿车
- 跨帧跟踪:自动完成跨帧跟踪,为每个检测目标分配持久的
track_id,同一目标在所有帧中保持同一个 id - 跟踪框与标签显示:按
track_id取色绘制彩色跟踪框(5 色循环:红、绿、蓝、黄、白)并标注id:<track_id>文字标签,叠加显示在 HDMI 画面上
1.7.2. Pipeline 流程¶
H264 ES --> VDEC (H264 解码)
|
+-- Port 0 (1920x1080) --> DISP Layer --> HDMI
|
+-- Port 1 (源分辨率) --> MOT 算法线程
|
v
ALGO_VLM_Run (run_det + run_mot)
|
v
MI_FB 绘制跟踪框 --> HDMI OSD
1.8 SOT Demo - 单目标跟踪¶
相关算法文档:VLM 算法详细文档
1.8.1. 功能介绍¶
基于视频码流进行目标检测、自动选择并持续跟踪单个目标功能:
- 视频解码显示:从 H.264 文件读取码流,解码后通过 HDMI 输出显示
- 目标检测:对视频帧进行目标检测,将检测到的可跟踪目标(人或轿车)以黄色框标出
- 自动选择跟踪目标:在检测结果中自动选取面积最大的目标作为跟踪对象,无需人工框选
- 单目标跟踪:对选中的目标进行跨帧跟踪,以绿色粗框高亮显示
- 丢失自动重选:目标离开画面或丢失后自动回退到检测,并在下一帧重新选择面积最大的目标继续跟踪
1.8.2. Pipeline 流程¶
H.264 文件
│
▼
┌──────────┐ Port 0 (显示) ┌──────────┐ ┌──────────┐
│ ├─────────────────────────►│ │ │ │
│ VDEC │ │ DISP ├─────►│ HDMI │
│ │ │ │ │ │
└────┬─────┘ └──────────┘ └──────────┘
│
│ Port 1 (算法)
▼
┌──────────────┐
│ │
│ 算法线程 │
│ │
│ VLM_Run │── 检测模式: 找出所有目标,自动选最大目标
│ (检测/跟踪) │── 跟踪模式: 跨帧跟踪单个目标
│ │
└──────┬───────┘
│
▼
┌──────────────┐
│ │
│ Framebuffer │── 绘制跟踪/检测边界框
│ 叠加层 │
│ │
└──────────────┘
1.9 SGPTV Demo - 以图生文¶
相关算法文档:VLM 算法详细文档
1.9.1. 功能介绍¶
基于指定目录的 JPEG 图片自动生成文字描述功能:
- 图片扫描:扫描指定目录下的 JPEG 图片(
.jpg/.jpeg),按文件名排序后依次处理 - 图片描述生成:对每张图片自动生成一段文字描述其画面内容
- 串口结果输出:将生成的文字描述通过串口终端打印输出(无 HDMI 显示通路)
- 交互式浏览:自动预加载并描述首张图片,按
n切换并描述下一张,按q退出
1.9.2. Pipeline 流程¶
JPEG 文件 -> 读取 -> JPD 解码(NV12) -> GetBuf -> ALGO_VLM_Run(SGPTV) -> 输出文字描述
|
+-> crop_func -> MI_SCL_StretchBuf
1.10 VRET Demo - 文搜视频¶
相关算法文档:VLM 算法详细文档
1.10.1. 功能介绍¶
基于文本查询对目录下的 H.264 视频进行检索并定位匹配片段功能:
- 码流扫描:扫描指定目录下的 H.264 视频码流(
.h264/.264),逐条作为待检索目标 - 文本特征编码:将查询文本编码为文本特征,扫描前仅编码一次
- 视频检索打分:逐条解码视频并提取视觉特征,与查询文本计算相似度,保留每条码流得分最高的片段
- 最佳匹配定位:在所有码流中选出得分最高的一条,并按帧率换算出最佳片段对应的实际时间段
- 串口结果输出:检索结果通过串口终端打印(无 HDMI 显示通路),扫描完成后自动退出
1.10.2. Pipeline 流程¶
文本查询 ----------------------------------> ALGO_VLM_Run(文本) -> 文本特征
(扫描前仅编码一次)
H.264 目录 -> (逐文件)-> MI_VDEC(H264 -> NV12) -> [逐解码帧] ALGO_VLM_Run(vret)
|
每填满 8 帧 -> 视觉特征 (step k)
|
ALGO_VLM_GetCosSimi(视觉特征, 文本特征) -> 得分
|
保留该文件得分最高 / 对应 step
|
时间段 = [上一个特征帧号/fps , 本特征帧号/fps](实测)
|
所有码流排序 -> 打印最佳码流 + 时间段
2. 编译环境说明¶
2.1 编译环境设置¶
在项目根目录下设置 arm64 编译环境:
export PATH=/tools/toolchain/aarch64-unknown-linux-gcc-12.4.0-glibc-2.37-gnu/bin:$PATH
export CROSS_COMPILE=aarch64-unknown-linux-gnu-12.4.0-
export ARCH=arm64
cd project
make linux-comake_mhera.emmc.glibc-12.4.0-arm64-ext4.d3.2048.fccsp16_lpddr4x_defconfig
注意! 如果板子ddr是2GB的,defconfig使用 linux-comake_mhera.emmc.glibc-12.4.0-arm64-ext4.d3.2048.fccsp16_lpddr4x_defconfig 如果板子ddr是4GB的,defconfig使用 linux-comake_mhera.emmc.glibc-12.4.0-arm64-ext4.d3.4096.fccsp16_lpddr4x_defconfig
2.2 编译命令¶
# 编译整个project
cd project
make clean;make image -j16
# 编译所有 DLA demo
cd sdk/verify/sample_code
make demo/dla
# 编译单个 demo(选择其一)
make demo/dla/det
make demo/dla/fr
make demo/dla/mot
make demo/dla/reid
make demo/dla/ret
make demo/dla/sgptv
make demo/dla/sot
make demo/dla/vret
# 清理编译产物
make demo/dla_clean
2.3 编译产物¶
sgs_demo_dla_det可执行文件位于out/arm64/app目录下sgs_demo_dla_fr可执行文件位于out/arm64/app目录下sgs_demo_dla_mot可执行文件位于out/arm64/app目录下sgs_demo_dla_reid可执行文件位于out/arm64/app目录下sgs_demo_dla_ret可执行文件位于out/arm64/app目录下sgs_demo_dla_sgptv可执行文件位于out/arm64/app目录下sgs_demo_dla_sot可执行文件位于out/arm64/app目录下sgs_demo_dla_vret可执行文件位于out/arm64/app目录下
3. 运行环境说明¶
所有 DLA Demo 均运行在 SGS 系列芯片平台上,依赖 MI (Module Interface) 系统驱动和相应的算法库。
3.1 硬件要求¶
- 开发板: SGS 系列开发板平台(如 Comake Pi D3)
- 显示设备: 支持 HDMI 输出的显示器
- 存储设备:
- DET/FR/MOT/SOT Demo: 可使用板端 Flash 或 NFS 挂载目录
- SGPTV/VRET Demo: 可使用板端 Flash 或 NFS 挂载目录(仅需存放模型与少量输入文件)
- REID/RET Demo: 强烈建议使用 SATA 硬盘。由于需要存储大量图片和特征数据库,板端内存不足,NFS 网络存储速度较慢可能导致图片存储与数据库同步失败
具体连接可参考下图

3.2 DET Demo 运行环境¶
目录结构要求:
DET Demo 需要模型文件和视频文件在同一目录下。建议在运行目录下创建如下结构:
./det/
├── sgs_demo_dla_det # 可执行文件
├── spdy36s.img # 检测模型文件
├── video1.h264 # 视频文件1(可多路)
├── video2.h264 # 视频文件2
├── video3.h264 # 视频文件3
└── video4.h264 # 视频文件4
3.3 FR Demo 运行环境¶
目录结构要求:
FR Demo 依赖特定的目录结构来存放输入码流、模型文件和输出特征文件。建议在运行目录下创建如下结构:
./fr/
├── sgs_demo_dla_fr # 可执行文件
├── input/ # 输入目录
│ ├── face.hevc # H.265 示例码流
│ ├── face.avc # H.264 示例码流
│ ├── fr_det_y24s.img # 检测模型
│ ├── fr_feature_as.img # 特征模型
│ └── fr_cos256.img # 余弦模型
└── output/ # 输出目录 (可写)
├── FaceFeatureData # 注册生成的特征文件
└── FaceCrop.argb8888 # 注册生成的裁剪图
3.4 REID Demo 运行环境¶
存储要求 (非常重要):
- 必须挂载 SATA 硬盘: 由于 REID Demo 需要保存大量 JPEG 图片和特征数据库,网络存储 (NFS) 延迟高,会导致特征数据库记录了图片路径但实际图片未保存成功的问题。
硬盘挂载步骤:
目录结构要求:
REID Demo 需要将所有文件放在硬盘挂载目录下。建议目录结构:
/home/reid/
├── sgs_demo_dla_reid # 可执行文件
├── video.h264 # 输入码流文件
├── video.h265 # 输入码流文件(可选)
├── reid_person_12y.img # 人员重识别模型
├── reid_vehicle_22y.img # 车辆重识别模型
├── sdy36s.img # 检测模型
├── query.jpg # 搜索查询图片(可选)
└── out/ # 输出目录 (可写)
├── crop/ # 裁剪图目录
│ ├── 000001_crop.jpg
│ ├── 000002_crop.jpg
│ └── ...
├── origin/ # 原始帧目录
│ ├── 000001_org.jpg
│ ├── 000002_org.jpg
│ └── ...
├── person_bin # 人员特征数据库
└── vehicle_bin # 车辆特征数据库
3.5 RET Demo 运行环境¶
存储要求:
- 推荐使用 SATA 硬盘: 如果码流复杂且帧率较高,对存储性能要求较高。推荐使用 SATA 硬盘。如果存储介质性能不足,可以通过降低帧率 (
-f参数) 来缓解。
硬盘挂载步骤:
目录结构要求:
RET Demo 需要将所有文件放在硬盘挂载目录下。建议目录结构:
/home/ret/
├── sgs_demo_dla_ret # 可执行文件
├── video.h264 # 输入码流文件
├── video.h265 # 输入码流文件(可选)
├── ret_zh_img_256as.img # 中文图像模型
├── ret_zh_text77s.img # 中文文本模型
├── cn_vocab.txt # 中文词表
├── ret_en_img_256as.img # 英文图像模型
├── ret_en_text77s.img # 英文文本模型
├── en_vocab.txt # 英文词表
├── sdy36s.img # 检测模型
└── out/ # 输出目录 (可写)
├── frame_000001.jpg # 检测到目标的视频帧
├── frame_000002.jpg
├── ...
├── image_bin # 图像特征数据库
└── box_bin # 边界框数据库
输出目录:
建议输出目录 (-o 参数) 设置在硬盘路径下,例如 /home/ret/out/。
3.6 MOT Demo 运行环境¶
目录结构要求:
MOT Demo 使用相对路径加载模型、字库和输入。建议目录结构:
mot/
├── sgs_demo_dla_mot # 可执行文件
├── models/
│ └── sdy36s.img # 检测模型
├── resource/
│ └── default.ttf # TTF 字库(track_id 文字标签)
└── input/
└── hqb.h264 # H264 裸流(每帧 16 字节帧头)
3.7 SOT Demo 运行环境¶
目录结构要求:
SOT Demo 需要检测模型、SOT 内部重检测模型和 SOT 跟踪模型。建议目录结构:
sot/
├── sgs_demo_dla_sot # 可执行文件
├── models/
│ ├── sdy48s.img # 检测模型 / SOT 内部重检测模型
│ ├── reid_person_12yxs.img # SOT 人形跟踪模型
│ └── reid_vehicle_22yxs.img # SOT 车跟踪模型(跟踪车时使用)
└── input/
└── hqb.h264 # H264 测试视频(预封装格式)
3.8 SGPTV Demo 运行环境¶
目录结构要求:
测试时须在可执行文件同级目录创建 source 文件夹,把所有 JPEG 图片放入该文件夹。建议目录结构:
sgptv/
├── sgs_demo_dla_sgptv # 可执行文件
├── source/ # JPEG 输入目录
│ ├── image1.jpg
│ ├── image2.jpeg
│ └── ...
├── sgptv_vision.img # 视觉模型
├── sgptv_head.img # head 模型
├── sgptv_decoder.img # decoder 模型
├── sgptv_embedding.npy # embedding 模型
└── sgptv_json/ # tokenizer JSON 配置目录
├── generation_config.json
├── tokenizer_config.json
└── tokenizer.json
注意! SGPTV Demo 无 HDMI 显示通路,通过串口终端输出文字描述,需要串口线用于调试、网络用于文件传输。
3.9 VRET Demo 运行环境¶
目录结构要求:
测试时须在可执行文件同级目录创建 source 文件夹,把所有待搜索码流放入该文件夹。建议目录结构:
vret/
├── sgs_demo_dla_vret # 可执行文件
├── source/ # 待搜索 H.264 码流目录
│ ├── clip_a.h264
│ ├── clip_b.h264
│ └── ...
├── vret_vision.img # 视觉模型
├── vret_text.img # 文本模型
└── vret_json/ # 分词器 JSON 目录
├── preprocessor_config.json
├── tokenizer_config.json
└── tokenizer.json
注意! VRET Demo 无 HDMI 显示通路,扫描完所有码流后自动退出,匹配结果通过串口终端打印。
4. 运行说明¶
4.1 DET Demo - 目标检测¶
4.1.1 运行指令¶
# 基本用法
./sgs_demo_dla_det [选项]
# 命令行参数
-m <model_path> # 检测模型文件路径(必选)
-v <video_list> # 视频文件列表,逗号分隔(必选)
-d <threshold> # 检测置信度阈值(可选,默认0.5)
-r <resolution> # 显示分辨率:0=1920x1080(默认),1=3840x2160
# 使用示例
# 单路视频检测
./sgs_demo_dla_det -m ./spdy36s.img -v test.h264
# 4. 四路视频检测
./sgs_demo_dla_det -m ./spdy36s.img -v video1.h264,video2.h264,video3.h264,video4.h264
# 自定义检测阈值
./sgs_demo_dla_det -m ./spdy36s.img -v test.h264 -d 0.7
# 4K 分辨率显示
./sgs_demo_dla_det -m ./spdy36s.img -v test.h264 -r 1
4.1.2 测试用例¶
| 用例ID | 测试目标 | 操作步骤 | 执行命令 | 预期结果 |
|---|---|---|---|---|
| DET-01 | 单路视频检测功能 | 1. 准备单个H.264视频文件 2. 执行检测命令 3. 验证检测框准确性 |
./sgs_demo_dla_det -m ./spdy36s.img -v test.h264 |
自动选择1x1布局,准确检测人形目标并绘制人脸、人头和人身三个黄色检测框 |
| DET-02 | 置信度阈值调节(低) | 1. 测试低阈值设置 2. 验证检测灵敏度 3. 检查误检和漏检率 |
./sgs_demo_dla_det -m ./spdy36s.img -v test.h264 -d 0.1 |
低阈值检测更宽松,对人形要求低,容易检测人形并绘制较多的检测框 |
| DET-03 | 置信度阈值调节(高) | 1. 测试高阈值设置 2. 验证检测灵敏度 3. 检查误检和漏检率 |
./sgs_demo_dla_det -m ./spdy36s.img -v test.h264 -d 0.9 |
高阈值检测更严格,对人形要求高,较难检测人形并绘制较少的检测框 |
| DET-04 | 4K分辨率显示 | 1. 使用4K显示器 2. 执行4K分辨率命令 3. 验证显示效果 |
./sgs_demo_dla_det -m ./spdy36s.img -v test.h264 -r 1 |
日志中打印Display width: 3840;Display height: 2160,显示分辨率为3840x2160,视频和检测框正常显示 |
| DET-05 | 最大路数测试 | 1. 准备16个H.264视频文件(可重复使用同一个h264文件) 2. 执行检测命令 3. 验证系统性能 |
./sgs_demo_dla_det -m ./spdy36s.img -v video1.h264,...,video16.h264 |
自动选择4x4布局,所有视频正常播放和检测,准确检测人形并绘制人脸、人头、人身三个检测框 |
4.1.3 验证方法¶
终端输出验证:
Parsed arguments:
Model path: ./spdy36s.img
Video count: 4
Video 1: video1.h264
Video 2: video2.h264
Video 3: video3.h264
Video 4: video4.h264
Detection threshold: 0.500000
Display width: 1920
Display height: 1080
Auto-selected layout 2 for 4 video(s)
Display initialized: screen=1920x1080, layerSize=1920x1080...
Detection algorithm initialized with input 640x352.
Video playback started. Press 'q' to quit.
显示效果验证:
- HDMI显示设备上显示视频播放画面
- 检测到的目标周围绘制黄色检测框(人脸、人头、人身)
- 多路视频按照自动布局显示在屏幕上
程序退出:
- 在终端输入
q并按回车退出 - 程序会清理所有资源并正常退出
4.2 FR Demo - 人脸识别¶
4.2.1 运行指令¶
# 通用格式
./sgs_demo_dla_fr <mode> [image <es_path>] [type <codec_type>] [featuredatanum <num>] [featuredata <file> <...> <file>] [cropdata <file>] [timeout <seconds>]
# 参数说明
<mode> # 0=注册,1=识别
image <es_path> # VDEC 循环播放的 ES 文件(默认 input/face.hevc)
type <codec_type> # 1=H264,2=H265(默认 2)
featuredatanum <num> # 特征文件数量,范围1~5(默认 1)
featuredata <file> # 特征文件路径(默认 output/FaceFeatureData)
cropdata <file> # 112x112 ARGB 裁剪图片(默认 output/FaceCrop.argb8888)
timeout <seconds> # 运行秒数,-1 表示等待 q 键(默认 -1)
# 使用示例
# 注册人脸模板并保留裁剪图
./sgs_demo_dla_fr 0 image input/face.hevc type 2 featuredata output/face1.feature cropdata output/face1.argb timeout 20
# 使用已保存的模板进行识别
./sgs_demo_dla_fr 1 image input/face.hevc type 2 featuredata output/face1.feature timeout 60
# 使用多个模板进行识别
./sgs_demo_dla_fr 1 image input/face.hevc type 2 featuredatanum 3 featuredata output/face1.feature output/face2.feature output/face3.feature timeout 60
4.2.2 测试用例¶
| 用例ID | 测试场景 | 操作步骤 | 执行命令 | 预期结果 |
|---|---|---|---|---|
| FR-01 | 单人脸注册 | 1. 将目标 ES 文件拷贝到设备 2. 使用指定输出路径运行注册命令 3. 查看生成的特征与裁剪文件 |
./sgs_demo_dla_fr 0 image input/face.hevc type 2 featuredata output/face1.feature cropdata output/face1.argb timeout 15 |
生成 face1.feature 与 face1.argb;串口打印 Face detected 与 write file xx success 等信息;HDMI 显示绿色框 |
| FR-02 | H.264码流人脸匹配/不匹配识别 | 1. 确认 FR-01 的输出文件存在 2. 运行识别命令 3. 观察相似度与叠加框颜色 |
./sgs_demo_dla_fr 1 image input/face.avc type 1 featuredata output/face1.feature timeout 30 |
匹配时串口打印 Match found (similarity: X.XX) 且相似度 >0.45,画面绘制绿色框;不匹配时串口打印 No match found (max similarity: X.XX) 且相似度 < 0.45,画面绘制白色框 |
| FR-03 | H.265码流人脸匹配/不匹配识别 | 1. 确认 FR-01 的输出文件存在 2. 运行识别命令 3. 观察相似度与叠加框颜色 |
./sgs_demo_dla_fr 1 image input/face.hevc type 2 featuredata output/face1.feature timeout 30 |
匹配时串口打印 Match found (similarity: X.XX) 且相似度 >0.45,画面绘制绿色框;不匹配时串口打印 No match found (max similarity: X.XX) 且相似度 < 0.45,画面绘制白色框 |
| FR-04 | 多个人脸白名单的匹配/不匹配识别 | 1. 使用 FR-01 case 输出多个人脸特征文件并确认输出文件存在 2. 运行识别命令 3. 观察相似度与叠加框颜色 |
./sgs_demo_dla_fr 1 image input/face.hevc type 2 featuredatanum 3 featuredata output/face1.feature output/face2.feature output/face3.feature timeout 30 |
匹配时串口打印 Match found (similarity: X.XX) 且相似度 >0.45,画面绘制绿色框;不匹配时串口打印 No match found (max similarity: X.XX) 且相似度 < 0.45,画面绘制白色框 |
| FR-05 | 超时退出 | 1. 设置较短 timeout 运行识别 2. 等待程序自动退出 |
./sgs_demo_dla_fr 1 image input/face.hevc type 2 featuredata output/face1.feature timeout 10 |
约 10 秒后自动退出,无需人工干预;线程正确结束,串口打印清理日志 |
4.2.3 验证方法¶
显示效果验证:
- HDMI 上循环播放 ES流
- 绿色框 表示匹配成功
- 白色框 表示未匹配
文件输出验证:
- 注册模式产生 50,176 字节的 ARGB 文件(112x112)
- 产生 512 个
MI_S16组成的特征文件
程序退出:
- 手动:在串口终端输入
q并回车 - 自动:依赖
timeout设置,时间到达后自行退出
4.3 REID Demo - 以图搜图¶
4.3.1 运行指令¶
# 生成人员数据库
./sgs_demo_dla_reid -i <input_stream> -W <width> -H <height> -f <fps> -t <codec_type> -O <output_path> -m 0 -o 0 -P <person_model> -D <det_model>
# 生成车辆数据库
./sgs_demo_dla_reid -i <input_stream> -W <width> -H <height> -f <fps> -t <codec_type> -O <output_path> -m 0 -o 1 -V <vehicle_model> -D <det_model>
# 使用已有数据库进行人员搜索
./sgs_demo_dla_reid -i <input_stream> -W <width> -H <height> -f <fps> -t <codec_type> -I <input_picture> -w <pic_width> -h <pic_height> -b <feature_bin> -m 1 -o 0 -P <person_model> -T <threshold>
# 使用已有数据库进行车辆搜索
./sgs_demo_dla_reid -i <input_stream> -W <width> -H <height> -f <fps> -t <codec_type> -I <input_picture> -w <pic_width> -h <pic_height> -b <feature_bin> -m 1 -o 1 -V <vehicle_model> -T <threshold>
# 动态以图搜图(人员)
./sgs_demo_dla_reid -i <input_stream> -W <width> -H <height> -f <fps> -t <codec_type> -I <input_picture> -w <pic_width> -h <pic_height> -O <output_path> -m 0 -o 0 -P <person_model> -T <threshold> -D <det_model>
# 示例
./sgs_demo_dla_reid -i ./hqb.h264 -W 1920 -H 1080 -f 20 -t 0 -O /home/reid/out -m 0 -o 0 -P reid_person_12y.img -D sdy36s.img
4.3.2 参数说明¶
| 参数 | 说明 |
|---|---|
-i |
输入 ES 码流文件路径 |
-t |
编码类型:0=H.264,1=H.265 |
-W |
视频宽度(1-3840) |
-H |
视频高度(1-2160) |
-f |
视频帧率(1-30) |
-m |
运行模式:0=生成新数据库,1=使用已有数据库 |
-o |
目标类型:0=人员,1=车辆 |
-P |
人员重识别模型文件 |
-V |
车辆重识别模型文件 |
-O |
输出目录 |
-D |
检测模型文件 |
-I |
输入图片文件(搜索用) |
-w |
输入图片宽度 |
-h |
输入图片高度 |
-b |
特征数据库文件 |
-T |
REID 模型阈值(0.0~1.0) |
4.3.3 测试用例¶
| 用例ID | 测试目标 | 操作步骤 | 执行命令 | 预期结果 |
|---|---|---|---|---|
| REID-01 | 测试人员数据库生成(H.264) | 1. 执行程序 2. 等待码流播放完成 3. 检查输出目录 |
./sgs_demo_dla_reid -i ./hqb.h264 -W 1920 -H 1080 -f 20 -t 0 -O /home/reid/out -m 0 -o 0 -P reid_person_12y.img -D sdy36s.img |
1. HDMI 显示视频画面 2. /home/reid/out目录生成 person.bin3. /home/reid/out/person路径生成 frame_.jpg 原始图片4. /home/reid/out/person_source路径生成 source/source.jpg 裁剪图片 |
| REID-02 | 测试车辆数据库生成(H.264) | 1. 执行程序 2. 等待码流播放完成 3. 检查输出目录 |
./sgs_demo_dla_reid -i ./hqb.h264 -W 1920 -H 1080 -f 20 -t 0 -O /home/reid/out -m 0 -o 1 -V reid_vehicle_22y.img -D sdy36s.img |
1. HDMI 显示视频画面 2. /home/reid/out目录生成 vehicle.bin3. /home/reid/out/vehicle生成 frame_.jpg 原始图片4. /home/reid/out/vehicle_source目录生成 source/source.jpg` 裁剪图片 |
| REID-03 | 测试暂停/恢复功能 | 1. 执行 REID-01 命令 2. 播放过程中输入 0 暂停3. 再次输入 0 恢复4. 输入 q 正常退出 |
同 REID-01 命令 | 1. 第一次输入 0,视频暂停2. 第二次输入 0,视频恢复3. 输入 q 后正常退出,数据库生成成功 |
| REID-04 | 测试人员离线搜索功能(mode=1) | 1. 在 REID-01 完成后执行 2. 输入 1 执行搜索 |
./sgs_demo_dla_reid -i ./hqb.h264 -W 1920 -H 1080 -f 20 -t 0 -I ./test_person.jpg -w 256 -h 128 -b /home/reid/out/person.bin -m 1 -o 0 -P reid_person_12y.img -T 0.7 |
1. HDMI 显示视频画面 2. 输入 1 后执行搜索,主码流会暂停播放3. 终端打印 Top 5 搜索结果 4. 左上角 PIP 显示搜索结果轮播 |
| REID-05 | 测试车辆离线搜索功能(mode=1) | 1. 在 REID-02 完成后执行 2. 输入 1 执行搜索3. 验证搜索结果 |
./sgs_demo_dla_reid -i ./hqb.h264 -W 1920 -H 1080 -f 20 -t 0 -I ./test_vehicle.jpg -w 256 -h 128 -b /home/reid/out/vehicle.bin -m 1 -o 1 -V reid_vehicle_22y.img -T 0.3 |
1. HDMI 显示视频画面 2. 输入 1 后执行搜索3. 终端打印 Top 5 搜索结果 4. 左上角 PIP 显示搜索结果轮播 |
| REID-06 | 测试 PIP 轮播控制功能 | 1. 执行 REID-04 命令 2. 输入 1 执行搜索进入 PIP 显示3. 按 n 查看下一张4. 按 p 查看上一张5. 按 s 切换自动/手动模式6. 按 q 退出 PIP 显示 |
在 REID-01 完成后执行 | 1. 输入 1 后进入 PIP 轮播模式(自动播放)2. 按 s 切换自动播放/手动模式3. 按 n 切换到下一张图片4. 按 p 切换到上一张图片5. 按 q 退出 PIP 显示模式 |
| REID-07 | 测试人员动态搜索功能(H.264) | 1. 执行程序 2. 程序自动边生成数据库边搜索 3. 验证搜索结果 |
./sgs_demo_dla_reid -i ./hqb.h264 -W 1920 -H 1080 -f 20 -t 0 -I ./test_person.jpg -w 256 -h 128 -O /home/reid/out -m 0 -o 0 -P reid_person_12y.img -T 0.7 -D sdy36s.img |
1. HDMI 显示视频画面 2. 程序边播放边生成数据库 3. 输入 1后码流暂停播放,显示针对当前已播放码流的搜索结果4. 当画面中出现更匹配的画面时,搜索结果会更新 |
4.4 RET Demo - 以文搜图¶
4.4.1 运行指令¶
# 基本用法
./sgs_demo_dla_ret -i <input_file> -o <output_dir> -W <width> -H <height> -f <fps> -I <img_model> -T <txt_model> -V <vocab_file> -D <det_model> -l <language> -t <codec_type>
# 中文识别(H.264)
./sgs_demo_dla_ret -i ./hqb.h264 -o /home/ret/out -W 1920 -H 1080 -f 20 -I ./ret_zh_img_256as.img -T ./ret_zh_text77s.img -V ./cn_vocab.txt -D ./sdy36s.img -l 0 -t 0
# 英文识别(H.264)
./sgs_demo_dla_ret -i ./hqb.h264 -o /home/ret/out -W 1920 -H 1080 -f 20 -I ./ret_en_img_256as.img -T ./ret_en_text77s.img -V ./en_vocab.txt -D ./sdy36s.img -l 1 -t 0
4.4.2 参数说明¶
| 参数 | 说明 |
|---|---|
-i |
输入 ES 码流文件路径 |
-o |
输出目录 |
-W |
视频宽度(1-3840) |
-H |
视频高度(1-2160) |
-f |
视频帧率(1-120) |
-I |
图像模型文件路径 |
-T |
文本模型文件路径 |
-V |
词表模型文件路径 |
-D |
检测模型文件路径 |
-l |
语言设置:0=中文,1=英文 |
-t |
编码类型:0=H.264,1=H.265 |
4.4.3 测试用例¶
| 用例ID | 测试目标 | 操作步骤 | 执行命令 | 预期结果 |
|---|---|---|---|---|
| RET-01 | 测试码流播放和暂停/恢复功能 | 1. 执行程序 2. 播放过程中输入 '0' 暂停 3. 再次输入 '0' 恢复 4. 统计图片数量 |
./sgs_demo_dla_ret -i hqb.h264 -o /home/ret/out/ -W 1920 -H 1080 -f 20 -I ret_zh_img_256as.img -T ret_zh_text77s.img -V cn_vocab.txt -D sdy36s.img -t 0 -l 0 |
1. HDMI 显示视频画面 2. jpg 图片数量会持续增加 3. 视频成功进入循环播放 4. 程序打印应存储的图片数,实际保存数应一致 5. 视频暂停 6. 视频恢复播放 |
| RET-02 | 测试数据库生成功能 | 1. 等待码流第一次播放完毕后自动重复播放 2. 检查数据库文件 |
等待码流完整播放一次 | 1. 显示器的码流会开始循环播放 2. 检查应用所在目录是否生成数据库文件 box_bin 和 image_bin |
| RET-03 | 测试中文搜索功能 | 1. 在 RET-02 的基础上输入1进入搜索模式2. 搜索 穿红衣服的人 |
1. 输入 1+回车 进入搜索模式2. 输入 穿红衣服的人+回车 |
1. 视频暂停播放 2. HDMI 左上角显示搜索结果画面,会轮播与 穿红衣服的人匹配度最高的5张图片3. 串口会持续打印左上角播放图片的名字 |
| RET-04 | 重复测试搜索功能 | 1. 输入q退出本次搜索2. 再次输入 穿黄衣服的人进行搜索3. 输入 q退出,输入骑车的人 |
1. 输入 q 退出当前搜索2. 输入 穿黄衣服的人3. 输入 q 后输入 骑车的人 |
1. 退出当前搜索和反复搜索的功能正常,无错误日志 |
| RET-05 | 测试退出搜索 | 1. 输入 q退出本次搜索2. 继续输入 q,退出搜索模式3. 重新输入 1进入搜索模式 |
在搜索模式中按 q 两次 |
1. 退出本次搜索,仍处于搜索模式中 2. 退出搜索模式,显示器码流恢复播放 3. 再次进入搜索模式后工作正常 |
| RET-06 | 测试退出 | 1. 在开始播放码流后输入q退出2. 暂停后直接退出 3. 搜索后退出 |
输入 q 退出 |
这几种退出情况下都会生成对应的数据库文件 box_bin 和 image_bin,程序正常退出,无错误日志 |
| RET-07 | 测试英文搜索功能 | 1. 执行程序,等待码流第一次播放完毕后输入1进入搜索模式2. 搜索 The person wearing red clothes3. 输入 q退出 |
./sgs_demo_dla_ret -i hqb.h264 -o /home/ret/out/ -W 1920 -H 1080 -f 20 -I ret_en_img_256as.img -T ret_en_text77s.img -V en_vocab.txt -D sdy36s.img -t 0 -l 1 |
1. 显示器左上角会循环播放与The person wearing red clothes最匹配的5张图2. 终端会打印图片路径 3. 程序正常退出,无错误打印 |
4.5 MOT Demo - 多目标跟踪¶
4.5.1 运行指令¶
# 通用格式
./sgs_demo_dla_mot -i <input> -m <det_model> [-t <font>] [-W <width>] [-H <height>] [-f <fps>] [--help]
# 使用示例
./sgs_demo_dla_mot -i input/hqb.h264 -t resource/default.ttf -m models/sdy36s.img -W 1920 -H 1080
4.5.2 参数说明¶
| 参数 | 说明 | 必选 | 默认值 |
|---|---|---|---|
-i, --input <file> |
H264 输入文件路径 | 是 | - |
-m, --det-model <path> |
检测模型文件(.img) | 是 | - |
-t, --font <path> |
track_id 文字标签的 TTF 字库(不提供则不画文字标签) | 否 | - |
-W, --disp-width <width> |
源视频宽度(1-4096) | 否 | 1920 |
-H, --disp-height <height> |
源视频高度(1-4096) | 否 | 1080 |
-f, --frame-rate <fps> |
推流帧率(1-120) | 否 | 30 |
--help |
显示帮助信息 | 否 | - |
注意!
-W/-H必须与实际码流分辨率一致,否则会出现解码/显示异常。
4.5.3 测试用例¶
| 用例ID | 测试目标 | 操作步骤 | 执行命令 | 预期结果 |
|---|---|---|---|---|
| MOT-01 | 正常 MOT 1080p 跟踪 | 1. 执行程序 2. 等待 HDMI 显示画面 3. 观察彩色跟踪框及 id 文字标签 4. 等待码流至少循环播放一次 |
./sgs_demo_dla_mot -i input/hqb.h264 -t resource/default.ttf -m models/sdy36s.img -W 1920 -H 1080 -f 20 |
1. HDMI 显示视频画面 2. 仅行人和轿车有彩色跟踪框,按 track_id 取色(5 色循环) 3. 每个框上方有 id: 4. 文件播放完后自动循环 |
| MOT-02 | 暂停/恢复/退出功能 | 1. 执行 MOT-01 命令 2. 播放稳定后输入 p 回车暂停3. 等待约 5 秒 4. 再次输入 p 回车恢复5. 输入 q 回车退出 |
同 MOT-01 命令 | 1. 第一次按 p:码流暂停发送、算法暂停处理2. 第二次按 p:播放正常恢复,track_id 跨越暂停边界保持稳定3. 输入 q 回车无错误打印,正常退出 |
4.6 SOT Demo - 单目标跟踪¶
4.6.1 运行指令¶
# 通用格式
./sgs_demo_dla_sot -i <input> -D <det_model> -s <det4sot_model> -S <sot_model> [-m <0|1>] [-o <0|1>] [-W <width>] [-H <height>] [-T <threshold>] [--help]
# 跟踪人(示例)
./sgs_demo_dla_sot -i hqb.h264 -D ./models/sdy48s.img -s ./models/sdy48s.img -S ./models/reid_person_12yxs.img -m 1 -o 0 -W 1920 -H 1080 -T 0.3
# 跟踪车(示例)
./sgs_demo_dla_sot -i hqb.h264 -D ./models/sdy48s.img -s ./models/sdy48s.img -S ./models/reid_vehicle_22yxs.img -m 1 -o 1 -W 1920 -H 1080 -T 0.3
4.6.2 参数说明¶
| 参数 | 说明 | 必选 | 默认值 |
|---|---|---|---|
-i, --input <file> |
输入 H.264 文件路径 | 是 | — |
-D, --det-model <path> |
检测模型路径 | 是 | — |
-s, --det4sot-model <path> |
SOT 内部检测模型路径 | 是 | — |
-S, --sot-model <path> |
SOT 跟踪模型路径 | 是 | — |
-m, --enable-md <0\|1> |
启用运动检测预过滤,0:关 1:开 | 否 | 0 |
-o, --target-class <0\|1> |
跟踪目标类别:0=人 / 1=轿车 | 否 | 0 |
-W, --disp-width <w> |
显示宽度(1-4096) | 否 | 1920 |
-H, --disp-height <h> |
显示高度(1-4096) | 否 | 1080 |
-T, --track-threshold <f> |
SOT 跟踪置信度阈值,范围 (0, 1.0] | 否 | 0.3 |
--help |
显示帮助信息 | 否 | — |
注意! 关于
-D和-s:-s(det4sot)是 SOT 跟踪过程中内部重新检测时使用的模型,通常与检测模型指定同一文件效果最佳。
4.6.3 测试用例¶
| 用例ID | 测试目标 | 操作步骤 | 执行命令 | 预期结果 |
|---|---|---|---|---|
| SOT-01 | 跟踪人 | 1. 执行程序 2. 观察自动选中目标与绿色跟踪框 3. 观察目标离开/重现行为 |
./sgs_demo_dla_sot -i hqb.h264 -D sdy48s.img -s sdy48s.img -S reid_person_12yxs.img -m 1 -o 0 -W 1920 -H 1080 -T 0.3 |
以当前帧面积最大的 人 作为跟踪目标(日志出现 SetSot auto-pick + SOT tracking started),屏幕显示绿色跟踪框;目标离开画面后绿色框消失、自动回检测态;目标重新出现后自动恢复跟踪 |
| SOT-02 | 跟踪车 | 1. 执行程序 2. 观察自动选中目标与绿色跟踪框 |
./sgs_demo_dla_sot -i hqb.h264 -D sdy48s.img -s sdy48s.img -S reid_vehicle_22yxs.img -m 1 -o 1 -W 1920 -H 1080 -T 0.3 |
以当前帧面积最大的 轿车 作为跟踪目标(日志出现 SetSot auto-pick + SOT tracking started),屏幕显示绿色跟踪框;丢失后自动回检测态、重现后恢复跟踪 |
| SOT-03 | 按 q 退出 | 1. 启动 SOT-01 命令 2. 按 q + 回车退出 |
同 SOT-01 命令 | 显示 [INFO]: exit requested,正常退出(return 0) |
4.7 SGPTV Demo - 以图生文¶
4.7.1 运行指令¶
# 通用格式
./sgs_demo_dla_sgptv -i <input_dir> [-V <vision_model>] [-H <head_model>] [-D <decoder_model>] [-E <embedding_model>] [-J <json_path>] [-h]
# 使用示例
./sgs_demo_dla_sgptv \
-i source/ \
-V sgptv_vision.img \
-H sgptv_head.img \
-D sgptv_decoder.img \
-E sgptv_embedding.npy \
-J sgptv_json/
4.7.2 参数说明¶
| 参数 | 必选/可选 | 说明 |
|---|---|---|
-i, --input |
必选 | JPEG 输入目录路径 |
-V, --vision-model |
可选 | vision 模型路径 |
-H, --head-model |
可选 | head 模型路径 |
-D, --decoder-model |
可选 | decoder 模型路径 |
-E, --embedding-model |
可选 | embedding 模型路径 |
-J, --json-path |
可选 | SGPTV JSON 配置目录 |
-h, --help |
可选 | 打印帮助 |
4.7.3 测试用例¶
| 用例ID | 测试目标 | 操作步骤 | 执行命令 | 预期结果 |
|---|---|---|---|---|
| SGPTV-01 | 验证以图生文流程 | 1. 准备 JPEG 目录与全部模型/JSON 2. 运行 demo |
./sgs_demo_dla_sgptv -i source/ -V sgptv_vision.img -H sgptv_head.img -D sgptv_decoder.img -E sgptv_embedding.npy -J sgptv_json/ |
首图预加载成功,VLM 初始化成功,输出 [RESULT_RAW] 文字描述,描述与图片内容匹配 |
| SGPTV-02 | 交互切图与退出 | 1. 在 SGPTV-01 基础上输入 n 至少 3 次2. 验证每张描述与图片匹配 3. 输入 q 退出 |
交互操作 | 每次按 n 后解码下一张图片并输出文字描述,描述与图片内容匹配;按 q 后打印 Quit. 并正常退出 |
4.8 VRET Demo - 文搜视频¶
4.8.1 运行指令¶
# 通用格式
./sgs_demo_dla_vret -i <input_dir> -p <prompt> -f <fps> -V <vision_model> -T <text_model> -J <json_path> [-W <width>] [-H <height>] [-s <frame_shift>] [-h]
# 使用示例
./sgs_demo_dla_vret -i source/ -p "Departure video at the airport terminal" -f 30 -V vret_vision.img -T vret_text.img -J vret_json/ -W 1920 -H 1080
4.8.2 参数说明¶
| 参数 | 必选/可选 | 取值范围/示例 | 说明 |
|---|---|---|---|
-i, --input |
必选 | 目录路径 | 待搜索的 H.264 码流所在目录 |
-p, --prompt |
必选 | 文本字符串 | 要搜索的文本查询 |
-f, --fps |
必选 | 1 - 30 | 码流帧率,用于把 step 换算为实际时间段 |
-V, --vision-model |
必选 | 文件路径 | vret 视觉模型路径 |
-T, --text-model |
必选 | 文件路径 | vret 文本模型路径 |
-J, --json-path |
必选 | 目录路径 | vret 分词器 json 目录 |
-W, --width |
可选 | 1 - 4096(默认 1920) | VDEC 通道宽度;设为 ≥ 目录中最大码流的分辨率 |
-H, --height |
可选 | 1 - 4096(默认 1080) | VDEC 通道高度;设为 ≥ 目录中最大码流的分辨率 |
-s, --frame-shift |
可选 | 1 - 8(默认 4) | 模型缓存移位;值越大单个片段信息越多但精度下降 |
-h, --help |
可选 | — | 打印帮助 |
4.8.3 测试用例¶
| 用例ID | 测试目标 | 操作步骤 | 执行命令 | 预期结果 |
|---|---|---|---|---|
| VRET-01 | 搜索指定码流(如交通场景) | 1. 准备 source 码流目录与模型/JSON 2. 执行程序 3. 等待扫描完成 |
./sgs_demo_dla_vret -i source/ -p "Traffic video at the intersection" -f 30 -s 4 -V vret_vision.img -T vret_text.img -J vret_json/ -W 1920 -H 1080 |
打印 ==================== BEST MATCH ==================== 块,含最佳文件、得分/step 与 time segment;-p 描述词对应的码流应被打印为最佳文件,time segment 为最匹配该描述词的时间段 |
| VRET-02 | 搜索指定码流(如航站楼场景) | 1. 在 VRET-01 基础上更换 -p 文本2. 执行程序 |
./sgs_demo_dla_vret -i source/ -p "Departure video at the airport terminal" -f 30 -s 4 -V vret_vision.img -T vret_text.img -J vret_json/ -W 1920 -H 1080 |
打印 ==================== BEST MATCH ==================== 块,最佳文件应为 -p 描述词对应的码流,并给出匹配时间段 |
5. 运行结果说明¶
5.1 正常运行状态¶
所有 DLA Demo 启动后,会执行以下初始化操作:
- 系统初始化:加载 MI 系统驱动,初始化各模块
- 模型加载:加载相应的算法模型文件
- 资源分配:分配视频通道、显示图层、内存等资源
-
开始处理:启动视频解码、算法推理和结果显示
正常启动后,终端会显示初始化成功信息并开始输出处理日志。
5.2 各功能场景运行结果¶
5.2.1 DET Demo 运行结果¶
正常运行状态:
- HDMI 显示器显示多路视频画面
- 根据视频数量自动选择最佳布局(1x1、2x2、3x3、4x4等)
- 检测到的目标周围绘制矩形检测框
- 终端输出检测信息
终端输出示例:
[INFO] System initialized successfully
[INFO] Detection model loaded: spdy36s.img
[INFO] Video channels: 4
[INFO] Auto layout: 2x2
[INFO] Start detection...
[INFO] Channel 0: detected 3 objects
[INFO] Channel 1: detected 5 objects
显示效果:
- 视频正常播放
- 检测框实时叠加在视频上
- 多路视频按网格布局显示
5.2.2 FR Demo 运行结果¶
注册模式(mode=0):
- HDMI 显示器显示人脸视频
- 检测到人脸后自动提取特征
- 生成512维特征向量文件
- 保存112x112 ARGB裁剪图
识别模式(mode=1):
- HDMI 显示器显示实时人脸识别视频
- 检测到人脸后进行特征比对
- 匹配成功:绘制绿色矩形框
- 未匹配:绘制白色矩形框
终端输出示例:
[INFO] Face recognition started
[INFO] Registered features loaded: alice.feature
[INFO] Video codec: H.265
[INFO] Face detected at (x,y,w,h): (100,150,80,80)
[INFO] Feature extracted, comparing...
[INFO] Match found! Confidence: 0.92
[INFO] Draw green rectangle at (100,150,80,80)
5.2.3 REID Demo 运行结果¶
数据库生成模式(mode=0):
- HDMI 显示器显示视频解码画面
- 检测到目标后自动裁剪和保存
- 生成 JPEG 格式的裁剪图
- 生成特征数据库文件(.bin)
- 保存原始帧图片
文件输出结构:
output/
├── crop/ # 裁剪图目录
│ ├── 000001_crop.jpg
│ ├── 000002_crop.jpg
│ └── ...
├── origin/ # 原始帧目录
│ ├── 000001_org.jpg
│ ├── 000002_org.jpg
│ └── ...
└── feature.bin # 特征数据库文件
搜索模式(mode=1):
- HDMI 显示器显示视频解码画面
- PIP(画中画)显示搜索结果
- 按相似度排序显示最匹配的图片
- 终端输出相似度分数
终端输出示例:
[INFO] REID database generation started
[INFO] Target type: Person
[INFO] Detection model loaded
[INFO] REID model loaded
[INFO] Detected object, saving crop...
[INFO] Feature extracted, saving to database...
[INFO] Database saved: feature.bin
[INFO] Total objects: 150
[INFO] REID search started
[INFO] Query image loaded: query.jpg
[INFO] Searching in database...
[INFO] Top 5 matches:
[INFO] #1: 000123_crop.jpg (similarity: 0.95)
[INFO] #2: 000045_crop.jpg (similarity: 0.88)
[INFO] #3: 000089_crop.jpg (similarity: 0.82)
5.2.4 RET Demo 运行结果¶
数据库生成模式:
- HDMI 显示器显示视频解码画面
- 检测人形目标并保存帧图片
- 生成文本-图像特征数据库
搜索模式:
- HDMI 显示器显示视频解码画面
- PIP 轮播显示与输入文字最匹配的5张图片
- 终端输出匹配结果
终端输出示例:
[INFO] RET demo started
[INFO] Language: Chinese
[INFO] Image model loaded: ret_zh_img_256as.img
[INFO] Text model loaded: ret_zh_text77s.img
[INFO] Vocabulary loaded: cn_vocab.txt
[INFO] Detection started...
[INFO] Person detected, saving frame...
[INFO] Feature extracted and saved
[INFO] Database generation completed
[INFO] Text search started
[INFO] Query text: 穿红色衣服的人
[INFO] Searching...
[INFO] Top 5 results:
[INFO] #1: frame_00123.jpg (score: 0.91)
[INFO] #2: frame_00456.jpg (score: 0.85)
[INFO] #3: frame_00078.jpg (score: 0.79)
[INFO] Displaying results in PIP mode...
5.2.5 MOT Demo 运行结果¶
正常运行状态:
- HDMI 显示器显示视频画面
- 仅行人(class_id=0)和轿车(class_id=2)目标绘制彩色跟踪框,按
track_id取色(5 色循环:红、绿、蓝、黄、白) - 每个跟踪框上方显示
id:<track_id>文字标签 - 同一目标在所有帧中颜色与 id 保持一致
- 输入文件播放完后自动循环
终端输出示例:
vlm_version:vlm#xxxxx
model path is sdy36s.img
[INFO]:_SGS_DEMO_DispThread[...]: disp thread started, file=input/hqb.h264, fps=30
[INFO]:_SGS_DEMO_MotAlgoThread[...]: algo thread started
[INFO]:_SGS_DEMO_AppRun[...]: MOT demo running. Press 'p' to pause/resume, 'q' to quit.
5.2.6 SOT Demo 运行结果¶
正常运行状态:
- HDMI 显示器显示视频画面
- 检测阶段:全部检测框为黄色,自动选中面积最大的可跟踪目标(人/车)
- 跟踪阶段:被跟踪目标以绿色粗框高亮显示
- 目标丢失后绿色框消失,自动回检测态并在下一帧重新选择目标
终端输出示例:
[INFO]: SOT demo running. Auto-selects the largest target and tracks it.
[INFO]:_SGS_DEMO_AutoPickAndSetSot[...]: SetSot auto-pick idx [0] class=0 score=0.85
[INFO]:_SGS_DEMO_AutoPickAndSetSot[...]: SOT tracking started, class=0
5.2.7 SGPTV Demo 运行结果¶
正常运行状态:
- 串口终端输出每张图片的文字描述(
[RESULT_RAW]) - 首图自动预加载并输出描述
- 按
n切换下一张图片并输出对应描述
终端输出示例:
[INFO] VLM (sgptv) initialized
[INFO] Found 15 images in source/
[INFO] Pre-loading first image: source/ILSVRC2012_val_00000001.JPEG
[RESULT_RAW] A dog is standing on the grass.
[2/15] source/ILSVRC2012_val_00000002.JPEG
Press 'n' for next image, 'q' to quit: n
[RESULT_RAW] A group of people walking on a street.
5.2.8 VRET Demo 运行结果¶
正常运行状态:
- 逐条扫描 source 目录中的 H.264 码流,打印每条码流的最佳得分、step 与时间段
- 所有码流处理完毕后,打印得分最高的码流及其最佳片段对应的实际时间段
- 扫描完成后自动退出
终端输出示例:
[INFO] Found 3 H.264 streams in source/
[INFO] VLM (vret) initialized
[INFO] Query prompt encoded: "Departure video at the airport terminal"
[INFO] searching: source/clip_a.h264
[INFO] source/clip_a.h264 : best score=0.5231 at step 12 [1.60s ~ 1.87s]
[INFO] searching: source/clip_b.h264
[INFO] source/clip_b.h264 : best score=0.8642 at step 30 [4.00s ~ 4.27s]
==================== BEST MATCH ====================
file: source/clip_b.h264
score: 0.8642 (at step 30)
time segment: 4.00s ~ 4.27s
===================================================
5.3 常见问题¶
5.3.1 存储相关问题¶
REID/RET Demo 存储失败:
- 现象:特征数据库记录了图片路径,但实际图片未保存成功
- 原因:NFS 网络存储延迟高,I/O 速度不足
- 解决方案:使用 SATA 硬盘,确保硬盘正确挂载
硬盘挂载失败:
# 检查硬盘设备
ls /dev/sda*
# 格式化硬盘(如果需要)
mkfs.ext2 /dev/sda
# 挂载硬盘
mount -t ext2 /dev/sda /home/
# 验证挂载
df -h
5.3.2 显示相关问题¶
HDMI 无显示:
- 检查 HDMI 线缆连接
- 确认显示器输入源设置正确
- 验证 MI_DISP 和 MI_HDMI 模块已加载
- 检查显示分辨率设置
检测框/识别框不显示:
- 确认
/dev/fb0设备可访问 - 检查 SGS_GL 库是否正确链接
- 验证 framebuffer 权限
5.3.3 性能相关问题¶
检测速度慢:
- 降低输入视频分辨率
- 减少视频通道数量
- 调整检测阈值(
-d参数) - 使用性能更强的检测模型
多路视频不同步:
- 检查各路视频文件的帧率和分辨率
- 确保系统资源充足(CPU、内存)
- 考虑减少视频通道数量
5.3.4 模型相关问题¶
模型加载失败:
- 确认模型文件路径正确
- 检查模型文件完整性
- 验证模型文件权限
- 确认模型与芯片平台匹配
检测/识别精度低:
- 调整检测阈值(
-d参数) - 检查输入视频质量
- 确认使用正确的模型文件
- 考虑使用更高精度的模型
5.3.5 FR Demo 特定问题¶
人脸注册失败:
- 确保输入视频包含清晰人脸
- 检查输出目录写权限
- 验证模型文件完整性
识别不匹配:
- 确认注册时使用的特征文件正确
- 检查特征文件是否损坏
- 调整识别阈值
- 确保注册和识别使用相同模型
5.3.6 REID Demo 特定问题¶
数据库搜索无结果:
- 确认数据库文件(.bin)存在
- 检查查询图片格式和尺寸
- 调整相似度阈值(
-T参数) - 验证模型文件正确
图片保存不完整:
- 使用 SATA 硬盘而非 NFS
- 检查硬盘剩余空间
- 降低输入帧率(
-f参数)
5.3.7 RET Demo 特定问题¶
文本搜索无结果:
- 确认词表文件(vocab.txt)正确加载
- 检查输入文字编码(UTF-8)
- 验证语言设置(
-l参数)与词表匹配 - 确认数据库已生成
中文搜索乱码:
- 确保终端使用 UTF-8 编码
- 检查词表文件编码格式
- 验证输入文字编码正确
5.3.8 MOT Demo 特定问题¶
VDEC 缓冲区满(0xa008200f):
- 算法线程消费 Port 1 速度跟不上,可降低推流帧率(
-f参数)
track_id 文字标签不显示:
- 确认通过
-t指定了有效的 TTF 字库文件,或从demo/resource/default.ttf拷贝字库文件
track_id 频繁跳变:
- 检测阈值(代码中默认 0.25)较低可在遮挡时保持检测存活,但可能引入误检
stable_bbox=TRUE配合stable_sensitive=0.5有助于跨越短暂遮挡保持 track_id 一致性
5.3.9 SOT Demo 特定问题¶
目标跟踪漂移或丢失太快:
- 降低跟踪阈值(
-T参数) - 增大代码中
lost_times_end_track - 确保目标物体足够大(≥
template_min_width像素)
ALGO_VLM_Create / ALGO_VLM_Init 失败:
- 检查所有模型文件是否存在于指定路径,并与 VLM 库版本兼容
- 确认
-D、-s、-S三个模型参数都已正确指定
FB 绘制的边界框看不到:
- 确保 FB 设备(
/dev/fb0)可用 - 显示分辨率与 HDMI 输出模式匹配(1920x1080@60Hz)
5.3.10 SGPTV Demo 特定问题¶
输入目录打不开 / 目录里没有 JPEG:
- 确认
-i指定的目录存在且包含.jpg/.jpeg文件 - 程序会打印
[ERROR] Cannot open directory或[ERROR] No JPEG images found并退出
文字描述与图片不匹配:
- 确认 vision / head / decoder / embedding 四个模型与 JSON 配置目录版本一致
- 检查模型文件完整性
5.3.11 VRET Demo 特定问题¶
识别准确度不高:
- 调整
frame_step(编译期常量G_VRET_DEMO_VRET_FRAME_STEP,默认 4,改后需重新编译):偏小采样越密、越能凸显同一行为;偏大则单片段时间跨度更长、更利于识别连续动作
码流分辨率不一导致解码失败:
- 把
-W/-H设成目录中最大那条码流的分辨率 -W/-H不能小于最大码流(否则解码失败),也不要填 4096×4096 这种过大值(浪费解码缓冲内存)