刘海龙,张智栋,杨停停
(郑州大学 信息工程学院,郑州 450001)
机器视觉技术,是一门涉及人工智能、计算机科学、图像处理、模式识别等诸多领域的交叉学科。机器视觉主要采用外部设备来模拟人的视觉功能,从客观事物的图像中提取信息,进行处理并加以理解,最终用于实际检测、测量和控制[1]。传统的服务型机器人,通常在视觉方面采用传统的单向摄像,无法做到360°全向信息的收集,在一些特定的情况下存在一定的局限性,并不能很好地完成任务。随着时代的发展和进步,机器视觉领域也愈发成熟,在机器人方向的应用也越来越受到关注[2]。因此,本系统旨在实现将全景图片作为机器人的实际视觉信息,并由此驱动底盘运动,发布合适的角速度,从而完成全向寻人功能。
在本系统中,其核心问题是底盘驱动程序的设计。外界的信息来源为双目摄像头所拍摄的图片,系统实际进行实验时采用简易版双目摄像头,如图1 所示。
图1 双目鱼眼摄像头Fig.1 Binocular fish eyes camera
实现360°全景寻人,首先要获取双目摄像头的图片信息,并将前后两张图片进行展开、校准,并对校准后的图片做拼接、融合处理。
在得到的全景图片中,需要进一步确定图片中目标人体所在的位置。本系统将会采用中科视拓开源的SeetaFace2 算法来进行人脸的定位,其中人脸检测模块在FDDB 上的100 个误检条件下可达到超过92% 的召回率[3],通常可以完成日常需要的要求。
完成图片中人体的定位后,根据人脸中心像素点的横坐标,从而判断出人体在全景图片中的相对位置,并在ROS 操作系统中,与机器人运动底盘进行通信,发布与之对应的角速度信息,完成转向,从而实现寻人功能。
2.1.1 展开
由于双目鱼眼摄像头的张角为220°,实际所获图片为球形压缩图片,因此要将获取的图片进行展开。展开时需用到公式(1)进行经度坐标修正。
设原球形压缩图片的半径为R,其中一个像素点的坐标为(x,y),展开后的图片对应像素坐标为(u,v),图片中心点坐标为(x0,y0),根据坐标变换图像,可得两者对应的关系为[4]:
图2 坐标变换图Fig.2 Coordinate transformation diagram
由此导出x与(u,v) 的函数关系为:
设图片中R的值为800,并取x0=y0=R,则当u∈[R,2R]、v∈[R,2R]时,绘制出函数f的图像如图3 所示。
图3 f 的函数图像Fig.3 Function image of f
在实际转换中,考虑到x0≈y0≈R,并且要保证展开图有较好的完整性,在本系统中实际采用的变换公式为:
本系统进行测试时参数a =1.5、b =0.95。a值主要影响边界的剪裁,b值主要影响径向展开的曲率。设图片中R的值为800,当u∈ [0,2R],v∈[0,2R]时,绘制出函数g的图像如图4 所示。
图4 g 的函数图像Fig.4 Function image of g
系统运行效果如下所示。其中图5、图7 为未经处理的鱼眼球型压缩图像,图6、图8 为其展开后的效果图。
图5 鱼眼双目摄像头原图像1Fig.5 Fish eyes binocular camera original image 1
图6 双目摄像头展开图像1Fig.6 Binocular camera deployment image 1
图7 鱼眼双目摄像头原图像2Fig.7 Fish eyes binocular camera original image 2
图8 双目摄像头展开图像2Fig.8 Binocular camera deployment image 2
2.1.2 融合与拼接
完成球形压缩图片的展开后,若直接进行拼接处理,则两图片的交界处会出现重影,因此需要进一步对处理后的图片做融合处理。通常分为3 个步骤:
(1)对每幅图进行特征点提取;
(2)对特征点进行匹配;
(3)完成图像的融合与拼接。
此时,使用OpenCV 官方提供的高度集成API函数Stitcher即可完成对应图片的拼接。Stitching拼接算法的流程[6]如图9 所示。应用效果如图10、图11 所示。
图9 Stitching 拼接算法流程图Fig.9 Flow chart of stitching algorithm
图10 未进行融合拼接的全景图片Fig.10 Panoramic image without fusion stitching
图11 经由Stitching 算法拼接后的全景图片Fig.11 Panoramic image stitched by stitching algorithm
完成全景图片的合成后,需要在所获得的目标图片中准确判定出人体所在位置。在本系统中,采用中科视拓开源Seetaface2 算法中的Detection 模块。该模块基于一种结合经典级联结构和多层神经网络的人脸检测方法实现,其所采用的漏斗型级联结构,专门针对多姿态人脸检测而设计[5]。而在该算法中,可直接将图片作为参数传入,将得到的全景图片进一步处理。调用FD 模块的Detect 方法,在返回的SeetaRect 指针中,存储着全景图片中所有人脸的左上角像素点的横纵坐标以及其所对应的宽度与高度,应用效果如图12 所示。
图12 Seetaface2 实际应用图Fig.12 Seetaface2 practical application diagram
设在全景图片中,某一人脸信息对应的SeetaRect 指针名为face,全景图片的列数为Matcol,底盘转动角速度为v。取逆时针为正方向,并定义position为人脸中心点在全景图片中所处位置的比例值。则有:
其中,(i =1,2,3,.....) 。由此引申出底盘角速度v_angel与position 的函数关系f:
至此,本系统建立了一种由双目摄像的分离图片到底盘运动角速度的一种实时映射。考虑到每个人对应的positon都会随该系统的运动而发生实时变化,也同样需要实时地向运动底盘发送与之对应的v_angel,这使得该系统在面对各种方向的正朝者时,都可以做到发布正确角速度并转向正确的方位,并调整positon位于0.2~0.3 之间的位置,即一定范围内的正朝向,至此完成底盘驱动工作方式的理论设计。
本系统的测试涵盖正向侧面、反向侧面以及正反向边缘交界处3 个方位。由此观察本系统能否完成正确的方向转换,并将完整的程序搭载在ros 操作系统环境下。在实际测试用机器人中进行数据的收集,系统设定的转速v =0.25 rad/s,效果图如下所示:
(1)正向侧面过渡至正朝向,如图13-15 所示。
图13 正向侧面图1Fig.13 Front side view 1
可以看出,随着机器人自身的运动变化,人体所对应的position也在实时变化,而根据v_angel与position的映射关系,该系统总是能够向底盘发布合适的角速度信息,完成正确的转向。
图14 正向侧面图2Fig.14 Front side view 2
图15 正朝向图1Fig.15 Facing Figure 1
(2)反向侧面过渡至正反向边缘交界处,如图16、图17 所示。
图16 反向侧面图Fig.16 Reverse side view
图17 正反向交界处Fig.17 Edge junction
(3)正反向边缘交界处过渡至正朝向,如图18、图19 所示。
图18 正向侧面图3Fig.18 Front side view 3
图19 正朝向图2Fig.19 Facing Figure 2
本文提出了一种由全景图片作为机器人视觉信息的构想,并由此驱动底盘进行全向寻人的模型,对如何由双目鱼眼摄像头所获取的图片进行展开与融合、拼接的方式做了较为详细的阐述,在全景图片的基础上,利用SeetaFace2 算法对图片进行正向人脸的检测,从而确定人体位置,并由其返回结果向底盘发布合适的角速度信息进行转向。本系统的创新之处在于将全景图片应用于传统的服务型机器人,对未来服务型机器人广阔的应用场景及发展方向提供了一定的创新价值与实际应用价值。