0、概述
本系统以海康威视摄像头作为图像信息的采集工具,通过对采集的图像数据进行分析与处理,从而实现室内多张图片的全景图拼接、图片的标注以及物体的运动检测等功能。系统功能模块图如图所示:
1、图像采集
1.1 调用SDK实现对摄像头控制
这里主要是调用海康威视提供的SDK接口实现摄像头的登录、控制、获取视频流的功能。另外,因为我们的系统是用Python进行开发,涉及到SDK中结构体参数的传入主要使用Python中的ctypes库调用海康SDK中的动态链接库,找到对应的.dll文件进行加载,加载完成后,调用相应的函数进行初始化,具体的实现请到代码中查看。
1.2 获取实时视频流
在初始化SDK获取到摄像头控制权后,通过OpenCV的VideoCapture函数读取海康威视摄像头的网络串流,抓取适当的帧以及完整的视频供系统使用。系统将单帧交给全景拼接模块进行拼接,将视频流交给实时显示模块进行实时显示。
2、全景拼接
2.1 获取单帧图片
让摄像头转动一圈,在转动的过程中不断获取单帧图片以便于接下来的拼接。我们让摄像头每转动一次就停顿一下,以获得清晰的单帧图片。获取的单帧图片如下图所示:
2.2 图像的拼接
图像拼接的关键两个步骤是配准(registration)和融合(blending)。配准的目的是根据几何运动模型,将图像注册到同一个坐标系中;融合则是将配准后的图像合成为一张大的拼接图像。具体流程图如图所示:
拼接效果如下图所示:
3、语义标注
3.1 概述
本系统针对拼接完成后的图片进行手动标注操作,其主要涉及两个方面:物体的标注、名称的标注。利用PyQt中的Qpaint类实现对图片中物体的标注,用户通过下方的输入框输入标注,最后系统将标注好的内容统一序列化存储到pickle文件中,供下次打开同一图片时显示标注。
界面图如下图所示:
4、一些拓展
4.1 概述
本系统在完成基本的基本需求的情况下,又加入了区域检测的功能。区域检测包括区域监控和过线检测,即当选定区域中有物体移动时报警和有物体经过标注线时报警的功能。
4.2 区域监控
用户指定一个区域,系统实时检测该区域,一旦区域内有物体移动的迹象,系统立即进行报警。
4.3 过线检测
用户划定一根直线,系统实时进行检测,每当物体越过划定的直线,系统立即进行报警。
5、总结
这个项目和软件杯的两个队友共同完成,经历了软件杯一段时间的合作,大家的分工合作都很流畅,有问题一起讨论,有想法一起实现。因为临近暑假,一遍准备考研一边写代码,感觉跟着躺了一波哈哈哈。