内容详情
虚拟摄像头技术在监控系统中的应用
网络摄像头简称WEBCAM,一般通过USB与电脑连接,或直接嵌入在笔记本电脑屏幕的上方,主要在网络会议、即时通讯、IP电话等软件中应用。虚拟摄像头顾名思义,就是用软件手段在计算机中模拟出一个网络摄像头硬件,它本身不具备视频采集的功能,但可以将图片、视频文件或其它设备采集到的视频做为虚拟摄像头的输出,并可加入各种个性化的特效。例如,在没有真实网络摄像头情况下,也可以通过虚拟摄像头软件进行视频聊天,只不过对方看到的不是真实的视频,而是一些预设的录像或图片。
目前网上的一些用虚拟摄像头技术开发的软件,多被用来在网络聊天软件中欺骗对方。实际上,虚拟摄像头有效克服了真实网络摄像头内容单一、依赖硬件的缺点,使用领域非常宽广。本文以两个虚拟摄像头技术与监控系统结合使用的项目为例,具体分析系统的开发思路和效果,希望能对虚拟摄像头技术的推广应用起到抛砖引玉的效果。限于篇幅,本文重点在于分析设计思路,未有涉及太多技术细节,只对关键技术作简要的描述,具体实现方式感兴趣的读者可以通过网络查找相关资料。
虚拟摄像头驱动的开发可以遵循以下3条路线:
1.传统的WDM驱动的开发模式,WDM是微软为Windows2000及后续操作系统提供的通用驱动程序模型,一个驱动程序可以看作是一个运行在系统底层的DLL,采用WDM的方式开发虚拟摄像头需要从驱动整体入手,在操作系统中虚拟出一个设备,需要开发者具备丰富的计算机接口和Windows驱动开发经验。
2.基于DirectShow平台的开发模式,DirectShow是微软推出的基于COM的流媒体处理开发包,与DirectX开发包一起发布,用DirectShow开发虚拟摄像头无需涉及驱动程序编写,体积小巧、安装过程不会引起安全软件和操作系统的警告,且视频处理效率比WDM高。
3.利用DSF框架平台开发,微软DSF框架利用小端口驱动把一个虚拟的USB设备控制器驱动接在计算机上,涉及驱动层面的内容DSF已经做好了,开发者只需按DSF接口标准开发一个动态链接库用来模拟设备功能,再开发一个脚本文件用于模拟设备的物理插拔动作,一个虚拟设备就做好了。
上述3条开发路线中,路线1、2对开发者的要求较高,开发时间也相对较长;方案3则相对简单,基本不需要与驱动打交道,但利用DSF框架开发的软件,在客户的机器上部署相对繁琐,不利于商业推广。刚入门的开发者建议在网上搜索虚拟摄像头的开源代码,以加快开发进度。
无论哪种方式开发的虚拟摄像头驱动,都必须有一个外部数据传入的接口(建议做成COM形式方便调用)。其它软件(如下文所述的数据转发软件)可以通过这个接口,传入RGB格式的位图数据,虚拟摄像头将传入的位图作为拍摄到的影像,通过QQ、MSN、Netmetting等软件显示出来。RGB是一种工业标准的位图数据存储方式,每一幅位图就是一帧,当每秒传入25幅以上的位图,虚拟摄像头就会显示出流畅的视频了。
在医疗领域的应用
某医院进口的医疗设备,其所附带的软件,可以在记录病人生理数据的同时,具备同步录像功能,但该软件只有一个网络摄像头接口,无法实现一台设备同时监管多个病床;且安装软件的电脑与病房相隔较远,网络摄像头鞭长莫及。另外在病房内原已安装了多个监控模拟摄像机,护士中心可使用联网监控软件,通过局域网连接到硬盘录像机观察到病房内的情况。因此,为了有效提高这种昂贵的进口设备利用率,使其软件能与现有的监控设备结合,我们设计了如下的虚拟摄像头技术方案:
目前国内主流的IP摄像机和硬盘录像机均有SDK开发包,这里以海康威视系列产品为例说明开发过程:开发一个数据转发软件,先调用海康的设备网络SDK接收从IP摄像机或硬盘录像机端传来的压缩视频流,收到压缩流后,立即调用播放库SDK中的相应函数,对压缩流进行解压,获得YUV格式的图像数据,再将YUV转换为RGB格式(转换算法在网上很多,选择时需注意算法的效率),最后通过虚拟摄像头的数据传入接口,将图像在医疗软件上显示出来。数据转发软件可以根据使用者的要求,自动或手动切换监控摄像机,将不同监控摄像机采集到图像显示在同一套软件中。
作为进一步完善,我们通过虚拟摄像头实现了画中画功能,具体做法是:同时从2台摄像机获取压缩流并解码;将其中一台摄像机的位图数据按比例缩小(即删减一部分像素),作为子画面;将主画面的位图数据中一部分,更换为子画面的位图数据,形成画中画,再传入到虚拟摄像头。这样,在主画面切换到某一病床时,子画面仍监控着整个病房的总体情况,达到了全貌和细节同时兼顾的效果。
在视频会议中的应用
某大型企业分支机构遍布全省,各地的营业现场均安装了视频监控系统。该企业经常通过视频会议软件组织全省范围的会议。使用者希望通过视频会议软件,除了能看到参会者外,在会议讨论过程中,还经常需要将一些生产经营现场的画面调出来显示,供大家讨论。由于视频会议软件具有网络摄像头接口,我们开发了一套适用于视频会议的虚拟摄像头软件:
满足客户需求的关键,是在上一章节的画中画功能基础上,实现一个画面是真实的网络摄像头采集到的图像(一般是参会者),另一个画面是视频监控系统传输过来的图像(一般是生产经营现场),相结合形成画中画后,通过虚拟摄像头显示出来。获取真实网络摄像头采集到的图像有WIA,DirectShow,VFW等几种技术,通常的手段是通过剪贴板从缓存中获取图像并转换为位图,但这种方式存在帧率低、不兼容多线程等问题。经研究,我们通过VFW的回调函数功能,获取摄像头采集到的位图,可达到高帧率、低CPU占用的效果。
随着视频会议功能的深入使用,用户又提出了新的问题:开会期间,临时需要将一些没有安装监控摄像机的场景,在视频会议上展示出来。为此系统增加了智能手机设备的支持:在Android或IPhone手机上安装专用的软件,即可将手机摄像头拍摄到的图像,通过无线网络传输到电脑上,数据转发软件可以将收到的手机图像转换为RGB格式,并传送给虚拟摄像头。由此,视频会议彻底摆脱了地域、环境和设备的限制。
目前网上的一些用虚拟摄像头技术开发的软件,多被用来在网络聊天软件中欺骗对方。实际上,虚拟摄像头有效克服了真实网络摄像头内容单一、依赖硬件的缺点,使用领域非常宽广。本文以两个虚拟摄像头技术与监控系统结合使用的项目为例,具体分析系统的开发思路和效果,希望能对虚拟摄像头技术的推广应用起到抛砖引玉的效果。限于篇幅,本文重点在于分析设计思路,未有涉及太多技术细节,只对关键技术作简要的描述,具体实现方式感兴趣的读者可以通过网络查找相关资料。
虚拟摄像头驱动的开发可以遵循以下3条路线:
1.传统的WDM驱动的开发模式,WDM是微软为Windows2000及后续操作系统提供的通用驱动程序模型,一个驱动程序可以看作是一个运行在系统底层的DLL,采用WDM的方式开发虚拟摄像头需要从驱动整体入手,在操作系统中虚拟出一个设备,需要开发者具备丰富的计算机接口和Windows驱动开发经验。
2.基于DirectShow平台的开发模式,DirectShow是微软推出的基于COM的流媒体处理开发包,与DirectX开发包一起发布,用DirectShow开发虚拟摄像头无需涉及驱动程序编写,体积小巧、安装过程不会引起安全软件和操作系统的警告,且视频处理效率比WDM高。
3.利用DSF框架平台开发,微软DSF框架利用小端口驱动把一个虚拟的USB设备控制器驱动接在计算机上,涉及驱动层面的内容DSF已经做好了,开发者只需按DSF接口标准开发一个动态链接库用来模拟设备功能,再开发一个脚本文件用于模拟设备的物理插拔动作,一个虚拟设备就做好了。
上述3条开发路线中,路线1、2对开发者的要求较高,开发时间也相对较长;方案3则相对简单,基本不需要与驱动打交道,但利用DSF框架开发的软件,在客户的机器上部署相对繁琐,不利于商业推广。刚入门的开发者建议在网上搜索虚拟摄像头的开源代码,以加快开发进度。
无论哪种方式开发的虚拟摄像头驱动,都必须有一个外部数据传入的接口(建议做成COM形式方便调用)。其它软件(如下文所述的数据转发软件)可以通过这个接口,传入RGB格式的位图数据,虚拟摄像头将传入的位图作为拍摄到的影像,通过QQ、MSN、Netmetting等软件显示出来。RGB是一种工业标准的位图数据存储方式,每一幅位图就是一帧,当每秒传入25幅以上的位图,虚拟摄像头就会显示出流畅的视频了。
在医疗领域的应用
某医院进口的医疗设备,其所附带的软件,可以在记录病人生理数据的同时,具备同步录像功能,但该软件只有一个网络摄像头接口,无法实现一台设备同时监管多个病床;且安装软件的电脑与病房相隔较远,网络摄像头鞭长莫及。另外在病房内原已安装了多个监控模拟摄像机,护士中心可使用联网监控软件,通过局域网连接到硬盘录像机观察到病房内的情况。因此,为了有效提高这种昂贵的进口设备利用率,使其软件能与现有的监控设备结合,我们设计了如下的虚拟摄像头技术方案:
目前国内主流的IP摄像机和硬盘录像机均有SDK开发包,这里以海康威视系列产品为例说明开发过程:开发一个数据转发软件,先调用海康的设备网络SDK接收从IP摄像机或硬盘录像机端传来的压缩视频流,收到压缩流后,立即调用播放库SDK中的相应函数,对压缩流进行解压,获得YUV格式的图像数据,再将YUV转换为RGB格式(转换算法在网上很多,选择时需注意算法的效率),最后通过虚拟摄像头的数据传入接口,将图像在医疗软件上显示出来。数据转发软件可以根据使用者的要求,自动或手动切换监控摄像机,将不同监控摄像机采集到图像显示在同一套软件中。
作为进一步完善,我们通过虚拟摄像头实现了画中画功能,具体做法是:同时从2台摄像机获取压缩流并解码;将其中一台摄像机的位图数据按比例缩小(即删减一部分像素),作为子画面;将主画面的位图数据中一部分,更换为子画面的位图数据,形成画中画,再传入到虚拟摄像头。这样,在主画面切换到某一病床时,子画面仍监控着整个病房的总体情况,达到了全貌和细节同时兼顾的效果。
在视频会议中的应用
某大型企业分支机构遍布全省,各地的营业现场均安装了视频监控系统。该企业经常通过视频会议软件组织全省范围的会议。使用者希望通过视频会议软件,除了能看到参会者外,在会议讨论过程中,还经常需要将一些生产经营现场的画面调出来显示,供大家讨论。由于视频会议软件具有网络摄像头接口,我们开发了一套适用于视频会议的虚拟摄像头软件:
满足客户需求的关键,是在上一章节的画中画功能基础上,实现一个画面是真实的网络摄像头采集到的图像(一般是参会者),另一个画面是视频监控系统传输过来的图像(一般是生产经营现场),相结合形成画中画后,通过虚拟摄像头显示出来。获取真实网络摄像头采集到的图像有WIA,DirectShow,VFW等几种技术,通常的手段是通过剪贴板从缓存中获取图像并转换为位图,但这种方式存在帧率低、不兼容多线程等问题。经研究,我们通过VFW的回调函数功能,获取摄像头采集到的位图,可达到高帧率、低CPU占用的效果。
随着视频会议功能的深入使用,用户又提出了新的问题:开会期间,临时需要将一些没有安装监控摄像机的场景,在视频会议上展示出来。为此系统增加了智能手机设备的支持:在Android或IPhone手机上安装专用的软件,即可将手机摄像头拍摄到的图像,通过无线网络传输到电脑上,数据转发软件可以将收到的手机图像转换为RGB格式,并传送给虚拟摄像头。由此,视频会议彻底摆脱了地域、环境和设备的限制。