当前位置: 首页 > news >正文

Linux_53:ROCKX+RV1126人脸识别推流项目讲解

目录

1.本项目的介绍

2.本项目程序的大体框图

3.本项目程序的思维导图


1.本项目的介绍

本项目主要呈现的功能是通过采集摄像头的视频数据,并通过人脸识别把名称显示到VI数据,并推送到流媒体服务器上面。这个项目运用的功能很多,包括了rockx人脸检测、识别功能,sqlite3数据库存储人脸功能,rkmedia的VENC编码功能,rkmedia的VI采集功能,ffmpeg推流、OPENCV画框描绘文字功能。

这个项目大部分功能都和第一阶段的功能点很像,包括vi采集数据、VENC编码、 FFMPEG推流等功能。所以我们这个项目的特色是在第一阶段推流的基础上添加了rockx识别VI摄像头的人脸识别、sqlite3存储人脸特征值、对比数据库人脸特征和摄像头的人脸数据特征、OPENCV画框描绘文字等功能。

2.本项目程序的大体框图

上图是rv1126+rockx人脸识别推流的大体框图,这个项目首先要初始化模块和队列容器。模块包括两个VI模块,第一个VI模块是用于ROCKX的人脸检测、人脸识别的AI推理,第二个VI模块用于显示推理结果。除了模块外,还需要初始化容器和队列,容器包括Map容器(主要是存储人脸数据库的特征值和人脸名称)、视频编码队列。

初始化所有东西后,则需要使用四个线程去处理,分别是rockx_vi_handle_thread线程、show_vi_thread线程、camera_venc_thread线程、video_push_thread线程。rockx_vi_handle_thread线程主要功能是读取第一个模块的VI数据,并使用rockx框架对VI数据进行人脸检测和人脸识别:当检测到人脸数据后,先进行人脸过滤,然后再调用人脸识别API对其进行人脸特征值的提取,并把摄像头提取的人脸特征和数据库的人脸特征进行对比,若相似度<=1.2则认为是同一个人,若识别到同一个人则输出这个人的名字。

show_vi_thread线程主要是获取第二个VI模块的摄像头数据,然后获取rockx_vi_handle_thread线程的人脸坐标和人脸名称,并用opencv显示到第二个VI模块里面,然后把处理后的VI数据推送到VENC编码器里面。

camera_venc_thread线程主要是获取VENC编码器的数据,并把每一帧的VENC码流数据存放到H264的VIDEO_QUEUE的视频队列。

video_push_thread线程从VIDEO_QUEUE的视频队列获取每一帧的视频编码数据,然后再利用FFMPEG流媒体推流框架,把视频编码数据传输到流媒体服务器(主要是RTMP服务器)。

3.本项目程序的思维导图

上图是rockx+1126人脸识别的程序思维导图框图,这个项目的main函数是整个项目的入口函数。在这里入口函数里面,需要做四个比较重要的步骤:分别是init_rkmedia_module_function初始化rkmdia的组件、初始化编码视频队列HIGH_VIDEO_QUEUEinit_face_data初始化数据库的人脸数据、init_rv1126_first_assignment开启RV1126的人脸识别推流任务。

2.1. init_rkmedia_module_function初始化组件:

这个函数主要是做RKMEDIA的组件初始化,组件包括:AI推理的VI模块的初始化、视频显示的VI模块初始化、VENC模块的初始化

2.1.1. AI推理模块的VI模块初始化:这个VI模块主要是用于rockx的人脸检测、人脸识别的推理

2.1.2.显示的VI模块初始化:这个VI模块主要是用于显示rockx处理的结果,包括人脸检测的坐标信息和人脸识别后的名称

2.1.3.VENC模块的初始化:初始化H264的编码模块

2.2.初始化HIGH_VIDEO_QUEUE

初始化1920 * 1080分辨率编码数据队列,这个队列主要是存储1920 * 1080编码的视频数据,主要是用于多线程处理

2.3. init_face_data初始化数据库的人脸数据:

查询sqlite3人脸数据库的人脸特征值和姓名,并通过map容器进行key->value存储,key保存人的名称、value保存的是人脸特征值

2.4. init_rv1126_first_assignment开启RV1126的人脸识别推流任务

这个函数里面有五个步骤,分别是init_rkmedia_ffmpeg_context初始化1920 * 1080分辨率的ffmpeg推流器、创建rockx_vi_handle_thread线程、创建show_vi_handle_thread线程、创建camera_venc_thread线程、创建high_video_push_thread线程。

2.4.1. init_rkmedia_ffmpeg_context初始化1920 * 1080的推流器

在这个函数里面主要是对FFMPEG推流器参数进行设置,它需要对高分辨率(1920 * 1080)的FFMPEG推流器进行初始化。

2.4.2.创建rockx_vi_handle_thread线程

这个线程的作用是通过rockx框架对VI数据进行人脸检测、人脸识别处理,然后把人脸检测的坐标信息和人脸识别的名称保存起来。

2.4.3.创建show_vi_handle_thread线程

这个线程的作用获取显示VI的摄像头数据,然后获取rockx_vi_handle_thread线程处理的坐标信息和人脸名称,并用opencv显示上去,然后把处理后的VI数据发送到VENC编码器。

2.4.4.创建camera_venc_thread线程

这个线程主要功能是获取VENC编码器的码流数据,并且把VENC的码流数据存放到high_video_queue的视频编码队列里面,high_video_queue视频队列主要是为了推流线程用的。

2.4.5.创建video_push_thread线程

这个线程主要功能是获取high_video_queue队列的视频编码数据,并利用FFMPEG流媒体框架把H264码流推送到RTMP流媒体服务器。

http://www.jsqmd.com/news/793537/

相关文章:

  • STM32时钟树配置避坑指南:从HSE到PLL,手把手教你调出72MHz系统时钟
  • AI Agent记忆进化:从静态存储到主动学习的六阶段循环体系
  • MCP协议实战:为AI助手集成Perplexity实时搜索能力
  • Google Translate PHP测试驱动开发:确保翻译质量的最佳实践指南
  • CANN/ops-nn LayerNorm算子
  • Open3D 点云切片【2026最新版】
  • 为什么头部AI Lab已全员切换SITS2026?揭秘其内置的4层语义校验引擎与实时可观测性埋点设计
  • 别再手动传包了!用K8s InitContainer + BusyBox 5分钟搞定Tomcat应用自动部署
  • CANN/asc-devkit浮点到整型转换
  • 人才梯队断层、模型迭代滞后、跨职能撕裂——AI团队三大生死症结,SITS2026已开出临床级处方
  • 浅谈Mysql的哈希索引及特点
  • Python+AI
  • 【限时解密】SITS大会未公开议程泄露:下一代缓存协议Cache-LLMv2将于Q3强制接入HuggingFace生态?
  • 《如果你还愿意等》的搜索理由:等待场景怎样被记住
  • 创业公司利用Taotoken多模型能力进行A/B测试以优化产品效果
  • 基于Dify工作流构建游戏客服多智能体协作系统实践
  • CANN/asc-devkit:__ll2float_ru函数
  • AI原生Embedding优化黄金公式(SITS 2026认证级调优框架首次公开)
  • SunEditor自定义插件开发:从零开始构建你的专属功能
  • Windows AI智能体安全沙盒:MachineY Engine四层隔离与部署指南
  • 大语言模型合并实战:用mergekit融合Llama与WizardLM构建全能AI
  • 终极django-htmx性能优化指南:如何减少网络请求并提升用户体验 [特殊字符]
  • CANN/asc-devkit类型转换函数文档
  • 混合量子计算:qumode与qubit协同架构解析
  • CANN Ascend C断言函数API文档
  • SREWorks网关组件详解:构建高可用微服务治理体系 [特殊字符]
  • dnGrep搜索结果分析与报告生成:如何导出和分享搜索数据
  • retrying部署指南:在不同Python版本和环境中的兼容性终极教程
  • ARM Cortex-R7低功耗架构设计与动态RAM保留技术
  • 告别虚拟机!Win10+Ubuntu 18.04双系统保姆级安装指南(含BIOS设置与分区避坑)