亞洲大學 資訊工程學系 多重來源影像監控系統 亞洲大學 資訊工程學系 多重來源影像監控系統 學生:林澤民(99012027) 林瑾玟(99012052) 指導老師:林智揚 中 華 民 國 102年 11月 27日
摘要 本專題為一多執行緒(Multi-thread)架構下的監控系統,透過多執行緒來同時控制不同來源影像(例如:影像檔、IP攝影機、USB攝影機),使得在單一伺服器能對不同影像進行即時處理如人臉偵測、移動物體偵測,並將事件發生的畫面記錄下來供管理人員檢視。
其中,在實作多執行緒架構使用到了wxWidgets提供的函式庫;系統中使用到的人臉偵測功能是使用開放源碼OpenCV所提供的函式,透過上述兩者簡化了系統開發的複雜度與加快系統開發。
最後,為了讓擁有不同情況下環境的影像能夠正確地辨別出移動物體(影像會有光線不同的變化),使得偵測的正確率提高,在此,我們選擇了高斯混合模型(Gaussian Mixture Model)來進行移動物體偵測。它會建立前景(移動物體)與背景(非移動物體),達到辨別畫面中有無移動物體。
目的 一開始只是在系上開的課中,學習到如何控制一隻攝影機的程式(也未使用多執行緒),到了後來受到教授的啟發,才有了將原本的程式擴展成現在這個系統的想法。
透過wxWidgets來大幅降低實作多執行緒的困難,讓監控系統能夠進行人臉偵測、移動物體偵測,並且不局限在一台攝影機上,而是可以同時對不同來源影像操作,最後,將有異常事件的影像加以保存起來,希望以本程式為例,使得安全監控變得更加簡單。
多執行緒簡介 多執行緒(Multi-threading),是指在軟體或是硬體上能夠同時產生多個執行緒並且執行的技術。而電腦因為有硬體的支援而能夠同一時間執行多個執行緒,進而提升整體處理效能。
由於處理器單一時間只能執行一個執行緒,但是作業系統也可以透過快速的在不同執行緒之間進行切換執行,而因為切換的時間間隔很小,來給使用者造成一種多個執行緒同時被執行的錯覺,實際上同一時間還是只執行一個執行緒,這樣的程式執行機制被稱為「軟體上的多執行緒」。
當一個運行中的執行緒被一個事件擋住而造成延遲時(像是I/O、記憶體分頁錯誤),這些動作往往會使用到數百個CPU週期才能夠將資料送至暫存器。這些等待的時間作業系統會通造處理器去執行到另一個已就緒的執行緒。只要前一個的執行緒中的資料送達後,上一個執行緒就會變成就緒狀態,利用這種方法來使各個執行緒的指令交替執行,可以有效的降低CPU閒置的時間,使得程式總體效能提高,這就是多執行緒的好處。然而,要實作多執行緒的程式並不容易,我們在本專題中用到了wxWidgets來實作,透過呼叫wxWidgets現有的多執行緒函式庫,可加快系統的開發。
單一行程含有3個執行緒,CPU會切換來執行不同執行緒
開發環境 作業系統:Microsoft Windows 7 x86 程式開發環境:Microsoft visual studio 2010, 使用C++ MFC 額外的函式庫1:OpenCV 2.4.6.0 額外的函式庫2:wxWidgets 2006/11/20
系統實作之來源為影像檔(VIDEO) 操作介面 在下拉式選單中選擇來源影像 開啟檔案(影像) 影像成功載入(影像檔)
播放(影像檔) 開啟移動物偵測(影像檔)
系統實作之來源影像為USB-Camera 在下拉式選單中選擇USB-Cam後播放畫面(USB-Cam) 畫面暫停(USB-Cam)
移動物偵測 (USB-Cam) (未偵測到移動物) (已偵測到移動物)
開啟人臉偵測 (USB-Cam)
單一來源影像流程圖
多個來源影像流程圖
結論 在實驗過程中雖然可以同時處理多個來源影像,但會受限於硬體的設備,好在現今電腦設備的運算能力與價格皆能在合理範圍內達到良好的效果,未來城市的反恐、安全上的需要,會導致監視設備架設的比例上升,因此,將有特殊事件的影像擷取,能大幅降低安全管理上的支出。