一种高速公路收费员微笑率统计方法及系统与流程

文档序号:22389199发布日期:2020-09-29 17:53阅读:228来源:国知局
一种高速公路收费员微笑率统计方法及系统与流程

本申请涉及机器识别技术领域,具体涉及一种高速公路收费员微笑率统计方法及系统。



背景技术:

我国高速公路里程长收费站多,因此从事高速公路收费工作的工作人员也比较多。随着倡导微笑服务的背景下,很多行业都把微笑纳入到工作考核中,高速部门也不例外。

传统技术中,高速公路部门对收费员进行微笑率统计时一般是通过回放收费亭的录像,然后人工进行记录考核,从录像中对每一位收费员的服务微笑次数进行统计。

上述方法虽然可以对高速公路收费人员的微笑率进行统计,但是通过回放录像筛选出收费人员的微笑画面效率低,而且会存在偏差。



技术实现要素:

本申请为了解决上述技术问题,提出了如下技术方案:

第一方面,本申请实施例提供了一种高速公路收费员微笑率统计方法,基于openmv,所述方法包括:建立高速收费站的人脸图像库,所述人脸图像库中包含不同收费员脸部不同表情以及佩戴遮饰下的图像;通过openmv的分类器对人脸进行检测;检测到人脸后通过lbp特征进行人脸分辨;根据人脸分辨确定出收费员的信息并在oled屏上匹配显示当前收费员的姓名;当有车辆行驶至收费亭接待车道里,车道地下埋的感应线圈将感应到的车辆信息发送给openmv;当收费员转身时openmv执行人脸追踪;openmv调用训练好的笑脸模型进行笑脸检测;在接收到微笑数据后对微笑率进行统计。

采用上述实现方式,利用openmv采集到图像信息并进行和事先建立好的图像库信息做对比,当图像信息吻合时确定上班的收费员。车道感应线圈检测到收费站车道里有车辆等接待时,再每次检测收费员转身时的表情并调用openmv设置好的笑脸神经模型做对比判断此表情是否为微笑,从而确定出收费员的微笑率。

结合第一方面,在第一方面第一种可能的实现方式中,所述通过openmv的分类器对人脸进行检测,包括:用不同的图片从设定的窗口中不断移位滑动,每张图片滑过时计算对应图片的特征信息;通过训练好的级联分类器对特征信息进行筛选,如果通过筛选,则检测到的是人脸信息。

结合第一方面,在第一方面第二种可能的实现方式中,所述检测到人脸后通过lbp特征进行人脸分辨,包括:提取当前拍摄的人脸特征,然后抽取图像库中每个人每张图片的特征;将每个人的人脸信息取平均值信息,将每个平均值信息与当前拍摄的人脸特征进行对比,计算图像库中某一个人与当前拍摄的人脸的差异度;根据所述差异度确定当前拍摄的人脸对应的收费人员。

结合第一方面,在第一方面第三种可能的实现方式中,所述当收费员转身时openmv执行人脸追踪包括:openmv检测到人脸后通过api获取人脸再画面中的位置;根据人脸位置距离画面中心的x轴于y轴的偏移量,通过pid控制中的p比例控制二自由度云台水平舵机和垂直舵机的旋转角度;将角度信号通过串口通讯发送给arduinonano模块,以使得人脸尽量在画面的正中间。

结合第一方面,在第一方面第四种可能的实现方式中,所述openmv调用训练好的笑脸模型进行笑脸检测包括:在人脸检测的roi区域内来进行笑脸匹配;如果人脸中微笑程度与训练好的笑脸模型相似度在预设范围内,则认为是一张笑脸,反之为非笑脸。

第二方面,本申请实施例提供了一种高速公路收费员微笑率统计系统,基于openmv,所述系统包括:图像库建立模块,用于建立高速收费站的人脸图像库,所述人脸图像库中包含不同收费员脸部不同表情以及佩戴遮饰下的图像;人脸检测模块,用于通过openmv的分类器对人脸进行检测;人脸识别模块,用于检测到人脸后通过lbp特征进行人脸分辨;人员确定模块,用于根据人脸分辨确定出收费员的信息并在oled屏上匹配显示当前收费员的姓名;车辆检测模块,用于当有车辆行驶至收费亭接待车道里,车道地下埋的感应线圈将感应到的车辆信息发送给openmv;人脸追踪模块,用于当收费员转身时openmv执行人脸追踪;笑脸检测模块,用于openmv调用训练好的笑脸模型进行笑脸检测;微笑率确定模块,用于在接收到微笑数据后对微笑率进行统计。

结合第二方面,在第二方面第一种可能的实现方式中,所述人脸检测模块,包括:图片信息计算单元,用于用不同的图片从设定的窗口中不断移位滑动,每张图片滑过时计算对应图片的特征信息;人脸信息检测单元,用于通过训练好的级联分类器对特征信息进行筛选,如果通过筛选,则检测到的是人脸信息。

结合第二方面,在第二方面第二种可能的实现方式中,所述人脸识别模块,包括:提取单元,用于提取当前拍摄的人脸特征,然后抽取图像库中每个人每张图片的特征;比对单元,用于将每个人的人脸信息取平均值信息,将每个平均值信息与当前拍摄的人脸特征进行对比,计算图像库中某一个人与当前拍摄的人脸的差异度;确定单元,用于根据所述差异度确定当前拍摄的人脸对应的收费人员。

结合第二方面,在第二方面第三种可能的实现方式中,所述人脸追踪模块包括:获取单元,用于openmv检测到人脸后通过api获取人脸再画面中的位置;控制单元,用于根据人脸位置距离画面中心的x轴于y轴的偏移量,通过pid控制中的p比例控制二自由度云台水平舵机和垂直舵机的旋转角度;信号发送单元,用于将角度信号通过串口通讯发送给arduinonano模块,以使得人脸尽量在画面的正中间。

结合第二方面,在第二方面第四种可能的实现方式中,所述笑脸检测模块包括:匹配单元,用于在人脸检测的roi区域内来进行笑脸匹配;判断单元,用于如果人脸中微笑程度与训练好的笑脸模型相似度在预设范围内,则认为是一张笑脸,反之为非笑脸。

附图说明

图1为本申请实施例提供的硬件构架示意图;

图2为本申请实施例提供的一种高速公路收费员微笑率统计方法的流程示意图;

图3为本申请实施例提供的特征提取示意图;

图4为本申请实施例提供的lbp特征像素点比较示意图;

图5为本申请实施例提供的bit链的示意图;

图6为本申请实施例提供的一种高速公路收费员微笑率统计系统的示意图。

具体实施方式

下面结合附图与具体实施方式对本实施例进行阐述。

随着阿尔法狗与柯洁的围棋大战,人工智能成功进入了大众的视野,计算机视觉作为人工智能已经很成熟的一项技术。openmv4是一个开源,功能强大的机器视觉模块。以stm32h7为核心,集成了ov5640摄像头芯片,在体积小巧灵活的硬件模块上,用c语言高效地实现核心机器视觉的算法,openmv搭载micropython解释器,这允许你在嵌入式上使用python来编程(python3tobeprecise).python使机器视觉算法的编程变得简单得多。

首先介绍下本实施例涉及的硬件构架,参见图1,包括openmv模块、arduinonano模块、oled屏、感应线圈模块、舵机驱动模块、垂直旋转舵机和水平旋转舵机。

arduinonano模块分别与openmv模块、oled屏、感应线圈模块和舵机驱动模块通信连接。所述舵机驱动模块分别与垂直旋转舵机和水平旋转舵机通信连接,用于接收arduinonano模块发送的指令信息,控制垂直旋转舵机和水平旋转舵机。

参见图2,本实施例提供的高速公路收费员微笑率统计方法包括:

s101,建立高速收费站的人脸图像库,所述人脸图像库中包含不同收费员脸部不同表情以及佩戴遮饰下的图像。

本实施例中选择一张小于或等于的32gsd内存卡用来保存拍照收费员各种表情头像图片。在sd卡建立singtown文件夹,再从其中建立n个(n为收费站收费员人数)子文件依次命名为s1、s2、s3、s4...ns。openmv通过数据线连接电脑后在openmvide电脑软件运行预设程序,采集不同收费员的人脸样本。采集时人脸可以微笑、不笑、歪头、正脸、戴眼镜、戴口罩等,大概每人采集十张图片左右。这样图片都保存在sd卡相应的文件夹内了,也就建立好了某收费站的图像库。

预设程序如下:

#snapshotexample

#note:youwillneedansdcardtorunthisexample.

#youcanuseyouropenmvcamtosaveimagefiles.

importsensor,image,pyb

red_led_pin=1

blue_led_pin=3

sensor.reset()#initializethecamerasensor.

sensor.set_pixformat(sensor.grayscale)#orsensor.grayscale

sensor.set_framesize(sensor.b128x128)#orsensor.qqvga(orothers)

sensor.set_windowing((92,112))

sensor.skip_frames(10)#letnewsettingstakeaffect.

sensor.skip_frames(time=2000)

num=1#设置被拍摄者序号,第一个人的图片保存到s1文件夹,第二个人的图片保存到s2文件夹,以此类推。每次更换拍摄者时,修改num值。

n=10#设置每个人拍摄图片数量。

#连续拍摄n张照片,每间隔3s拍摄一次。

while(n):

#红灯亮

pyb.led(red_led_pin).on()

sensor.skip_frames(time=3000)#givetheusertimetogetready.等待3s,准备一下表情。

#红灯灭,蓝灯亮

pyb.led(red_led_pin).off()

pyb.led(blue_led_pin).on()

#保存截取到的图片到sd卡

print(n)

sensor.snapshot().save("singtown/s%s/%s.pgm"%(num,n))#or"example.bmp"(orothers)

n-=1

pyb.led(blue_led_pin).off()

print("done!resetthecameratoseethesavedimage.")

s102,通过openmv的分类器对人脸进行检测。

在人脸匹配之前肯定先进行人脸检测,就是先检测到人脸后再进行分辨。人脸检测就是在检测时用不同的图片从我门设定的窗口中不断移位滑动,每张图片滑过时都会计算该图片的特征,然后用训练好的级联分类器对该特征进行筛选,一但通过筛选,则认为检测到人脸了。上述这种就是用到了haar特征来检测人脸,haar特征的基本原理就是认为不同区域的像素值是不同的。

比如说,一张人脸的眼睛和非眼睛区域是不同的,眼睛要比脸颊颜色要深,嘴巴要比脸颊颜色更深等情形。这些特征都称为harr特征,特征提取过程如图3所示。通常就是这样执行上千次的比较来决定所检测的对象是否为人脸。因为openmv中的分类器已经经过预训练,可以直接用于人脸检测,所以分类器的过程就不多述。

s103,检测到人脸后通过lbp特征进行人脸分辨。

lbp简单来说,就是对图像中的某一像素点的灰度值与其邻域的像素点的灰度值做比较,如图4所示。

如果邻域像素值比该点大,则赋为1,反之,则赋为0,这样从左上角开始,可以形成一个bit链,然后将该bit链转换为一个十进制的数,用表达式可以表达如下:

其中,s表示一个阈值函数,满足如下关系:

s(x)=1,x≥0

s(x)=0,x=0

通过这种转换,可以将一个像素点与邻域的差值关系用一个数表示,因为lbp记录的是像素点与邻域像素的差值关系,所以光照变化引起像素值的同增同减不会改变lbp的大小,特别是在局部的区域,我们可以认为光照对图像造成的像素值变化是单向的,所以lbp可以很好的保存图像中像素值的差值关系。可以进一步将lbp做直方图统计,这个直方图可以用来作为纹理分析的特征算子。

r表示邻域的半径,p表示邻域像素的个数或者bit链的长度,如果邻域的半径为1,则邻域的像素个数为8,bit链的长度为8,如果邻域半径为2,则邻域的像素个数为16,bit链的长度为16,如图5所示。

考虑最简单的r=1,p=8的情况,lbp映射成一个0-255之间的某一数值,如果用直方图表示,需要一个256维的数组在存储这个直方图。为了缩小存储空间,有人提出了uniformpattern的编码方式,根据一个bit链中0,1之间的转换次数定义了uniformpattern。如果一个bit链中,0,1之间的转换次数不超过两次,那么这个bit链就是uniformpattern,比如,00000000转换次数为0,00001111转换次数为1,00011100转换次数为2,01101100转换次数为4,01101010转换次数为6,那些转换次数不超过两次的pattern都属于uniformpattern,可以证明,绝大多数的binarypattern都是uniformpattern,通过这种定义,对于8bit的lbp,可以从256维降到59维,减少了90%。

因为计算lbp特征的图像必须是灰度图,所以在建立图像库时保存的都是灰度图。比如现在openmv正在看到一张脸拍摄下来,然后把这张人脸与图像库里样本人脸进行对比。比对的过程就是,先提取当前拍摄的人脸特征,然后抽取我们图像库中每个人每张图片的特征,每个人的这张脸都会取得一个平均值,最后将这个平均值与当前拍摄的人脸特征进行对比,计算图像库中某一个人与当前拍摄的人脸的差异度。比如图像库中保存有14个收费员的人脸,则需要计算14次,在这14个人脸中寻找与当前拍摄的人脸最接近的。特征的相识度越小,那么当前拍摄的人脸与图像库中的某个人脸更相似,更匹配,这样就可以输出图像库中比对的结果,就可以确定当前拍摄的人脸是谁的,输出保存图像库子文件夹的名字。

s104,根据人脸分辨确定出收费员的信息并在oled屏上匹配显示当前收费员的姓名。

openmv通过串口通讯输出人脸匹配上的子文件夹的名字给arduinonano模块,adrdinonano接收到后发出相应指令让oled屏显示之前设定好所有收费员名字的相应名字,则就显示当前上班人员名字。

s105,当有车辆行驶至收费亭接待车道里,车道地下埋的感应线圈将感应到的车辆信息发送给openmv。

当有车辆行驶至收费亭接待车道里,车道地下埋的感应线圈就感应到,将信号发送给arduinonano模块,在接收到这个信号后通过串口通讯发送给openmv。

s106,当收费员转身时openmv执行人脸追踪。

因为收费员在接车的时候需要转身,为了提高微笑识别的速度和正确性,故在收费员转身的时候进行人脸追踪。要实现人脸追踪前,首先肯定要检测到人脸。检测人脸在已经描述过了,在这不再描述。openmv检测到人脸后通过api获取人脸再画面中的位置,根据人脸位置距离画面中心的x轴于y轴的偏移量,通过pid控制中的p比例控制控制二自由度云台水平舵机和垂直舵机的旋转角度,将角度信号通过串口通讯发送给arduinonano模块,执行对应的操作,从而使人脸尽量在画面的正中间。具体控制如下:

1、当检测到人脸在画面的右侧时让水平舵机向右旋转一定角度,这样就可以让人脸回到中间。

2、当检测到人脸在画面的左侧时让水平舵机向左旋转一定角度,这样就可以让人脸回到中间。

同理垂直方向也是一样,知道舵机旋转的方向,下一步就是要知道舵机旋转的幅度。这时我们需要参照偏移量(偏移量指的是人脸中心偏移画面中心的值)、实际值(实际量指的是人脸区域中心在画面中坐标的x轴取值)、目标值(人脸中心的x轴坐标的目标值是整个画面宽度的一半,如果画面分辨率为600x400,那么对x轴来讲目标值=300)关系为:

偏移量=实际值-目标值

则就可以根据偏移量的正负值得到舵机角度的旋转方向(角度增大还是减小)。因为舵机是用可变宽度的脉冲来进行控制,所以就可以拿偏移量和脉冲宽度寻找一个比例关系k。确定好比例关系k后就可以根据偏移量变化,舵机就怎么旋转。当然y轴同理,这样就可以实现人脸的追踪。

s107,openmv调用训练好的笑脸模型进行笑脸检测。

图像分类的实现方法很多,但是有一种卷积神经网络(cnn)的神经网络特别擅长图像的分类。为了实现检测笑脸功能,我们将使用openmv定义的笑脸模型。该网络为三层卷积神经网络,组成如下:

convolutionlayer-负责从图像中提取特征。

dropoutlayer-负责通过在训练阶段忽略随机节点来避免过拟合。

rectifiedlinearunit(relu)-负责在模型中引入非线性的激活函数。如果收到任何负输入,该函数将返回0,但是收到任何正值x时,它将返回该值。

poolinglayer-负责逐步缩小模型的空间大小,减少网络中的参数数量和计算量,因而也控制过拟合。

因为在openmv中笑脸的数据集和训练模型都是提前做好的,我们只需直接调用训练好的笑脸模型进行检测笑脸。

在前面的人脸检测的roi区域内来进行笑脸匹配,如果人脸中微笑程度与训练好的模型近似度相似的话,则认为是一张笑脸,反之为非笑脸。检测笑脸和非笑脸结果都通过串口通讯发送给arduinonano模块。

s108,在接收到微笑数据后对微笑率进行统计。

在接收到微笑情况后,arduinonano统计微笑情况。统计算法为:微笑率=微笑次数÷(微笑次数+非微笑次数)。arduinonano统计好微笑率后让oled屏显示结果。这就完成的显示着,当前上班的收费员和微笑率是多少。

由上述实施例可知,

与上述实施例提供的一种高速公路收费员微笑率统计方法相对应,本申请还提供了一种高速公路收费员微笑率统计系统的实施例,参见图6,高速公路收费员微笑率统计系统20包括:图像库建立模块201、人脸检测模块202、人脸识别模块203、人员确定模块204、车辆检测模块205、人脸追踪模块206、笑脸检测模块207和微笑率确定模块208。

图像库建立模块201,用于建立高速收费站的人脸图像库,所述人脸图像库中包含不同收费员脸部不同表情以及佩戴遮饰下的图像。人脸检测模块202,用于通过openmv的分类器对人脸进行检测。人脸识别模块203,用于检测到人脸后通过lbp特征进行人脸分辨。人员确定模块204,用于根据人脸分辨确定出收费员的信息并在oled屏上匹配显示当前收费员的姓名。车辆检测模块205,用于当有车辆行驶至收费亭接待车道里,车道地下埋的感应线圈将感应到的车辆信息发送给openmv。人脸追踪模块206,用于当收费员转身时openmv执行人脸追踪。笑脸检测模块207,用于openmv调用训练好的笑脸模型进行笑脸检测。微笑率确定模块208,用于在接收到微笑数据后对微笑率进行统计。

进一步地,所述人脸检测模块202,包括:图片信息计算单元和人脸信息检测单元。所述图片信息计算单元,用于用不同的图片从设定的窗口中不断移位滑动,每张图片滑过时计算对应图片的特征信息。所述人脸信息检测单元,用于通过训练好的级联分类器对特征信息进行筛选,如果通过筛选,则检测到的是人脸信息。

所述人脸识别模块203包括:提取单元、比对单元和确定单元。提取单元,用于提取当前拍摄的人脸特征,然后抽取图像库中每个人每张图片的特征。比对单元,用于将每个人的人脸信息取平均值信息,将每个平均值信息与当前拍摄的人脸特征进行对比,计算图像库中某一个人与当前拍摄的人脸的差异度。确定单元,用于根据所述差异度确定当前拍摄的人脸对应的收费人员。

所述人脸追踪模块206包括:获取单元、控制单元和信号发送单元。所述获取单元,用于openmv检测到人脸后通过api获取人脸再画面中的位置。所述控制单元,用于根据人脸位置距离画面中心的x轴于y轴的偏移量,通过pid控制中的p比例控制二自由度云台水平舵机和垂直舵机的旋转角度。所述信号发送单元,用于将角度信号通过串口通讯发送给arduinonano模块,以使得人脸尽量在画面的正中间。

所述笑脸检测模块207包括:匹配单元和判断单元。所述匹配单元,用于在人脸检测的roi区域内来进行笑脸匹配。所述判断单元,用于如果人脸中微笑程度与训练好的笑脸模型相似度在预设范围内,则认为是一张笑脸,反之为非笑脸。

需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当然,上述说明也并不仅限于上述举例,本申请未经描述的技术特征可以通过或采用现有技术实现,在此不再赘述;以上实施例及附图仅用于说明本申请的技术方案并非是对本申请的限制,如来替代,本申请仅结合并参照优选的实施方式进行了详细说明,本领域的普通技术人员应当理解,本技术领域的普通技术人员在本申请的实质范围内所做出的变化、改型、添加或替换都不脱离本申请的宗旨,也应属于本申请的权利要求保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1