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攝像頭,就可以在家中建立一個視頻監控系統。當然,這僅僅是一個原型系統,還有許多功能需要實現,以滿足更多用戶的需要,比如網絡監控、遠程監控、移動監測等功能,這就是下一步工作的研究方向。
|