一.本项目的介绍

本项目基于视频采集与人脸识别技术,主要实现以下核心功能:通过摄像头采集视频数据,利用人脸识别技术将识别结果实时叠加到视频画面上,并推送至流媒体服务器。系统整合了多项关键技术模块,包括:
- RockX人脸检测与识别模块
- SQLite3人脸特征数据库存储系统
- RKMedia视频采集(VI)与编码(VENC)模块
- FFmpeg流媒体推送功能
- OpenCV图像标注与文字叠加功能
相比第一阶段的基础推流功能,本项目的创新点在于:
- 新增RockX人脸识别功能
- 实现SQLite3人脸特征数据库管理
- 开发人脸特征比对算法
- 集成OpenCV实时标注功能
这些扩展功能使系统在保持原有视频采集、编码和推流能力的基础上,具备了完整的人脸识别与标注能力。
二.本项目程序的大体框图

上图展示了RV1126+Rockx人脸识别推流系统的整体架构框图。该系统首先需要初始化核心模块和队列容器:模块部分包含两个VI模块,其中第一个VI模块负责基于Rockx框架的人脸检测与识别AI推理,第二个VI模块用于显示推理结果;容器部分包括Map容器(用于存储人脸特征数据库)和视频编码队列。
系统初始化完成后,通过四个并行线程实现功能处理:
-
rockx_vi_handle_thread线程:从第一个VI模块获取视频数据,利用Rockx框架进行人脸检测与识别。该线程会先对人脸数据进行过滤处理,随后提取人脸特征值并与数据库进行比对(相似度阈值设为1.2),识别成功后输出对应人员姓名。
-
show_vi_thread线程:从第二个VI模块获取视频数据,结合rockx_vi_handle_thread线程提供的人脸坐标和识别结果,使用OpenCV进行可视化渲染,并将处理后的视频数据推送至VENC编码器。
-
camera_venc_thread线程:负责从VENC编码器获取数据,并将每帧H264编码视频存入VIDEO_QUEUE队列。
-
video_push_thread线程:从VIDEO_QUEUE队列获取编码数据,通过FFMPEG框架将视频流推送至RTMP等流媒体服务器。
三.本项目程序的思维导图

RV1126人脸识别系统架构说明
项目入口函数(main)主要流程
- init_rkmedia_module_function - 初始化RKMEDIA组件
- 初始化HIGH_VIDEO_QUEUE - 创建高分辨率视频编码队列
- init_face_data - 加载人脸数据库数据
- init_rv1126_first_assignment - 启动人脸识别推流任务
3.1 RKMEDIA组件初始化
3.1.1 AI推理VI模块
- 负责为RockX框架提供视频输入
- 用于人脸检测和识别推理
3.1.2 显示VI模块
- 处理并显示RockX的处理结果
- 包括人脸坐标和识别名称
3.1.3 VENC模块
- 初始化H264视频编码器
3.2 高分辨率视频队列
- 创建1920×1080分辨率编码数据队列
- 用于多线程视频数据处理
3.3 人脸数据初始化
- 从SQLite3数据库加载人脸特征数据
- 使用map容器存储(key:姓名, value:特征值)
2.4 人脸识别推流任务
2.4.1 FFMPEG推流器初始化
- 配置1920×1080分辨率的FFMPEG推流参数
2.4.2 RockX处理线程
- 使用RockX框架进行人脸检测和识别
- 保存人脸坐标和识别结果
2.4.3 显示处理线程
- 获取摄像头视频数据
- 叠加RockX处理结果(坐标/名称)
- 使用OpenCV显示处理结果
- 将数据发送至VENC编码器
2.4.4 编码器线程
- 获取VENC编码数据
- 存入high_video_queue编码队列
2.4.5 视频推流线程
- 从队列获取H264编码数据
- 通过FFMPEG推送至RTMP服务器