时间:2024-05-04
梁飞 何英杰 孙丰
(成都工业学院 四川省成都市 611730)
随着通信技术和物联网技术的快速发展,以及智慧城市的广泛建设,大量的服务器集群和网络设备被使用。为了保证设备的正常运行,需要网管维护人员24小时内定时针对这些机房设备的运行状态指示灯进行巡检,这种方法费时费力,而且还容易出现漏看,错看的情况[1]。随着科技发展,也有机房装配了高清摄像头来获取图像,进而通过后台数据进行设备运行状态分析,但是这些都适用于设备状态指示灯处于明显位置,并且图片数据不多的情况。而服务器集群或网络设备一般都是放在机柜的机架上的,设备的指示灯很不明显,而且一个机柜会装配多个设备,指示灯的密度和个数也会很多,机柜空间狭小,无法放置大型的摄像头设备,只能使用多个小型设备进行指示灯覆盖检测。机柜中设备安装好后,其位置一般也会固定下来,指示灯的位置也会固定下来。本文针对机房机柜设备巡检场景的深入分析,使用微处理器STM32F407VGT6和摄像头OV2640,设计开发了一款低成本,小型化,用于机房设备巡检的指示灯颜色智能识别系统,该系统可与用户后台管理系统连接,方便客户实时获取机房设备指示灯的工作状态,不仅节省了人力成本,对于设备故障的反应也更加及时。
图1:系统总体设计框图
图2:系统硬件电路
本系统通过摄像头获取到设备面板的RGB图像,然后在图像上标定指示灯位置。得到标定位置后,主控系统对设备面板指示灯进行定时图像采样,在采样过程中,使用处理器内部双缓存对收到的每一帧RGB图像的像素进行连续分块处理,根据坐标映射快速找到标定点像素。为了避免光线对颜色的影响,这里还需要对标定点像素转换到HSV颜色空间,通过色度H,饱和度S以及亮度V判断出灯光颜色。系统总体设计框图如图1所示。
主控部分采用STM32F407ZET6微处理器,该处理器的主频为168MHz,内存为192KByte,具有一个数字摄像头(DCMI)接口,能够接收外部 8 位、10 位、12 位或 14 位 CMOS 摄像头模块发出的高速数据流,可支持YCbCr4:2:2/RGB565 逐行视频或JPEG压缩数据格式。DCMI 接口可以配置成与处理器内部DMA相连,然后通过DMA 进行数据的快速传输。
颜色采集部分使用摄像头OV2640,采用RGB565格式输出,输出尺寸为200W像素。摄像头的图像数据是在PCLK,HREF和VSYNC三个信号的控制下进行输出的[2]。其中PCLK为像素时钟,一个PCLK 时钟,输出半个像素。HREF 为行同步信号,控制每一行的输出每一行是由1600列像素组成。VSYNC为帧同步信号,控制每一帧的输出,一帧图像是由1200行像素组成。系统主要硬件电路如图2所示。
图3:系统流程图
图4:像素坐标与缓存区的映射图
图5:HSV颜色空间
本系统首先配置摄像头拍摄1600*1200像素的JPEG图片,并对图像中设备指示灯位置进行标定,得到以原始图像左上角为原点,以像素为单位的指示灯坐标(xi,yj),存储在片内flash中。因为JPEG图像与RGB565图像的像素都是1600*1200,并且设备和摄像头相对位置不会改变,所以同一个摄像头拍的图像中设备指示灯的坐标位置在两种格式的图像中是一致的。系统得到指示灯位置坐标后,将完成以像素为单位的坐标到以RGB565字节为单位坐标的转换,同时将切换摄像头输出RGB565数据,并将图像输出配置为通过系统内部DMA输出到双缓存区,利用DMA双缓存中断,将一帧图像数据进行分块处理,根据指示灯像素位置在每一块缓存区中对应的字节坐标,从而获取到该指定位置的RGB565像素值。为了避免图像数据丢失,这里只是先保存指定位置的像素点,而不做处理,直到一帧完整的图像数据传输完成后,再进行RGB颜色空间映射到HSV空间进行处理。系统流程图如图3所示。
本系统处理的一帧图像像素为1600*1200,每一个RGB565像素点包含2个字节,总共有3750K字节数据,这么大的存储空间需求对于终端处理设备的资源来说,是很紧张的。需要将一帧完整图片像素数据通过DMA分时传入不同的缓存区。由于控制器的DMA可以访问的内存大小为128K字节,图像列字节数为3200字节,综合考虑图像处理时间设置每个缓存区占12行图像数据,总大小为37.5K字节,这样对于双缓存区系统,每个缓存区需要被使用50次。根据摄像头图像帧输出时序,每一行字节传输时间约为9μs,要存满一个缓冲区,需要的时间约为108μs。这个时间也是系统使用另一个缓存区处理图像数据、进行识别的时间,对于主频是168MHz的主控芯片来说,是完全可以处理完成的。
图6:灯光颜色测试环境
本系统得到上位机标定的指示灯位置坐标(xi,yj)是以像素为单位的,通过摄像头得到的RGB565数据是以字节为单位的,2个字节才能表示一个像素。系统在处理整帧RGB565数据时,是将整帧字节数据分时使用双缓存存储,得到2个字节的指定点的像素表示,所以需要将像素坐标X(xi,yj)转换到相应的字节坐标B(xi,yj)。转换完成后,再将字节数据分时传入双缓存区进行分块处理。像素坐标映射到缓存区对应字节原理如图4所示。
由图4可知,一帧完整图像的总像素大小表示为xc*yr,xc表示图像像素列数,yr表示图像像素行数;因为一个像素点由2个字节组成,所以对图像横轴像素进行放大2倍处理,纵轴不变,就得到该完整图像的字节表示,任一像素点(xi,yj)对应的字节坐标为(2xi-1,yj),(2xi,yj),其中xi∈[1,xc],yj∈[1,yr]。在进行缓存区设置时,为方便设计,考虑以图像列数的倍数来分配双缓存区,在进行双缓存分时存储时,利用公式(1)可得到指定的像素坐标对应于双缓存区交替使用时的编号n。
式中yj为图像用字节表示时,以列字节数为一行时的所在行数,l为缓存区以图像列字节数为一行时的总行数。因为双缓存是分时交替使用的,当n为偶数时,指示灯坐标所在像素表示的字节在一个缓存区,为奇数时,数据在另一个缓存区。通过这种方式,可以找到数据所在缓存区,然后通过公式(2),公式(3)可以得到缓存区中指示灯位置的像素所在2字节地址addr1和addr2,从而可以得到这两个地址中的像素字节。
表1:调整后的HSV颜色空间颜色区间
系统获得指示灯颜色的RGB565像素字节后,不能直接进行识别处理,因为RGB颜色空间是将颜色识别常用的色调、亮度和饱和度3个参数融合在一起,很难分开,而指示灯工作环境会有光线强弱的变化,从而显示出来的颜色会有色差,这会导致RGB颜色识别准确度很差[3]。
为方便进行颜色之间的对比,本系统采用了能直观的表达色彩的明暗,色调,以及鲜艳程度的HSV颜色空间进行颜色识别。在HSV颜色空间中,色环H为颜色的波长,称为色调,它反映了最接近颜色的光谱波长,就是平常说的颜色的名称,采用角度进行表示,比如红色为0°,绿色为120°,蓝色为240°;S表示颜色接近光谱色的程度,称为饱和度,颜色空间表示为从色环的中心到色点的半径长度,长度越大色彩越纯,小则逐渐变灰,取0-255的数值。V表示颜色明亮的程度,对于光源色,V值与发光体的光亮度有关,值越大,亮度越高,反之亦然,通常取值范围为0%(黑)到100%(白),在颜色空间中表示为底部到顶部的垂直线。HSV颜色空间如图5所示。
要进行HSV空间的处理,需要将得到指示灯的RGB数据中R值,G值,B值转换成H值,S值,V值[4]。使用公式(4),公式(5),公式(6)先计算出R、G、B三分量中的最大值M、最小值m及其差值∆:
对得到的最大值、最小值及其差值,使用公式(7),公式(8),公式(9)进行处理,得到相应的H值、S值、V值。
机房设备指示灯颜色一般分为红、黄、绿、蓝、黑(灯灭)这5种情况,而且灯光颜色会出现偏差,所以在得到指示灯的H值,S值,V值后,要根据HSV颜色空间中不同颜色区间参数表,在一定范围内进行颜色判断[5]。本系统使用的HSV颜色区间参数表是经过实验做了一些改进调整之后的表,主要考虑到色差的问题,根据需求把颜色范围扩宽了些,调整后的HSV颜色空间颜色区间如表1所示。
本文使用STM32F407ZET6开发板和OV2640摄像头组成系统来验证设计功能,将摄像头位置固定后,对不同颜色的指示灯进行亮灯操作,然后对标定的位置灯光颜色进行识别,从而得到指示灯运行状态信息,测试环境如图6所示。在室内环境下,针对指示灯显示红色,黄色,绿色,蓝色,黑色(灯灭)这几种情况,让不同颜色灯光常亮,进行多次静态测试,该系统都正确识别出相应的灯光颜色。
本文应用了物联网边缘计算的思想,通过对图像数据存储空间分析,以及HSV颜色区间分析,设计了一种可以在终端设备上进行设备指示灯颜色识别系统,主要采用了MCU内部双缓存机制,通过对图像字节数据向双缓存区进行映射处理,将大数据进行分块,在终端就完成了指示灯颜色识别,对于集群服务器设备进行智能化巡检提供了一个很好的低成本解决方案。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!