基于红外人体检测的视频监控系统的设计

2022-05-06 13:32常富华纪松波
电子设计工程 2022年8期
关键词:开发板调用红外

常富华,纪松波

(内蒙古工业大学信息工程学院,内蒙古呼和浩特 010080)

随着全社会安防意识的提高,对于重要环境的监控需求也随之增加。目前,大多数安防监控系统中的视频监控模块采用的是24 h 录像设计模式,这种方式存在降低监控设备使用寿命的问题,同时浪费了设备的有效监控时长。基于以上问题,文中提出了一种基于ARM Cortex-A9芯片的视频监控系统,利用红外人体传感器完成24 h 不间断感应工作[1],采用H.265 技术进行视频压缩[2],运用摄像头进行视频采集,在网页客户端实现远程监控。该设计与传统监控模式相比,提升了监控设备采集有效视频信息的时长,减轻了监控设备储存监控视频的压力,同时该设计提升了设备的集成度,可以布置在多种应用场所。

1 系统硬件框架

硬件框架如图1 所示。该设计采用基于三星Cortex-A9 架构的Exynos4412 四核开发板作为终端。Cortex-A9 处理器性能优越、功耗较低,且具备NEON协处理器。协处理器具备单独的寄存器单元和硬件,可为8、16 位、32 位、64 位数据提供相应的向量运算处理,并为8 位数据提供16 路并行运算[3],被广泛运用于视频编码和图像加速等环境中。选用该处理器可为软件编码器提供稳定的硬件平台。

图1 红外监控系统硬件框架图

摄像头选用市面上常见的UVC(USB Video Class)摄像头。在硬件方面,摄像头的图像传感器将摄像头所采集的景象信息转化为电信号,电信号经过数模转换模块变为数字信号。在协议方面,UVC 是USB 标准化组织规定的一种视频设备数据交换协议,协议内部储存着多个抽象化模块,例如输入和输出单元,选择和处理单元等,分别定义了视频数据流的来源、视频输出流的终端、视频流的输出选择及对视频亮度、色度、对比度等参数的处理。UVC 协议为视频设备提供了一种通用模板,免去了安装设备驱动的繁琐操作[4]。当UVC 摄像头接入开发板后,相应驱动会根据协议所分析设备描述符得出的信息,完成对摄像头的控制。

HC-SR501 模块采用LHI778 传感。模块由两个极性相反,且具有高热电系数的传感器串联或并联构成,可抵消传感器本身工作时的热干扰。人体的温度相对恒定在37 ℃左右,发射10 μm 的人体特征红外波长。当外界热红外特征发生变化,红外信号被菲涅尔透镜汇集到PIR 表面,热释电传感器内部电荷平衡被打破,电路可通过检测释放的电荷来判断是否有人进入监控区域。该模块检测到人体时输出高电平,人体离开后输出低电平[5]。模块具备两种触发方式:可重复触发方式H 和不可重复触发方式L,通过跳线帽进行选择,文中系统采用不可重复触发方式。

2 系统软件框架

系统软件框架图如图2 所示。系统软件层主要包括在开发板上交叉编译并移植OpenCV[6]和x265 函数库到Linux 系统,编写红外传感器驱动程序,搭建NFS文件系统并移植mjpg-streamer和boa服务器。

图2 红外监控系统软件框架图

x265 函数库是一种基于H.265/HEVC 技术的免费开源函数库,由法国VideoLan 组织开发。H.265 技术主要具有帧内预测、高阶滤波、SAO(Sample Adaptive Offset)等功能[7],其中SAO 功能既保障了压缩图像质量,又抑制了码流的增加。

在程序中通过调用OpenCV 和x265 的函数库解决图像的数据采集和编码问题[8]。驱动程序负责定义CPU 控制传感器的方式。设计程序将视频录制压缩完成后,NFS(Network File System)文件系统将本地的视频文件共享到上位机中。通过编写html和cgi程序并且保存到boa 服务器中,配合mjpg-streamer可通过访问开发板的地址实时观看监控[9]。

3 程序设计

3.1 红外感应监控程序

如图3 所示,程序运行后,初始化定时器。定时时间为1 s,当定时时间截止时,触发打开红外模块的槽函数[10]。代码如下:

图3 红外感应监控流程图

槽函数实现针对红外传感器的打开和读取操作。调用open 函数查找设备节点路径进行打开,定义fd 整形变量,以保存设备的文件标识符,将fd 参数传入read 函数中读取传感器的状态[11]。代码如下:

检测到人体侵入后,首先定时10 s,再开启摄像头线程。线程中包含事件循环exex()函数,中止线程需要调用terminate 函数,再调用wait 函数中止同步。代码如下:

3.2 监控线程程序设计

监控线程程序如图4 所示。

图4 监控线程流程图

1)打开摄像头

运用OpenCV 可以方便地打开摄像头并且获取参数数据。调用VideoCapture 函数创建一个实例。打开摄像头需要向VideoCapture 函数传入摄像头的编号,该系统的摄像头编号参数为4[12]。代码如下:

2)视频编码与保存

①获取视频图像的宽w和高h。图像的大小为w×h。为图像申请缓存,采用I420 格式,缓存空间为图像大小的3/2 倍。

②配置编码器相关参数,代码如下:

在关键帧前面重复sps 和pps:

③配置待压缩图像数据,pic_in 为通过调用x265_picture_alloc()函数为待压缩图像分配内存,代码如下:

④分别对原始图像的Y、U、V分量区域转换为待压缩图像数据,代码如下:

⑤压缩图像,代码如下:

在使用while(1)循环编码视频数据时,由于编码函数处理时间较长,需调用 QApplication::processEvents()函数避免程序进入“假死”状态[13]。

4 实验结果

4.1 红外监控测试

系统运行,红外模块检测到人体经过后,摄像头启动并且在终端上打印x265 编码器参数信息。参数内容主要包括软件编码器自动识别的运行系统的软硬件环境参数、摄像头分辨率参数及编码器初始化配置信息等,主要参数信息如下所示:

4.2 网页实时监控测试

修改开发板boa 服务器的boa.conf 文件,将“DocumentRoot/var/www”修 改 为“DocumentRoot/www”。将设计好的html 文件和css 文件拷贝到开发板根目录下的预设“www”文件夹,用来处理客户端的请求[14]。在浏览器中输入开发板的IP 地址,输入密码后调用html,运用mjpg-streamer 流化视频,在网页可显示实时监控画面。

4.3 监控压缩对比

调用NFS 系统将服务器的视频保存到上位机中。该设计分别将原始视频文件与压缩后的视频文件进行保存和对比。摄像头分辨率为720 p,录制时间10 s,原始格式为yuv,压缩后格式为h265[15],通过potplayer 播放器进行播放。

如图5和图6所示,原始YUV文件大小为72.3 M,压缩后H265 文件大小为256 kB,压缩比为289.5 倍。

图5 原始监控视频属性

图6 压缩后监控视频属性

5 结论

文中设计提出了基于Cortex-A9 处理器,在Qt+Linux 系统上运用OpenCV+H.265 和红外传感器,搭建浏览器+服务器(B/S)架构[16]的嵌入式实时监控。重点介绍了红外监控的流程及运用x265 库进行视频采集和压缩编码的关键代码。监控视频运行流畅,有效节约了储存空间,做到随时监控与实时监控,对于监控行业的发展提供了可借鉴的思路。

猜你喜欢
开发板调用红外
网红外卖
闪亮的中国红外『芯』
基于STM32H7的FDCAN通信系统设计与实现∗
核电项目物项调用管理的应用研究
8路红外遥控电路
TS系列红外传感器在嵌入式控制系统中的应用
系统虚拟化环境下客户机系统调用信息捕获与分析①
浅析单片机开发板的设计与制作
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
利用RFC技术实现SAP系统接口通信