基于Spark和OpenCV的实时生成全景图实现系统及方法
文献发布时间:2023-06-19 10:24:22
技术领域
本发明涉及一种基于Spark和OpenCV的实时生成全景图实现系统及方法,属于计算机视觉领域。
背景技术
目前全景视频拼接技术已经广泛的应用于生产生活中的各个方面,比如在虚拟现实、景区防火、还有卫星图像方面都得到了广泛的应用,但是目前存在一定的问题,比如若是数据量过大的话,那么对视频的处理以及生成全景图片的时间将会非常的长,并不能做到实时生成,这就很难满足一些对实时性要求比较高的场景,比如说景区火灾的预防,所以需要一种能够根据云台摄像头快速生成全景图片的技术,因此设计一种全景图实时生成系统及方法来实现全景图片的实时生成非常必要。
发明内容
本发明的技术任务是针对现有技术的不足,提供一种基于Spark和OpenCV的实时生成全景图实现系统及方法。
本发明基于Spark强大的数据分析能力和计算能力、以及OpenCV强大的图像处理能力,提出了通过使用基于Spark和OpenCV的全景图实时生成方法来实现全景图片的实时生成。
Spark技术
Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。可以完美的契合本系统对实时生成全景图要求。Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark作为一种高效的大数据计算引擎,主要有三个特点,首先是拥有高级的API,使得Spark应用开发者可以专注于大数据计算的程序开发上;其次,Spark可使用交互式的方式进行数据的分步计算;最后,Spark支持多种不同的计算,可用它来完成各种复杂的运算,并且Spark的计算效率远远高于MapReduce。
OpenCV
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法,包括一系列图像处理方面的基础方法,有一些方法可以拿过来直接使用,另外、我们也可以在OpenCV原生的代码和接口的基础上进行一系列的优化操作。
本发明解决其技术问题所采用的技术方案是:
1、本发明提供一种基于Spark和OpenCV的全景图实时生成系统,该系统包括:
视频采集模块,为云台监控摄像头,以不同仰角旋转多圈采集视频图像,使用OpenCV将视频流转化为帧;
视频缓存模块,为kafka服务器,将每帧图像的键值对转换后发送给kafka服务器缓存;
视频处理模块,为Spark,Spark从kafka服务器中获取缓存的图像;Spark运行基于OpenCV的全景视频拼接算法,将获取的图像进行多圈拼接,生成全景图片;
全景图片存储模块,将拼接完成的全景图像存入HDFS,以供具体应用的调用;
全景图片分析模块,调用相关的全景图分析工具,通过分析全景图的相关特征来检测是否异常情况发生。
2、本发明还提供一种基于Spark和OpenCV的全景图实时生成方法,基于全景图实时生成系统,该系统包括:
视频采集模块,为云台监控摄像头,以不同仰角旋转多圈采集视频图像,使用OpenCV将视频流转化为帧;
视频缓存模块,为kafka服务器,将每帧图像的键值对转换后发送给kafka服务器缓存;
视频处理模块,为Spark,Spark从kafka服务器中获取缓存的图像;Spark运行基于OpenCV的全景视频拼接算法,将获取的图像进行多圈拼接,生成全景图片;
全景图片存储模块,将拼接完成的全景图像存入HDFS,以供具体应用的调用;
全景图片分析模块,调用相关的全景图分析工具,通过分析全景图的相关特征来检测是否异常情况发生。
可选地,包括以下步骤:
1)开启云台,带动摄像头以不同的仰角旋转多圈采集视频;
2)使用OpenCV将视频流转化为帧;
3)将每帧图像的键值对转换后发送给kafka服务器缓存;
4)Spark从kafka服务器中获取缓存的图像;
5)Spark运行基于OpenCV的全景视频拼接算法,将获取的图像进行多圈拼接,生成全景图片;
6)将拼接完成的全景图像存入HDFS,以供具体应用的调用。
可选地,步骤2)中将每帧图像以Mat对象的形式存储。
可选地,步骤3)中将每帧图像的键值对转换为Json形式,发送给kafka服务器缓存。
可选地,步骤5)中基于OpenCV的全景视频拼接算法是Surf算法,surf算法是SIFT(Scale-invariant feature transformation,尺度不变特征变换)算法的加速版,Surf算法可以在一定的条件下完成两幅图像中特征的匹配基本实现了实时处理。具体拼接步骤如下:首先从视频中每隔40帧获取一张图片(总共取60张左右图片),然后使用Surf算法进行特征点检测,检测出特征点之后对图像的特征点进行匹配,使用最近邻和次近邻方法,将两个最优的匹配的置信度保存下来。接下来对图像进行排序以及将置信度高的图像保存到同一个集合中,删除置信度比较低的图像间的匹配,得到能正确匹配的图像序列。最后对匹配的图像进行波形矫正、拼接、融合生成最终的全景图。
可选地,步骤6)中拼接完成的全景图像按位置属性进行命名存入HDFS。
可选地,还包括步骤7)调用相关的全景图分析工具,通过分析全景图的相关特征来检测景区是否有异常情况发生。
可选地,用全景图来进行景区的火灾检测,我们使用贝叶斯分类器来进行火灾检测,具体步骤如下:
首先,对火灾特征进行特征选取,火灾特征主要包括颜色特征、动态特征、纹理特征和边缘特征四个部分,其中火灾颜色特征主要指火灾火焰亮度和颜色分布规律;火灾的动态特征主要面积特征、闪烁频率特征和移动稳定性特征;纹理特征指火焰有区别于背景色彩相似物而在颜色空间分布及组合上不同特征,及纹理的不同;边缘特征主要包括火焰的尖角识别和圆形度计算;
对火灾的相关特征检测完毕后,再根据相关特征把视频的每一帧图像分为有火灾和无火灾两类,选取之前描述的颜色、动态、纹理、边缘特征来训练贝叶斯分类器;得到分类模型,用得到的分类模型来对我们的全景图来进行检测,查看景区是否有火灾发生。
本发明的一种基于Spark和OpenCV的实时生成全景图实现系统及方法与现有技术相比,所产生的有益效果是,
1、本发明基于Spark强大的数据分析能力和计算能力、以及OpenCV强大的图像处理能力,提出了通过使用基于Spark和OpenCV的全景图实时生成方法来实现全景图片的实时生成,能够满足一些对实时性要求比较高的场景,比如景区火灾的预防。
说明书附图
附图1是本发明一种基于Spark和OpenCV的实时生成全景图生成全过程。
具体实施方式
下面结合附图对本发明的一种基于Spark和OpenCV的实时生成全景图实现系统及方法作以下详细地说明。
本发明的一种基于Spark和OpenCV的实时生成全景图实现系统,包括:
视频采集模块,为云台监控摄像头,以不同仰角旋转多圈采集视频图像,使用OpenCV将视频流转化为帧;
视频缓存模块,为kafka服务器,将每帧图像的键值对转换后发送给kafka服务器缓存;
视频处理模块,为Spark,Spark从kafka服务器中获取缓存的图像;Spark运行基于OpenCV的全景视频拼接算法,将获取的图像进行多圈拼接,生成全景图片;
全景图片存储模块,将拼接完成的全景图像存入HDFS,以供具体应用的调用;
全景图片分析模块,调用相关的全景图分析工具,通过分析全景图的相关特征来检测是否异常情况发生。
结合附图1,针对目前全景视频拼接技术实时性太差的问题,本发明的一种基于Spark和OpenCV的全景图实时生成方法,包括以下步骤:
1)开启云台,带动摄像头以不同的仰角旋转多圈采集视频;
2)使用OpenCV将视频流转化为帧;
3)将每帧图像的键值对转换后发送给kafka服务器缓存;
4)Spark从kafka服务器中获取缓存的图像;
5)Spark运行基于OpenCV的全景视频拼接算法,将获取的图像进行多圈拼接,生成全景图片;
6)将拼接完成的全景图像存入HDFS,以供具体应用的调用。
上述步骤2)中将每帧图像以Mat对象的形式存储。
上述步骤3)中将每帧图像的键值对转换为Json形式,发送给kafka服务器缓存。
上述步骤5)中基于OpenCV的全景视频拼接算法具体是Surf算法,surf算法是SIFT(Scale-invariant feature transformation,尺度不变特征变换)算法的加速版,Surf算法可以在一定的条件下完成两幅图像中特征的匹配基本实现了实时处理。具体拼接步骤如下:首先从视频中每隔40帧获取一张图片(总共取60张左右图片),然后使用Surf算法进行特征点检测,检测出特征点之后对图像的特征点进行匹配,使用最近邻和次近邻方法,将两个最优的匹配的置信度保存下来。接下来对图像进行排序以及将置信度高的图像保存到同一个集合中,删除置信度比较低的图像间的匹配,得到能正确匹配的图像序列。最后对匹配的图像进行波形矫正、拼接、融合生成最终的全景图。
上述步骤6)中拼接完成的全景图像按位置属性进行命名存入HDFS。
上述还包括步骤7)调用相关的全景图分析工具,通过分析全景图的相关特征来检测景区是否有火灾发生。
可选地,用全景图来进行景区的火灾检测,使用贝叶斯分类器来进行火灾检测,具体步骤如下首先,我们要对火灾特征进行特征选取,火灾特征主要包括颜色特征、动态特征、纹理特征和边缘特征四个部分,其中火灾颜色特征主要指火灾火焰亮度和颜色分布规律;火灾的动态特征主要面积特征、闪烁频率特征和移动稳定性特征;纹理特征指火焰有区别于背景色彩相似物而在颜色空间分布及组合上不同特征,及纹理的不同;边缘特征主要包括火焰的尖角识别和圆形度计算。对火灾的相关特征检测完毕后,再根据相关特征把视频的每一帧图像分为有火灾和无火灾两类,选取之前描述的颜色、动态、纹理、边缘特征来训练贝叶斯分类器。得到分类模型,用得到的分类模型来对我们的全景图来进行检测,查看景区是否有火灾发生。
以景区火灾预防为例,首先,景区可能会有上百个云台监控摄像头,而为了保证生成图片的质量,每个云台摄像头旋转一圈就可能需要截取80~100张图片,而我们需要把每个摄像头截取上中下三种不同的角度旋转三圈生成的300多张图片合成一张全景图,100个摄像头的话就有三万余张图片需要处理,这是一个相当大的数据量,若是用传统方法的话处理速度将会非常的慢,所以我们使用基于Spark和OpenCV的全景图实时生成方法,具体实施方式如下:
首先先开启云台,带动摄像头以不同的仰角旋转多圈采集视频,然后使用OpenCV将视频流转化为帧,并将每帧图像以Mat对象的形式存储,接着将Mat中的每帧图像的键值对转换为Json形式,发送给kafka服务器缓存。
其次,Spark从kafka缓存中将要生成全景图的图片提取出来,然后运行基于OpenCV的全景图片的生成算法,生成每个云台摄像头所录取视频的全景图。然后将生成的全景图按位置属性进行命名存入HDFS。
最后,调用相关的全景图分析工具,通过分析全景图的相关特征来检测景区是否有火灾发生。
- 基于Spark和OpenCV的实时生成全景图实现系统及方法
- 一种基于移动前景下全景图实时生成系统及其方法