80、实时监控系统--------实时监控系统

80、实时监控系统--------实时监控系统 实时监控系统项目描述该项目是基于QT实现的实时监控系统最多支持25路视频流实时监控为保证识别流畅同时利用显卡识别并计算物品识别人物和物品等。封装自定义视频处理窗口重写paintEvent事件重绘样式。利用ffmpeg实现视频解码、显示和处理的相关功能并且实现计算线程在独立线程中采用opencv处理图像数据避免阻塞UI根据yolo智能模型圈选并且识别物品种类等包括黑名单报警。个人职责实现以下功能:a视频流的初始化和连接1从视频流中读取编码数据包(AVPacket)2将数据包解码为原始视频帧(AVFrame)3检测视频分辨率变化并适配4将原始YUV格式视频帧转换为RGB格式5将RGB图像数据转换为QImage并发送给UI进行显示●实现计算线程逻辑ⅰ发送处理开始信号(sendProess(false))ⅱ将输入图像转换为Format_RGB888格式ⅲ将QImage转换为OpenCV的Mat格式ⅳ使用YOLOv8进行目标检测ⅴ在图像上标注检测到的对象类别ⅵ将处理后的Mat转换回QImageⅶ发送处理后的图像(sendImage)ⅷ发送处理完成信号(sendProess(true))项目构成项目由两部分组成1 GUI2 FFMPEG核心解码和计算流程源码剖析主函数去查找XCoreWidget.ui中文件综上所述FFMPegWidget就是用来做显示的底层通过thread从视频流中解码并且投递给m_QXProcessObject对象计算QXProcessObject对象计算后投递给FFMPegWidget显示图像。相关问题1 如何实现视频流抽取我们通过FFMpeg从视频流中抽取原始的YUV格式的帧放到数组中再通过FFMPEG提供的转换函数将YUV格式转换为RGB32彩色带透明度的图片缓存进一步调用QImage构造函数构造图像。最后将图像传输到UI线程显示。2 你在做这个项目遇到什么问题抽取视频流时解析的格式不对最开始是YUV格式直接用YUV格式生成图片发现无法显示后来查阅资料将YUV转为RGB32才生效。3 计算线程的效率跟不上抽取线程怎么办计算逻辑线程处理的速率跟不上抽取视频流的线程导致计算逻辑线程的线程队列太大所以采用反向通知的方式动态控制计算线程的队列大小当队列大小超过阈值时发送信号通知抽取线程放弃一部分视频帧。4 采用何种方式封装线程继承于QThread, 一种移动到Thread中信号连接采用默认方式跨线程就是队列了。若有收获就点个赞吧