基于GD32F450 的视频监控终端的设计
2023-03-10冯帅左官芳范阳
冯帅,左官芳,范阳
(1.南京信息工程大学电子与信息工程学院,江苏南京 210044;2.无锡学院电子信息工程学院,江苏无锡 214105)
随着智能家居和共享经济的兴起,近年来物联网市场呈现指数级增长态势[1],其中视频监控终端备受关注。无论是在安防监控行业,还是在智能家居、快递物流等行业,视频监控表现出不可或缺的作用。常见的有线视频监控系统需要人工布线,步骤麻烦且影响美观,同时只能在本地查看视频,达不到无线视频监控可以随时随地查看且不占资源的效果。
沈朝[2]等人设计的监控系统就是采用传统的网络布线,虽然实现了高清图像传输,但是存在高带宽传输占用率大、本地存储量有限以及不能远程观看等问题。林玩杰[3]等人采用JPEG 对视频数据进行压缩编码,并传给客户端APP 进行播放,克服了传统的有线视频监控的不足,但是需要连接WIFI 才能进行视频数据传输。缪腾[4]等人设计了一种4G 移动高清视频监控系统,虽然实现了远程观看视频,但是还存在传输速度较慢、帧数没有达到理想值等问题。
针对上述问题,该文设计并实现了基于GD32F450的视频监控终端。该视频监控终端通过4G 通信模块与上位机连接,监控终端通过摄像头采集图片,利用DCT 压缩编码,将压缩完成的JPEG 数据传输至上位机进行显示,获得了良好的监控效果。
1 系统工作原理
监控终端采用兆易创新的GD32F450 单片机为主控芯片,外设有摄像头采集模块、显示屏模块、4G通信模块以及上位机。软件方面采用keil 集成开发环境,上位机采用C++以及OpenCV 集成开发环境,采用模块化编程,实现了将现场图片DCT 压缩编码,并实时传输到上位机中。具体流程:摄像头采集模块定时采集一张240×272 大小的RGB565 图片存在SDRAM 中,并显示在屏幕上。RGB565 图像数据先经过分量填充转换为RGB888 图像数据,接着RGB888 经过单片机DCT 压缩编码后生成JPEG 图像数据,单片机通过串口将压缩后的JPEG 图像数据由4G 通信模块经TCP 协议发送给花生壳服务器,花生壳服务器经内网穿透后将数据发给上位机软件,上位机最终通过OpenCV 库将数据进行解码显示。该终端系统框图如图1 所示。
图1 监控终端系统框图
2 系统硬件设计
该文的系统硬件设计由GD32F450 单片机主控模块、4G 通信模块、摄像头采集模块、显示模块、花生壳服务器以及上位机组成。
2.1 GD32F450单片机主控模块
GD32F450 是一种基于ARM Cortex-M4 RISC内核的新型32 位通用微控制器[5],最高频率可达200 MHz,具有丰富的外设资源,在增强处理能力、降低功耗方面具有最佳的性价比。Cortex-M4内核具有FPU浮点单元,可加速单精度浮点数学运算,支持所有浮点运算。
该监控终端采用兆易创新GD32F450I-EVAL 全功能评估板,利用板载摄像头、液晶显示屏、SDRAM进行图像信息的采集。GD32F450 全功能评估板如图2所示。
图2 GD32F450全功能评估板
2.2 4G通信模块
该终端的通信模块采用广和通L610 4G 通信模块,L610 是一款基于LTE Cat1 bis 无线通信模组,产品支持LTE、GSM 双模通信。L610 系列模块是一款支持多种网络制式、多频段的宽带无线终端产品。监控终端将采集后的图片经过压缩处理,由L610 4G通信模块的TCP/IP 协议传输到上位机中。L610 电路图如图3 所示。
图3 L610通信模块电路
2.3 摄像头采集模块
该终端的摄像头采集模块使用OV2640 图像传感器,该传感器体积小、工作电压低。OV2640 具有200 万像素以及标准的SCCB 协议接口,兼容I2C 协议接口,支持RGB565、RGB555、YUV 等输出格式,非常适合嵌入式应用开发,OV2640 实物如图4 所示。
图4 OV2640摄像头
3 系统软件设计
在Keil5 软件平台上进行单片机程序设计开发,主要包括主程序软件设计、DCT图像压缩编码程序设计、上位机显示程序设计三个部分。主函数通过调用各个模块的函数封装接口完成系统功能的初始化,各个模块之间通过全局变量进行数据的交互和传递。
3.1 主程序软件设计
主程序设计流程图如图5所示。单片机初始化完成后,开始对摄像头模块、LCD 屏幕、4G 通信模块等外设进行初始化。初始化完成后,单片机控制4G 通信模块开启TCP 透传模式,单片机通过DMA 通道获取摄像头采集的RGB 图像原始数据,并实时显示在LCD 屏幕上。与此同时,在单片机获取RGB原始图像时对其分块进行DCT 压缩编码,压缩完成后得到JPEG 数据流,然后通过4G 通信将数据流传输到花生壳服务器中,最终上位机获取到服务器传来的数据,并通过OpenCV对其进行图像解码,并进行实时显示。
图5 主程序设计流程图
3.2 DCT图像压缩编码程序设计
随着现代图像采集设备性能的不断提高,对现代通信和数据存储系统也提出了更高的要求。解决这个问题的方案是有损压缩标准,它允许在合理的图像质量损失的情况下大幅度减少多媒体数据的大小。目前广泛使用的静态图像和视频序列有损压缩标准,采用了分块量化,即首先在线性变换域对输入数据进行去相关处理,然后再对其进行标量量化。这里常用的线性变换是离散余弦变换即DCT 变换。
为了提高传输速率,减少传输数据量,该文采用以DCT 为基础的JPEG 编码。利用ARM-Cortex-M4内核的GD32F450 微处理器将原始的RGB 数据压缩编码成JPEG 数据流,同时对图像编码中的DCT 变换进行了优化改善。其JPEG 图像压缩编码流程图如图6 所示。
图6 JPEG图像压缩编码流程图
由图6 可知,DCT 图像压缩编码主要包括图像预处理、DCT 变换、量化、Huffman 编码四个过程[9-12]。首先将输入的RGB 原始图像数据进行预处理,也就是将RGB 格式转换成YUV 格式,然后将图片分割成8×8 的像素块,像素值经过DCT 变换转变成DCT 系数,然后DCT 系数经过量化变成量化后的DCT 系数,DCT 系数分为AC 系数和DC 系数,它们分别进行编码,最后再对编码后的AC 系数和DC 系数进行Huffman 编码。
DCT 二维变换与IDCT 二维变换定义如公式(1)和公式(2)所示。DCT 图像压缩编码的具体软件实现流程如图7 所示。
图7 DCT压缩编码实现具体软件流程图
DCT 变换:
IDCT 变换:
DCT 压缩编码具体流程:单片机通过DMA 通道获取到SDRAM 中的图像数据后,就开始进入JPEG_TEST() 函数。先定义图像源数据指针JSAMPLE *image,然后创建一个压缩信息对象Cinfo结构体,接下来通过给变量对象赋值使得Cinfo=JPEG_create_compress()。通过调用JPEG_set_default(Cinfo)函数设置JPEG 压缩的默认参数,使得Cinfo 结构体的Precision、quality 成员变量分别为8 和1.0f,通过设置默认最小像素块为8×8,就可以得到最高的图像品质因素。默认参数设置完成后,调用jint_std_quant_tables(Cinfo)函数进行预处理,接着调用JPEG_start_compress(Cinfo)函数将图像数据进行分块处理,并放入缓冲区,调用JPEG_write_scanline(Cinfo,&image)函数读取分块的图像数据,并对其进行DCT 压缩,最后调用JPEG_finish_compress(Cinfo)函数完成最后一次压缩,将尾帧写入压缩完成的数据中,最后输出JPEG 压缩数据流。之后将压缩完成的数据流通过4G 模块传至上位机进行显示。
3.3 上位机显示程序设计
该终端的上位机采用QT和OpenCV(Open source Computer Vision library)进行编写,QT 是一个跨平台的C++开发库,主要用来开发图形用户界面程序。QT 内置了图像处理、音视频处理、网络通行等功能。OpenCV 是一个开源的计算机视觉库,支持多种编程语言如C/C++、Python、Java 等,OpenCV 现支持深度学习和机器学习的一些算法和框架,并且正在日益壮大[13-16]。
该终端通过4G 通信模块将压缩完成的JPEG 数据传至花生壳服务器,在上位机界面输入本机,接入花生壳服务器的IP 地址及端口号。点击开始监听,监听成功后,上位机开始接收端口数据并判断是否为帧头FF D8。如果一包的帧头为FF D8 就开始组包,组包完成后并判断帧尾是否为FF D9,如果不是就重新组包。组完一包数据后,就开始调用OpenCV库中的imdecode()函数对一包数据进行解码,解码完成后,调用cvtcolor()函数来转化格式,最终将解码完成后的图片通过控件显示在上位机中。上位机软件设计的流程图如图8 所示。
图8 上位机软件设计流程图
4 系统测试与分析
4.1 功能测试
系统硬件主要由GD32F450 单片机主控模块、4G 通信模块、摄像头采集模块、显示模块、花生壳服务器以及上位机组成。
DCT 压缩编码关键参数之一的质量因子可以设置为1~100,其中质量因子数值越小,压缩比越大,传输速度也就越快。单片机将采集的图片进行DCT压缩编码后进行传输,测得原始图像数据为130 kB,接下来将质量因子设置为1,发现压缩编码后只有3 kB 左右,数据量只有原来的1/43,如表1 所示。传输原始图像数据需要15 000 ms,而传输DCT 压缩编码后的数据只需300 ms,通过对比发现传输速度提高了近50 倍。
表1 图片压缩前与压缩后对比表
图9 是视频监控终端采集的图片,其显示在屏幕上,图10 是经压缩编码后传输到上位机的图片。
图9 视频监控终端采集图片
图10 上位机显示采集图片
4.2 分 析
原始RGB 图像数据传输需要15 000 ms 左右,而经过单片机编码分包传输只需要300 ms 左右,同时上位机利用OpenCV库可以实时对传输的数据解码并显示。经过测试发现,该终端工作稳定、系统运行良好、图像传输速度较高,具有一定的市场应用前景。
5 结论
该终端采用GD32F450 单片机实现了DCT 快速算法结合余弦系数查表法的图像压缩算法,并通过4G 模块上传至上位机进行OpenCV 解码显示。利用GD32F4 单片机200 MHz 主频的Cortex-M4 内核和图像处理加速器,能显著提高压缩速度,可以实现对图像信号实时、高效率压缩,压缩过的数据量只为原来的1/43,传输速度提高了近50 倍。该监控终端具有操作灵活、界面交互友好、传输数据快、工作稳定等特点,具有一定的市场应用前景。