首页 > 系统相关 >基于LVGL9.0、FFmpeg、OpenCV的Linux智能家居监控安防系统(含演示视频)

基于LVGL9.0、FFmpeg、OpenCV的Linux智能家居监控安防系统(含演示视频)

时间:2024-07-25 15:59:29浏览次数:16  
标签:视频 FFmpeg 温湿度 智能家居 应用程序 OpenCV MQTT 线程 驱动程序

文章目录

介绍

智能家居监控安防系统是一个集成监控、安防、人脸识别、环境监测、家居控制的一体化系统。

它包含5大模块,分别是:

  • 视频监控:支持查看摄像头、拍照、录像、直播和检测到人体时自动拍照,支持同时开启或单个开启,支持浏览图片和视频文件;
  • 人脸识别:人脸前后比对检测,模拟人脸识别开门的场景;
  • 报警设置:检测到人体时自动报警,通过蜂鸣器模拟报警;
  • 环境检测:当前环境的温湿度检测,通过MQTT协议通信;
  • 家居控制:通过MQTT协议控制LED灯,模拟真实家居控制场景;

硬件层面

IMX6ULL开发板、1024×600 LCD、摄像头、DHT11温湿度传感器、SR501人体红外传感器、蜂鸣器。

在这里插入图片描述

软件层面

技术栈

用户空间库:FFmpeg libav*、OpenCV、paho.mqtt.cpp

网络协议:MQTT、RTSP、WebRTC

流媒体服务器:mediamtx

MQTT broker:mosquitto

GUI:LVGL

编程语言:C++

项目构建:CMake

驱动程序

在Linux系统中,要操控硬件,需要编写对应的驱动程序,应用程序通过字符设备文件与之对应的驱动程序进行通信,实现对硬件的控制。

本项目开发了如下 Linux 驱动程序:

  • DHT11温湿度驱动程序
  • LED驱动程序
  • 蜂鸣器驱动程序
  • SR501人体红外感应驱动程序

应用程序

应用程序分为4个,用于模拟真实的MQTT通信场景,分别如下:

  • 主程序:实现相关功能,并通过MQTT协议与其他应用程序进行通信;
  • LED应用程序:订阅 led 主题,当接收到相关指令是进行远程开关灯操作;
  • DHT11应用程序:订阅 dht11 和 dht11_read 主题,当接收到 dht11_read 主题时,读取温湿度,并通过 dht11 主题发送读取到数据;
  • SR501应用程序:当监测到人体时,发送 sr501 主题告知其他客户端;

项目设计

  • 视频监控采用多线程架构,分为捕获视频帧线程、转换线程、处理线程,通过互斥量和条件变量实现线程间的同步,提升并发性。
  • 使用双缓冲实现摄像头的显示,避免出现屏幕闪烁的情况。使用队列数据结构实现录像、直播对帧的处理,确保每一帧都得到处理。
  • 对 LVGL 进行 class 封装,采用链式调用的设计模式,实现 GUI 模块的快速开发。

可优化项

  • 加入onvif,实现 IPC(网络摄像机)功能;
  • 更换芯片,使用瑞芯微或海思芯片,使用MPP库进行编解码处理,利用硬件特性提升编解码速度;利用NPU加速提升识别算法速度,做到实时识别;
  • 将视频编码格式从H.264切换到H.265,提升压缩率;
  • 目前流媒体服务器部署在主机,可用live555等其他流媒体服务器,部署到开发板上,解耦;

演示视频

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="iTiJW6DR-1721886372839" src="https://live.csdn.net/v/embed/412278"></iframe>

标签:视频,FFmpeg,温湿度,智能家居,应用程序,OpenCV,MQTT,线程,驱动程序
From: https://blog.csdn.net/Leon_Chenl/article/details/140687654

相关文章

  • 使用OpenCV拼接2d直方图 - 合并cv2.detail.MatchesInfo
    我试图将多个二维直方图(二维数据数组)拼接在一起,其中直方图的水平轴和垂直轴是空间坐标,但不同直方图的原点可能会有所不同。因此,此任务需要在识别匹配特征后进行仿射变换,为此需要稍微修改OpenCV拼接管道(https://github.com/opencv/opencv/blob/4.x/samples/python/stitch......
  • C++ opencv putText
    C++opencv putText  #include<opencv2/opencv.hpp>intmain(){//创建一个空白图像cv::Matimg(400,400,CV_8UC3,cv::Scalar(255,255,255));//设置文本内容std::stringtext="Hello,OpenCV!";//设置文本起始坐标(左下角坐标)......
  • 如何使用OpenCV测量两条相交绳索的宽度和角度?
    下面第一张图是原始图像,显示了一个网络。网中的绳索有两种类型:粗绳和细绳。需要通过OpenCV区分哪些是粗绳,哪些是细绳,并分别测量它们的角度。importcv2importnumpyasnpdefmeasure_rope_width(image):gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)......
  • 如何使用OpenCV轨迹栏控制圆半径?
    我正在尝试添加一个opencv轨迹栏来调整我用于二进制掩模图像的圆半径值。问题是bitwise_and或bitwise_ortwe参数结果是相同的。掩模图像解释一下。|||这是我的代码:Here'smycode:---python#importopencvandnumpyimportcv2importnumpyasnp#Bla......
  • nvenc 用于 ffmpeg 硬件加速,使用 moviepy 生成损坏的 mp4
    我一直在尝试创建一个Python应用程序,它需要一个mp4文件、一个mp3文件和一个字幕字典来生成一个输出mp4文件。我让它工作得很好,但我发现libx264编解码器调用write_videofile()时会非常慢,尤其是使用CompositeVideoClip对象时。我想使用我的GPU来......
  • 我如何为 yolov5 制作 gui,从 pytorch 和 opencv 加载到 tkinker?
    请帮助我,我不明白如何使用yolo和tkinker作为gui来制作用于实时检测的gui。以及如何将边界框从pytorch渲染到tkinker?这里是代码:importtorchfrommatplotlibimportpyplotaspltimportnumpyasnpimportcv2model=torch.hub.load('ultralytics/yolov5......
  • FFmpeg 常用功能
    1.无损快速分割视频1.1:从01:45秒开始截取,一直到结束。备注:这个执行过程非常快。cdC:\MyFiles\FFmpeg\ffmpeg-v2022-03-09\ffmpeg\binffmpeg-i"D:\周星驰《功夫》.mp4"-ss00:01:45-codeccopy"D:\周星驰《功夫》_裁剪后.mp4"  1.1:从01:45秒开始截取,持续一分......
  • 使用OpenCV进行ROS 2的循线跟踪
    原文链接:https://www.youtube.com/watch?v=88y_1ovno8g InthisOpenClass,we'llexplorehowtoimplementaline-followingrobotusingOpenCVandROS2.在这堂公开课中,我们将探讨如何使用OpenCV和ROS2来实现一个循线跟踪机器人。 Youwilllearn:✏️ Introducti......
  • 【CentOS】CentOS7上安装使用ffmpeg
    安装CentOS7核心存储库中不提供FFmpeg:方案一、源码编译安装FFmpeg,方案二、使用NuxDextop存储库中的yum安装它。本文采用方案二 步骤一:启用EPEL仓库Nux存储库依赖于Epel软件存储库sudoyuminstallepel-release 步骤二:启用NuxDextop仓库sudorpm--importht......
  • 【全网独家】OpenCV 绘制形状
    OpenCV绘制形状在本教程中,我们将深入探讨OpenCV的绘制形状功能,包括其概念、应用场景、原理解释以及如何实现这些操作。我们还会提供示例代码,展示如何进行部署和测试,并附上相关材料链接。最后,我们将对未来的展望做一个总结。目录什么是绘制形状应用使用场景原理解释算法......