当前位置: 首页 > >

ispy在视频监控中的应用|农村视频监控应用

发布时间:

  摘要:分析了基于IP Camera的ispy网络视频监控系统,该系统扫描出局域网中用户设定的IP和端口号的IP Camera,利用AForge. net提供的API与IP Camera之间建立连接,然后ispy将IP Camera收集来的图片发送 Camera传送过来的视频。ispy还提供了自动报警功能,当IP Camera通过相应算法监测到异常信息时,会通过sms、email等方式将异常信息发送给客户。
  关键词:ispy;IP Camera;视频监控
  中图分类号:TP311文献标识码:A文章编号:1009-3044***2012***21-5227-04
   1 ispy简介
  视频监控在我们日常生活中起到了重要作用。它广泛应用于机器设备看护、家庭保护、老人监护、宠物照顾等等。网络摄像机(IP Camera)的迅速发展也使得视频监控变得更加方便与简捷。IP Camera除了具备一般的传统摄像机的所有图像捕捉功能外,机内还内置了数字化压缩控制器和基于WEB的操作系统,使得视频数据经过压缩加密后,通过局域网,internet或无线网络送至终端用户。IP Camera可以直接接入到TCP/IP的数字化网络中,因此这种系统主要的功能就是联网上面,通过互联网或者局域网进行视频和音频的传输。ispy是一种C#编写的开源视频监控软件,它将局域网中的网络摄像机的视频信息收集起来,进行集中式管理。用户可以用ispy对视频进行管理,它可以将视频流发送到ispy的官方网站,注册用户登录后可以在个人电脑或手机上观看到视频信息,可以播放原来录制的视频,也可以远程控制云台,它使人们做到了真正的远程监控。ispy不仅可以用来进行监控,它还具有自动报警的功能,一旦监测到危险时就会将危险信息发送到用户的邮件或通过sms发送。
   1 ispy中利用的技术简介
  1)ispy利用了AForge.net这个框架。AForge.net[1]是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学*,机器人等领域。
  2)Web Service[2]也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。
  Web Service的主要目标是跨*台的可互操作性。为了实现这一目标,Web Service完全基于XML(可扩展标记语言)、XSD(XML Schema)等独立于*台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新*台。因此使用Web Service有许多优点,其中最大的优点是跨防火墙的通信。
  如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器。传统的做法是,选择用浏览器作为客户端,写下一大堆ASP页面,把应用程序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。要是客户端代码不再如此依赖于HTML表单,客户端的编程就简单多了。如果中间层组件换成Web Service的话,就可以从用户界面直接调用中间层组件,从而省掉建立ASP页面的那一步。要调用Web Service,可以直接使用Microsoft SOAP Toolkit或.net这样的SOAP客户端,也可以使用自己开发的SOAP客户端,然后把它和应用程序连接起来。不仅缩短了开发周期,还减少了代码复杂度,并能够增强应用程序的可维护性。同时,应用程序也不再需要在每次调用中间层组件时,都跳转到相应的"结果页"。
  3)利用浏览器来访问IP Camera。需要解决的问题是NAT穿透[3]。解决的方法是,利用一个具有公网IP的计算机,将它作为中介。在ispy上设置局域网中的每台IP Camera的IP地址和端口。位于不同私网的两台主机,在与另一台主机通信时,通过NAT的地址转换,将私网地址和端口映射为公网地址和端口,利用此地址相互通信。
  4)UPnP是各种各样的智能设备、无线设备和个人电脑等实现遍布全球的对等网络连接(P2P)的结构。UPnP是一种分布式的,开放的网络架构。UPnP是独立的媒介。在任何操作系统中,利用任何编程语言都可以使用UPnP设备。
  NAT穿越技术[3]允许网络应用程序对它们是否位于一个具有UPnP能力的NAT设备之后进行检测。然后,这些程序将获得共享的全球可路由IP地址,并且配置端口映射以将来自NAT外部端口的数据包转发到应用程序使用的内部端口上--所有这一切都是自动完成的,用户无需手动映射端口或者进行其它工作。NAT穿越技术允许网络设备或者点对点应用程序通过动态开启和闭合与外部服务之间的通信端口穿过NAT网关与外界通信。
  5)P2P是英文Peer-to-Peer(对等)的简称,又被称为“点对点”,P2P结构如下图1所示。“对等”技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。
  
  图1
  简单的说,P2P直接将人们联系起来,让人们通过互联网直接交互。P2P使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间商。P2P就是人可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载。P2P另一个重要特点是改变互联网现在的以大网站为中心的状态、重返"非中心化",并把权力交还给用户。
  ispy中应用到了P2P技术[4],当用户从远端的浏览器对局域网中的摄像头进行访问时,ispy官网的服务器会和作为一个Server,而远端的浏览器所用客户端作为一个peer,网络摄像头作为一个peer,它们之间通过P2P技术进行通信。
   2 ispy的应用
  2.1ispy的网络结构
  如图2所示。
  
  图2
  2.2网络摄像机的监测
  由于每个IPCamera内置有操作系统和WEB服务器,所以我们可以把它设想成一台小型电脑。ispy是通过命令arp?a的方法来获取所在局域网内的所有ip camera的IP地址和所开放的端口号。这部分的代码在FindCamera.cs,以下代码是将局域网中所有的网络摄像机都扫描出来。
  foreach ***string s1 in nb.GetNetworkComputers*********
  {
  var ipEntry = Dns.GetHostEntry***s1.Trim***’\’******;
  var addr=ipEntry.AddressList.Where***p=>p.AddressFamily==AddressFamily.InterNetwork***;
  foreach ***var t in addr***
  {
  DnsEntries.Add***t.ToString******.Trim*********;
  }
  }
  2.3视频的捕获模块与存储
  很多嵌入式WEB服务器提供公共网关接口(cgi),它能使WEB的客户端和服务器之间进行交互操作,完成一些如远程监控、数据库查询、参数更新等功能。CGI有3种可以从HTTP服务器获取用户输入的数据;通过环境变量(GET);通过命令行参数方式;通过CGI程序的标准输入方式(POST)。当从服务器上获得数据并且不改变服务器端原有数据、且数据量较小时,可以采用GET方式,GET方式常被用于获取静态文档。由于不同IP Camera的CGI是不同的,所以ispy将不同IP Camera的CGI存放到一个Sources.xml文件中,以达到可以连接多种IP Camera的目的。
  视频的捕获是利用AForge.net中提供的DirectShow视频开发技术。代码在CameraVideo.cs中。以下是获取本地USB摄像头的代码,主要是利用DirectShow提供的VideoCaptureDevice。
  string moniker = Camobject.settings.videosourcestring;
  var videoSource = new VideoCaptureDevice***moniker***;
  string[] wh = Camobject.resolution.Split***’x’***;
  videoSource.DesiredFrameSize=newSize***Convert.ToInt32***wh[0]***,Convert.ToInt32***wh[1]******;
  videoSource.DesiredFrameRate = Camobject.settings.framerate;
  OpenVideoSource***videoSource, true***;
  break;
  获取到摄像头后,会捕获摄像头传来的每一幅图片,并将图片封装成帧,然后再以一定的压缩算法将图片转成视频流。如下代码取于WindowCamera.cs中的BmpToBytes_MemStream方法,它是将图片转换成视频流。
  var ms = new MemoryStream******;
  // Save to memory using the Jpeg format
  bmp.Save***ms, MainForm.Encoder, MainForm.EncoderParams***;
  // read to end
  byte[] bmpBytes = ms.GetBuffer******;
  bmp.Dispose******;
  bmp = null;
  ms.Close******;
  return bmpBytes;
  每天录制的视频会存放在一个随机命名的文件下。
  2.4在外部网络中利用浏览器访问
  在LocalServer.cs中有一个_myListener进程,它在指定的IP地址和端口上侦听是否有传入的连接尝试,它将IP Camera传送过来的一帧帧图片封装成数据流。在ispy与网络摄像机之间进行数据交换时,ispy作为服务器,摄像机作为客户端。而当在ispy与浏览器端建立了连接时,ispy是作为客户端与ispy官网作为服务器进行交换数据的。在LocalServer.cs的StartListen
  方法中String sRequestedFile;
  String sErrorMessage; String sLocalDir; String sDirName;
  ParseRequest***sMyWebServerRoot, sBuffer, out sRequest, out sRequestedFile, out sErrorMessage, out sLocalDir, out sDirName, out sPhysicalFilePath, out sHttpVersion,
  out sFileName, out sMimeType, out bServe, out bHasAuth, ref mySocket***;
  if ***!bServe***
  {
  resp = "Denied***’Access this server through ispyconnect’***";
  SendHeader***sHttpVersion, "text/html", resp.Length, " 200 OK", 0, ref mySocket***;
  SendToBrowser***resp, mySocket***;
  goto Finish;
  }
  2.4.1处理浏览器发出的云台命令
  当用户用浏览器对远程的摄像机进行访问时,还可以使用命令的方式对摄像机的云台进行控制。主要代码在LocalServer.cs的ProcessCommandInternal中
  case "ptz":
  if ***value != ""***
  cw.CalibrateCount = 0;
  cw.Calibrating = true;
  if***value.StartsWith***"ispydir_"******cw.PTZ.SendPTZCommand******
  Enums.PtzCommand***Convert.ToInt32***value.Replace***"ispydir_", ""*********;
  else
  cw.PTZ.SendPTZCommand***value,true***;
  }
  2.4.2运动监测算法
  Ispyconnect中的运动监测算法都是调用AForge.net中的类,程序员不需要知道具体算法的如何实现的,只要知道算法的功能就可以。如以下是比较前后两帧之间差异的算法
  if ***_camera.MotionDetector.MotionDetectionAlgorithm isCustomFrameDifferenceDetector***
  { ******CustomFrameDifferenceDetector***_camera.MotionDetector.MotionDetectionAlgorithm***.SetBackgroundFrame***_camera.LastFrame***;
  }
   3结束语
  该文分析了基于IP Camera的ispy在视频监控中的实现。由于IP Camera中采用了嵌入式系统技术,支持多种传输协议,综合考虑成本和性能等方面。ispy适合于家庭、企业、政府等视频监控的实现。
  参考文献:
  [1]龚成莹,何辉.基于AForge.NET的车辆运动视频检测方法[J].电脑知识与技术,2011***1***:187-188,196.
  [2] webservice百度百科[EB/OL]..
  [3]欧阳军林,李中凯,李章兵.大学生宿舍视频监控报警系统的设计与开发[J].微计算机应用,2011***1***:60-67
  [4] ispyconnect官方网站[EB/OL]..



友情链接: