一、项目简介
单目摄像头无法同时获得大视野和高分辨率,同时市面上的多目实时视频拼接系统不仅体积庞大,而且价格高昂。针对此种现象,本文提出一种以并行架构为基础的嵌入式多目实时视频拼接系统,搭载在GPU模块上,在满足视频拼接需求的同时体积小巧,移植性强,能够满足多场景应用的需求,推广市场广阔。
二、研究背景及意义
视觉是我们获得现实世界中客观信息最直接和重要的途径,80%以上的信息都可以通过视觉来获得。随着我国现代通用电子技术、多媒体以及科学信息技术的不断进步和社会飞速发展,越来越多的中国年轻人已经开始学习使用了新型数码相机、摄像器、镜头等摄像仪器,人们对于图像信息的实时收集和分析获取也更加需要依靠数码图像和数字视频。
视频的高度集中度大多采用单一的设备进行,单一的设备所能获取到的视野区域范围相对较小,虽然我们可以直接通过手动调节焦距来增大其视野,但是这样做会大大地降低其分辨率,而且即便这样做了,所获得的视野范围也仍然远不及正常人眼的视场,由于每一时刻只能采集到一个视野范围,这种方法只适用于获取图片,而无法获取实时的视频。在需要监控一个大场景时,现有方法可以采用拥有较大视角的镜头如鱼眼镜头和广角镜头等获得大视角的监控,但这些镜头会使得视频内容出现严重畸变。
图像拼接技术能够有效地解决这一问题。图像拼接技术是将数张有重叠部分的图像(可能是不同时间、不同视角或者不同传感器获得的)拼成一幅大型无缝高分辨率图像。所谓视频拼接的实时性,指的是对于视频拼接系统能够实时地完成视频图像的采集、影片拼接和输入显示的整个过程的性质,即对于一种视频拼接系统需要能够在每一帧影片采集的必要时间之内,能够完成上一帧影片采集得到的影片图像的拼接处理工作,做到每秒的拼接18帧以上,就可以令人有流畅的感觉。
三、拼接系统的设计与开发
计算机视觉和图像处理算法是计算密集型程序。越来越多的摄像头在捕获高分辨率图像时,需要实时处理这些大图像。随着这些算法采用CUDA加速,图像分割、目标检测和分类等应用可以实现超过30帧/秒的实时帧率。CUDA和GPU允许对深度神经网络和其他深度学习算法进行更快的训练。
3.1 开发环境
3.1.1 硬件环境
本产品选用英伟达2019年最新推出的NVIDIA Jetson Nano GPU模块。 Jetson Nano小巧且功能强大。能够并行运行多个神经网络、对象检测、分割和语音处理等应用程序。
Jetson Nano拥有灵活的开发软件和完整的系统框架硬件支撑,内存容量和统一的总线内存管理子系统,使它能够同时自动运行多种不同的总线网络,从而达到全高清的图像分辨率。价格较低且性能完全能够胜任,能够稳定的运行。
3.1.2 软件环境
CUDA架构,计算统一设备架构(Compute Unified Device Architecture,CUDA)是由NVIDIA开发的一套非常流行的并行计算平台和编程模型[9]。
CUDA架构包括几个专门为GPU通用计算而设计的特性,这在早期的架构中是不存在的。它不仅允许对任意一个内存文件进行数据书写,还允许对内存进行读取访问。这些主要功能和应用特点已经让CUDA GPU架体结构使其在许多通用应用程序十分有用。所有的GPU均已经具备了我们称之为四个核心(Core)的并行处理功能单元。在软硬件功能结合设计方面,这些数据核心分别被划分成为流处理器和流多处理器。GPU有这些流多处理器的网格。在软件设计方面, CUDA程序主要是通过作为一系列可以并行操作的多线程(Thread)来实现和执行。每一条线程分别在不同的核心上执行。
OpenCV是一套计算机视觉库,最开始发展时就考虑到计算效率,并将焦点集中在实时性能上,用C/C++编写,包含一百多个有助于计算机视觉应用的功能。OpenCV的主要优点在于开源。由于OpenCV是轻量级的,也可以在Raspberry Pi这类嵌入式平台上使用,如果要在现实场景中的嵌入式系统上部署计算机视觉应用程序的话,OpenCV将理想的选择。
3.2 系统设计
3.2.1 架构设计
本系统使用并行架构处理方式,如图2,由多个线程组成,即每个摄像头和GPU模块对应一个线程,当摄像头获取到图像后会将信息传递给GPU模块,然后GPU模块处理后再把图像信息传递给服务器。当多个线程的图像信息汇集到服务器后,服务器对其进行拼接从而合成一副图像输出,当每秒输出帧数达到24帧以上时,人眼观察可认为实时的视频流输出,不会具有明显的卡顿感。
图1 并行架构图
这种架构方式让一个GPU运算单元独立运行一个线程,能够更加出色的发挥GPU的性能,使得计算速度更快,图像的拼接效率更高。专门服务器则保证了拼接算法的高效进行,从而能够在短时间内处理大量的数据。
3.2.2 软件设计
系统使用GPU对摄像头进行直接控制,对图像信息进行采集、处理、拼接。其详细工作原理为:采用C++多线程技术对摄像头进行多线程控制,每个子线程控制一个摄像头进行图像信息采集。主线程对各摄像头采集到的信息汇总处理并进行拼接。采用CUDA GPU加速算法。同时使用GPU加速,加速后输出的视频帧数很高,人眼可看到分流畅无卡顿的视频。
图2 程序流程图
程序流程图如图3所示,以线程一为例,首先调用打开摄像头,然后获取到摄像头的第一帧图像,通过线程一传递给主进程,其他线程均是如此。当所有线程的图像传递到主进程后,主进程开始拼接,程序初始运行时没有拼接参数的,首先寻找特征点进行SURF算法静态拼接,以此来获取第一帧的拼接参数。对图像进行特征点匹配的时候,首先提取图像的特征信息,对图像之间进行匹配。对特征点进行提取时,一方面是要最大程度上对特征点提取;另一方面是对特征点在提取过程中进行判别,提取具有图像特征性的特征点。然后再进行循环,这时判断为已获取拼接参数,然后按照拼接参数进行拼接输出。第一帧输出之后,再开始循环,获取下一帧,从而不断去进行动态输出,当输出的帧率足够快时便可得到实时的视频输出,进而达到多目视频实时拼接的效果。
Speeded Up Robust Features(SURF)算法是在SIFT算法的基础上提出的一种快速的特征提取和影像配准算法,该方法具有尺度不变性,适用范围广、稳定性较强。SURF算法提出一种积分图的简化计算和Hessian矩阵,完成特征点检测,提高影响特征点处理效率。SURF 算法主要由三部分构成,特征点检测,特征点描 述和特征匹配。SURF算法是建立于SIFT 算法的基础之上,为了解决SIFT 计算的复杂性与时效性差的问题。SURF采用积分图像与盒式滤波加速特征点的检测,特征描述上降低特征矢量的维度,以此实现效率的提高。
本算法在获取第一帧参数后,后续拼接不再进行参数获取,而是直接沿用第一帧的参数,不再逐帧进行计算,直接通过曝光补偿、波形矫正、调整掩膜、寻找拼接缝等操作进行图像融合,以此来提升帧数,节省算力,让拼接更加流畅。
在实现算法上的拼接之后,对其进行嵌入式的开发,GPU上使用Ubuntu系统,进行cmake编译,编译源代码使其生成库文件,让源代码能够在GPU中运行,从而实现嵌入式视频拼接。
3.3 结构设计
如图3为系统结构图。
图3 系统结构图
四、研发团队
姚俊豪,郑州大学机械与动力工程学院2019级本科生,项目负责人;
王振宁,郑州大学机械与动力工程学院2018级本科生,负责研究报告的撰写;
李豪杰,郑州大学机械与动力工程学院2018级本科生,负责硬件程序设计及调试;
刘冬旭,郑州大学电气工程学院2019级本科生,负责硬件程序设计及调试。
五、所获成果
1、 2021中国大学生机械工程创新创意大赛——第十二届全国大学生过程装备实践与创新大赛 一等奖
2、第十五届“挑战杯”河南省大学生课外学术科技作品竞赛 二等奖