文章目录
介绍
智能家居监控安防系统是一个集成监控、安防、人脸识别、环境监测、家居控制的一体化系统。
它包含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等其他流媒体服务器,部署到开发板上,解耦;