3视频监控系统设计
视频监控系统主要应包括以下功能模块:视频源选择、视频图像采集、监控视频录像、监控视频抓图等。视频图像采集主要依靠连接电脑的摄像头来完成,通过控制视频输入设备的选择,找到可用的视频源,而后根据DirectShow的要求,进行连接,即可完成视频源的选择、图像采集以及视频预览等功能。系统设计的框架如图1所示。
图1 基于DirectShowLib的视频监控系统结构
视频图像的信息量是巨大的。对视频图像进行压缩是必须的。视频采用的压缩标准有:
①. 静止图像压缩技术:JPEG,M-JPEG。采用小波变换等技术,运用帧内处理技术。静止图像较清晰,但对连续运动图像,文件占用的带宽和硬盘都很大。
②. 运动图像压缩技术:MPEG-1,MPEG-2,H.263,MPEG-4。
在DirectShow中有现成的已经实现的视频图像的压缩算法,我们在进行视频图像处理的时候,直接选择相应的可用的压缩算法即可。其中的音频采集也是一样的道理,这里略。
4视频监控系统程序实现
系统实现是在VS2008开发环境中进行的。首先,在VS2008中,选择C#语言,建立一个解决方案,命名为FamilyCapture。然后,加载DirectShowLib-2008工程。该工程是从开源网站上下载。接着,建立主工程,命名为FamilyCaptureProject,封装与DirectShowLib的接口函数到一个单独的类文件中,如Capture.cs。整个解决方案在VS2008环境下的视图如图2所示。
图2 系统的解决方案物理视图
在系统的主窗体中,可以看到主界面,如图3所示。从界面可以看出,系统主要包括抓图和录像两个功能。
图3 系统的主界面
抓图功能是系统的一个可扩展的功能,从监控的目的来看,可以设置定时或者根据移动监测算法主动抓图,这样就可以很容易监测到监控区域的移动物体或对象。这里,仅给出抓图的一般算法,如下:
Bitmap bitmap = this.m_Capture.SnapeBitmap();
if (bitmap != null)
{
Image newImage = bitmap.GetThumbnailImage(320, 240, new Image.GetThumbnailImageAbort(IsTrue), IntPtr.Zero);
//创建图像
Bitmap image = new Bitmap(newImage);
//获取图像的BitmapData对像
BitmapData data = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
this.pictureBox1.Image = newImage;// Image.FromHbitmap(bitmap.GetHbitmap());
image.Save(this.GetFilePath() + ".jpg", ImageFormat.Jpeg);
}
录像功能是视频监控系统的最基本的功能。其实现算法如下:
try
{
//选择音频的压缩Filter
this.m_Capture.SetAudioCompressor("MPEG Layer-3");
//选择视频的压缩Filter
this.m_Capture.SetVideoCompressor("DivX ;-) MPEG-4 Low-Motion");
//选择视频源设备
this.m_Capture.SetVideoInputDevice(this.cb_VideoInputDevice.SelectedItem.ToString());
//视频预览
this.m_Capture.VideoPreview();
//视频捕获、压缩、输出
this.m_Capture.RecordVideo(this.GetFilePath() + ".avi");
this.btnStop.Enabled = true;
this.btnRecord.Enabled = false;
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
通过程序编译、调试,最终的运行结果,如图4所示。很明显,系统运行后,自动进入到监控视频的预览状态。在该界面上,点击抓图,会在程序所在目录下输出相应的图像文件,并在窗口侧边显示抓图效果。如图5所示。如果点击录像,系统会进入到录像状态,直至点击停止,系统在程序所在目录下输入所录制的视频文件。当然,在实际应用中,我们可以设置录制时间,或者设置录像的存储原则等,以更灵活地满足视频监控的需要。
图4 系统运行主界面
图5 系统抓图后的运行效果图
5 结束语
DirectShowLib的功能强大,家庭视频监控系统仅使用了其中的一部分功能。如果要改进系统中的视频压缩算法,更好地满足视频监控的需要,可以在此基础上展开研究,实现更好的视频压缩Filter,加载到系统中就可以了。
基于DirectShowLib开发的这样的家庭视频监控系统,可以满足一般家庭用户的需要。方法简单,实现起来也不难,通过普通的USB摄像头,就可以在家中建立一个视频监控系统。当然,这仅仅是一个原型系统,还有许多功能需要实现,以满足更多用户的需要,比如网络监控、远程监控、移动监测等功能,这就是下一步工作的研究方向。
|