第一篇:【學(xué)士論文】智能視頻監(jiān)控(視頻敏感區(qū)域入侵檢測報警)的設(shè)計與實現(xiàn)
摘要
摘要
隨著對社會公共安全的需求提高,結(jié)合發(fā)展的現(xiàn)代計算機技術(shù),安防產(chǎn)品向PC化靠攏?;趫D像識別的智能視頻監(jiān)控以其突出的輕、巧、小、一體化等特點,逐漸取代傳統(tǒng)監(jiān)控手段。
而智能視頻監(jiān)控的關(guān)鍵技術(shù)則是依賴于視頻內(nèi)容的入侵檢測。此課題在完成系統(tǒng)分析、設(shè)計的基礎(chǔ)上,進(jìn)行了系統(tǒng)的實現(xiàn),在基于RGB顏色處理檢測入侵對象的同時,提供色差、限差兩個參數(shù)設(shè)定提高系統(tǒng)適應(yīng)性,還特別開發(fā)了發(fā)送報警郵件的功能,實現(xiàn)了遠(yuǎn)程實時監(jiān)控。
關(guān)鍵詞:智能視頻監(jiān)控報警系統(tǒng),圖像對比,RGB色差模式,SMTP
I
ABSTRACT
ABSTRACT With the increasing demand for social and public security, combined with the development of modern computer technology, security products are more closer to the PC.Intelligent video monitoring based on image recognition is gradually replacing the traditional monitoring measures with prominent characteristics,such as its handiness, subsize, strong move to integration and so on.The key technology of intelligent video surveillance, intrusion detection depends on the video content.This subject intrusion detection based on video content analysis, the integration of real-time alarm monitoring technology.This project implements the system based on the integration of intrusion detection of video content,the analysis, real-time alarm monitoring technology.Keywords: Intelligent Video Surveillance and Alarm System,image contrast,RGB color mode,SMTP
II
目錄
目 錄
第一章 引言....................................................................................................................1 1.1 1.2 研究背景..........................................................................................................1 視頻監(jiān)控發(fā)展歷史和國內(nèi)外研究現(xiàn)狀..........................................................1 1.2.1 視頻監(jiān)控發(fā)展歷史......................................................................................1 1.2.2 國內(nèi)外研究現(xiàn)狀..........................................................................................2 1.3 1.4 2.1 2.2 論文的主要內(nèi)容及意義..................................................................................2 論文組織..........................................................................................................3 需求分析..........................................................................................................4 總體設(shè)計..........................................................................................................5 第二章 需求分析與總體設(shè)計........................................................................................4 2.2.1 視頻監(jiān)控系統(tǒng)各模塊設(shè)計..........................................................................7 2.2.2 關(guān)鍵數(shù)值設(shè)定說明......................................................................................8 2.3 3.1 本章總結(jié)..........................................................................................................9 智能視頻監(jiān)控技術(shù).........................................................................................11 第三章
關(guān)鍵理論及技術(shù).............................................................................................11 3.1.1 背景減除(Background Subtraction)..........................................................12 3.1.2 時間差分(Temporal Difference)................................................................12 3.1.3 光流(OpticalFlow).....................................................................................13 3.1.4 運動向量檢測法........................................................................................14 3.2 3.3 RGB色彩模式...............................................................................................14 SMTP和名稱空間簡介.................................................................................15 3.3.1 SMTP簡介.................................................................................................15 3.3.2 名稱空間簡介............................................................................................16 3.4 VFW體系結(jié)構(gòu)簡介......................................................................................17 3.4.1 VFW下AVICap基本功能.......................................................................18 3.4.2 常用的數(shù)據(jù)結(jié)構(gòu)........................................................................................19 3.4.3 回調(diào)函數(shù)....................................................................................................20
III
目錄
3.5 3.6 4.1 4.2 WINDOWS API簡介........................................................................................21 本章小結(jié)........................................................................................................22 軟件總體實現(xiàn)................................................................................................23 軟件各模塊說明............................................................................................23 第四章 軟件實現(xiàn)..........................................................................................................23 4.2.1 視頻內(nèi)容捕獲實現(xiàn)....................................................................................23 4.2.2 視頻內(nèi)容識別實現(xiàn)....................................................................................27 4.2.3 報警功能的設(shè)計與實現(xiàn)............................................................................33 第五章 測試..................................................................................................................42 5.1 5.2 5.3 系統(tǒng)測試相關(guān)理論........................................................................................42 攝像頭監(jiān)控程序軟件描述............................................................................43 功能測試........................................................................................................44 5.3.1 啟動攝像頭功能測試................................................................................44 5.3.2 監(jiān)控對比圖形的設(shè)置測試........................................................................44 5.3.3 視頻敏感區(qū)入侵測試................................................................................45 5.3.4 郵件發(fā)送測試............................................................................................46 5.4 各項參數(shù)性能測試........................................................................................51 5.4.1 色差設(shè)定測試............................................................................................51 5.4.2 限差設(shè)定測試............................................................................................54 5.4.3 延遲時間設(shè)定測試....................................................................................56 5.4.4 監(jiān)控間隔設(shè)定測試....................................................................................56 5.5 測試結(jié)果分析及說明....................................................................................56 第六章 總結(jié)和展望......................................................................................................57 參考文獻(xiàn)........................................................................................................................58 致謝................................................................................................................................59 外文資料原文................................................................................................................60 外文資料譯文................................................................................................................62
IV
第一章 引言
第一章 引言
1.1 研究背景
一直以來,各類違法違規(guī)事件的發(fā)生猝不及防。同時隨著科技的發(fā)展,違法違規(guī)的手段也趨于復(fù)雜,給正常的維護(hù)偵破工作帶來諸多不便。社會的進(jìn)步對安全防范的要求和規(guī)范也更高。依賴于傳統(tǒng)的偵破人員勘察現(xiàn)場的手段已經(jīng)不能滿足當(dāng)今社會的發(fā)展需求。
因此,智能視頻監(jiān)控系統(tǒng)進(jìn)入了人們的視線,也將是未來安全防范主要依賴的工具和手段。首先認(rèn)識一下智能視頻監(jiān)控的概念。智能視頻監(jiān)控是利用計算機視覺技術(shù)對視頻信號進(jìn)行處理、分析和理解,在不需要人為干預(yù)的情況下,通過對序列圖像自動分析對監(jiān)控場景中的變化進(jìn)行定位、識別和跟蹤,并在此基礎(chǔ)上分析、判斷目標(biāo)的行為。
隨著計算機網(wǎng)絡(luò)技術(shù)、計算機圖形技術(shù)、多媒體處理技術(shù)、通信技術(shù)的普及和快速發(fā)展,視頻監(jiān)控系統(tǒng)的數(shù)字化、網(wǎng)絡(luò)化、智能化程度得到進(jìn)一步得加強。也就意味著視頻敏感區(qū)域的入侵檢測也向著多維度的方向發(fā)展,并且具備了更多功能。在視頻監(jiān)控系統(tǒng)不斷發(fā)展的今天,越來越多的視頻監(jiān)控產(chǎn)品向輕、巧、小的方向發(fā)展。
1.2 視頻監(jiān)控發(fā)展歷史和國內(nèi)外研究現(xiàn)狀 1.2.1 視頻監(jiān)控發(fā)展歷史
隨著監(jiān)控行業(yè)的飛速發(fā)展,視頻監(jiān)控系統(tǒng)的發(fā)展大致經(jīng)歷了三個階段。第一代模擬時代:視頻是以模擬方式進(jìn)行處理,視頻信號由同軸電纜進(jìn)行傳輸,其控制方式也以模擬信號的形式進(jìn)行處理;第二代為半數(shù)字式時代:則仍采用視頻信號由同軸電纜進(jìn)行傳輸,而控制主機或硬盤錄像機(DVR)則進(jìn)行數(shù)字處理與存儲;第三代是全數(shù)字式時代:視頻信號從采集開始即為數(shù)字信號,以網(wǎng)絡(luò)系統(tǒng)為傳輸媒介,基于網(wǎng)絡(luò)TCP/IP協(xié)議,采用流媒體計算機控制技術(shù),具有多
電子科技大學(xué)學(xué)士學(xué)位論文
路復(fù)用傳輸,以網(wǎng)絡(luò)虛擬矩陣控制方式,實現(xiàn)強大的視頻監(jiān)控管理控制平臺。[1]
攝像機1運動目標(biāo)分割運動目標(biāo)分割運動目標(biāo)檢測運動目標(biāo)檢測運動目標(biāo)跟蹤運動目標(biāo)跟蹤行為分析與理解行為分析與理解多路數(shù)據(jù)融合及警報信息發(fā)布攝像機2 圖1-1 視頻監(jiān)控系統(tǒng)處理流程
1.2.2 國內(nèi)外研究現(xiàn)狀
國外的研究主要有[2]:在美國國防高級研究計劃局(DARPA)資助下,卡內(nèi)基梅隆大學(xué)、戴維SARNOFF研究中心等幾家著名研究機構(gòu)合作,研制了視頻監(jiān)視與監(jiān)控系統(tǒng)VSAM。VSAM的目標(biāo)是為未來城市和戰(zhàn)場監(jiān)控應(yīng)用開發(fā)的一種自動視頻理解技術(shù),用于實現(xiàn)未來戰(zhàn)爭中人力監(jiān)控費用昂貴、非常危險或者人力無法實現(xiàn)等場合下的監(jiān)控。英國的雷丁大學(xué)(University of Reading)開展了對車輛和行人的跟蹤及其交互作用識別的相關(guān)研究;IBM與Microsoft等公司也正逐步將基于視覺的手勢識別接口應(yīng)用于商業(yè)領(lǐng)域中;Maryland大學(xué)的實時視覺監(jiān)控系統(tǒng)W4不僅能夠定位人和分割出人的身體部分,而且通過建立外觀模型來實現(xiàn)多人的跟蹤,可以檢測和跟蹤室外環(huán)境中的人并對他們之間簡單的交互進(jìn)行監(jiān)控。
國內(nèi)的研究機構(gòu)主要有:中科院北京自動化研究所下屬的模式識別國家重點實驗室,他們對交通場景的視覺監(jiān)控(基于三維線性模型定位、基于擴展卡爾曼濾波器的車輛跟蹤算法)、人的運動視覺監(jiān)控(基于步態(tài)的遠(yuǎn)距離身份識別)和行為模式識別(提出了對目標(biāo)運動軌跡和行為特征的學(xué)習(xí)的模糊自組織神經(jīng)學(xué)習(xí)算法)進(jìn)行了深入研究,取得了一定的成果。此外,國內(nèi)還有一些高校也進(jìn)行了這方面的研究,如上海交通大學(xué)、北京航空航天大學(xué)、北京理工大學(xué)等。
1.3 論文的主要內(nèi)容及意義
智能視頻系統(tǒng)要解決的問題有兩個:一個是將安防操作人員從繁雜而枯燥的長時間觀察屏幕的任務(wù)重解脫出來,由機器來完成這部分工作,減少人力投入;另外一個是為在海量的視頻數(shù)據(jù)中快速搜索到想要找的的關(guān)鍵數(shù)據(jù),大大降低不報、誤報、錯報的概率。
意義可以從以下幾方面來說:
第一章 引言
一是基于人們對安防產(chǎn)品越來越高的要求。對于愈加復(fù)雜的社會環(huán)境,人們需要更快速、高效、可靠的手段維護(hù)自身、社會的安全。
二是在硬件和軟件基礎(chǔ)越發(fā)夯實的條件下,很好地將傳統(tǒng)的視頻監(jiān)控和軟件設(shè)備銜接到一起,發(fā)揮兩者的長處,觸發(fā)了視頻監(jiān)控系統(tǒng)性能從根本上提高。
三是視頻監(jiān)控的一體化要求,從根本上簡化設(shè)備,降低成本,減少人力、物力、財力等各方面的投入。
本文需著重考慮并解決的問題有以下三個大方面:1.視頻內(nèi)容的獲??;2.視頻內(nèi)容的識別;3.報警方式的實現(xiàn)。最終實現(xiàn)小型一體化攝像頭監(jiān)控程序,完成對視頻監(jiān)控中異常行為的智能識別、提前發(fā)現(xiàn)和自動報警的目標(biāo),將在下面的章節(jié)中詳細(xì)論述。
1.4 論文組織
本文以建立一個基于視頻敏感區(qū)入侵檢測的一體化智能視頻監(jiān)控系統(tǒng)為目標(biāo),實現(xiàn)對侵入視頻敏感區(qū)物體的檢測與跟蹤,并根據(jù)所得到的判斷結(jié)果啟動實時的報警信息。提供單個色差、總色差值兩種維度的入侵物體辨識,增加系統(tǒng)針對不同環(huán)境的可移植性。
本文共分為六章,各章節(jié)的主要內(nèi)容如下:
第一章 引言。論述了本文的研究背景、目的、意義等,分析了目前國內(nèi)外的發(fā)展和研究狀況,并提出了相應(yīng)的解決方案。隨后給出了本文的主要研究內(nèi)容和各章節(jié)的安排。
第二章 需求分析與總體設(shè)計。主要介紹了軟件的需求分析與總體設(shè)計,以流程圖的方式展現(xiàn)了軟件相關(guān)的實現(xiàn)流程。
第三章 關(guān)鍵理論技術(shù)。主要論述了設(shè)計與實現(xiàn)攝像頭監(jiān)控軟件涉及到的一些相關(guān)理論與關(guān)鍵技術(shù)。
第四章 軟件實現(xiàn)。在VFW下,提供視頻數(shù)據(jù)連接、視頻內(nèi)容捕獲、并實現(xiàn)從視頻上捕獲并保存圖像文件的功能,完成集監(jiān)控、識別、報警為一體的小型視頻監(jiān)控系統(tǒng)軟件的設(shè)計。
第五章 軟件測試及應(yīng)用。提供關(guān)于本系統(tǒng)開發(fā)的基本的性能要求、初步設(shè)計和系統(tǒng)基本功能需求的信息,以及軟件總體測試的依據(jù)。
第六章 總結(jié)和展望。
電子科技大學(xué)學(xué)士學(xué)位論文
第二章 需求分析與總體設(shè)計
2.1 需求分析
視頻監(jiān)控是一個很廣泛的概念,那么其中涵蓋的知識點和信息點也是非常豐富的。作為現(xiàn)代安防的主要手段之一,視頻監(jiān)控有著非常良好的發(fā)展前景。本視頻敏感區(qū)域的入侵檢測系統(tǒng)只是視頻監(jiān)控中很小的一個部分,實現(xiàn)的功能也相較初級。本系統(tǒng)從最基本的功能入手,在結(jié)合現(xiàn)代計算機技術(shù),實現(xiàn)了基于顏色的視頻內(nèi)容入侵檢測、識別。因為是基于實時的檢測報警,此系統(tǒng)由于時間和能力各方面的限制,暫不提供對視頻內(nèi)容的錄制功能。
智能化、數(shù)字化、網(wǎng)絡(luò)化是視頻監(jiān)控發(fā)展的必然趨勢,智能視頻監(jiān)控的出現(xiàn)正是這一趨勢的直接體現(xiàn)。智能視頻監(jiān)控分析是計算機視覺領(lǐng)域一個新興的應(yīng)用方向和備受關(guān)注的前沿課題,結(jié)合了計算機科學(xué)、機器視覺、圖像處理、模式識別、人工智能等多學(xué)科。智能視頻監(jiān)控將一改傳統(tǒng)監(jiān)控的被動監(jiān)視、事后查錄像的尷尬境地,可以為用戶提供更多高級的視頻分析功能,可以極大的提高視頻監(jiān)控系統(tǒng)的能力,并使視頻資源能夠發(fā)揮更大的作用[3]。
2.1.1 功能需求
傳統(tǒng)的視頻監(jiān)控系統(tǒng)僅僅提供了捕獲、存儲和發(fā)布視頻的功能,監(jiān)控的任務(wù)大部分是由人來完成的。通常,人工監(jiān)控是枯燥和乏味的工作,需要安保人員投入比如常工作更高的注意力。如果監(jiān)控的事件不經(jīng)常發(fā)生,由于人不能長期集中注意力,易疲勞的原因,這種事件往往容易被疏忽。同時,數(shù)據(jù)資源的存儲問題也尤為突出,隨著時間的推移,視頻數(shù)據(jù)也與日俱增,存儲和查找變得尤為困難。
而智能視頻監(jiān)控作為一個新型的監(jiān)控系統(tǒng),在傳統(tǒng)視頻的優(yōu)勢上保持外,還需要克服傳統(tǒng)視頻監(jiān)控存在的諸多問題,軟件需要考慮的問題如下:
1)監(jiān)控前端:用于采集被監(jiān)控點的監(jiān)控信息,并可以配備報警設(shè)備。
2)管理中心:承擔(dān)所有前端設(shè)備的管理、控制、報警處理、錄像、用戶管理等工作。各部分功能分別由專門的服務(wù)器各司其職。
3)監(jiān)控中心:用于集中對所轄區(qū)域進(jìn)行監(jiān)控,包括電視墻、監(jiān)控客戶終端群組
第二章 需求分析與總體設(shè)計
成。系統(tǒng)中可以有一個或多個監(jiān)控中心。智能識別入侵對象,大大降低漏報、誤報的概率。
4)PC客戶端:在監(jiān)控中心之外,也可以由PC機接到網(wǎng)絡(luò)上進(jìn)行遠(yuǎn)程監(jiān)控。提高設(shè)備的可移植性,對復(fù)雜環(huán)境的適應(yīng)性,避免多次開發(fā)的成本投入。
2.1.2 開發(fā)環(huán)境
此次設(shè)計在Windows XP sp2操作系統(tǒng)下采用Microsoft Visual Studio 2010進(jìn)行開發(fā),所選用的開發(fā)語言是C#,并結(jié)合MFC 進(jìn)行編程, 目標(biāo)框架是.NET Framework。這種開發(fā)工具和開發(fā)語言是當(dāng)今比較流行的[4]。
Visual Studio是微軟公司推出的開發(fā)環(huán)境。是目前最流行的Windows平臺應(yīng)用程序開發(fā)環(huán)境。Visual Studio 2010同時帶來了 NET Framework 4.0、Microsoft Visual Studio 2010 CTP(Community Technology Preview--CTP),并且支持開發(fā)面向Windows 7的應(yīng)用程序。除了Microsoft SQL Server,它還支持 IBM DB2和Oracle數(shù)據(jù)庫。
支持 Windows Azure,微軟云計算架構(gòu)邁入重要里程碑。Visual Studio 2010有如下特點:
1.助力移動與嵌入式裝置開發(fā),三屏一云商機無限。
2.實踐當(dāng)前最熱門的 Agile/Scrum 開發(fā)方法,強化團隊競爭力。
3.升級的軟件測試功能及工具,為軟件質(zhì)量嚴(yán)格把關(guān)。
4.搭配 Windows 7,Silverlight4 與 Office,發(fā)揮多核并行運算威力,5.創(chuàng)建美感與效能并重的新一代軟件。
開發(fā)語言C#:C#是一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的,由C和C++衍生出來的面向?qū)ο蟮木幊陶Z言。它在繼承C和C++強大功能的同時去掉了一些它們的復(fù)雜特性(例如沒有宏以及不允許多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。
2.2 總體設(shè)計
研究和分析了目前視頻監(jiān)控系統(tǒng)的特點和針對目前用戶對視頻監(jiān)控在功能上的相關(guān)需求,本文設(shè)計了一款實時視頻監(jiān)控軟件。該軟件主要實現(xiàn)了視頻數(shù)據(jù)連
電子科技大學(xué)學(xué)士學(xué)位論文
接、視頻內(nèi)容識別、從視頻上捕獲并保存圖像文件的功能,完成集監(jiān)控、識別、報警為一體的任務(wù)。主要涵蓋以下功能:
視頻顯示與控制部分:對視頻圖片的顯示與控制。? 控制攝像頭的開啟 ? 打開攝像頭監(jiān)控視窗 ? 啟動攝像頭監(jiān)控
視頻內(nèi)容識別:識別視頻內(nèi)容的參數(shù)設(shè)置,是視頻內(nèi)容識別的主要手段。? 色差 ? 限差 ? 監(jiān)控間隔
報警部分:入侵檢測報警聯(lián)動 ? 發(fā)出警音 ? 發(fā)送郵件
郵件部分:郵件相關(guān)設(shè)置。? 設(shè)置郵件信息 ? 發(fā)送入侵郵件
系統(tǒng)結(jié)構(gòu)圖如下圖所示:
攝像頭監(jiān)控程序前臺顯示部分報警方式選擇后臺部分?jǐn)?shù)值設(shè)定操作項發(fā)出警號發(fā)出郵件監(jiān)控對比圖形保存設(shè)置郵件信息關(guān)于程序色差設(shè)定限差設(shè)定監(jiān)控間隔延遲時間啟動攝像頭保存當(dāng)前截圖對設(shè)比置圖監(jiān)形控發(fā)送測試郵件開始監(jiān)控 圖2-1 系統(tǒng)結(jié)構(gòu)圖
第二章 需求分析與總體設(shè)計
2.2.1 視頻監(jiān)控系統(tǒng)各模塊設(shè)計
視頻監(jiān)控系統(tǒng)主要分為兩個功能模塊:視頻監(jiān)控、報警聯(lián)動。主要由以下四部分組成:
1、產(chǎn)生圖像的攝像機或成像裝置(前端設(shè)備);
2、圖像的傳輸與轉(zhuǎn)換設(shè)備(傳輸設(shè)備);
3、圖像的處理與控制裝置(主控設(shè)備);
4、終端圖像顯示記錄裝置(顯示記錄設(shè)備)。
監(jiān)控端包括PC機、麥克風(fēng)、攝像頭。PC機用于控制采集設(shè)備,接受采集信息,編碼壓縮后傳輸?shù)椒?wù)器,同時接受客戶端的控制信息、圖像信息,并傳送給PC機進(jìn)行編碼后傳送給服務(wù)器。由于是微型一體化的實時報警系統(tǒng),圖像傳輸與轉(zhuǎn)換設(shè)備就忽略掉了,大大節(jié)省了視頻監(jiān)控系統(tǒng)的成本投入。
產(chǎn)生圖像的攝像機或成像裝置是基于筆記本自帶的攝像頭。服務(wù)器為一臺連接到Internet網(wǎng)的高性能計算機,用于接受監(jiān)控端發(fā)過來的圖片信息、響應(yīng)客戶端的請求,并將監(jiān)控端的視頻截圖實時傳送給客戶端。傳輸網(wǎng)絡(luò)為Internet,提供客戶及與服務(wù)器之間額信息通路。客戶端為連接到Internet的普通計算機,通過網(wǎng)絡(luò)與服務(wù)器進(jìn)行通信,便于用戶隨時上網(wǎng)查看現(xiàn)場監(jiān)控的情況。
本系統(tǒng)設(shè)計應(yīng)用于無人監(jiān)管的遠(yuǎn)程網(wǎng)絡(luò)監(jiān)控,具有視頻移動報警功能,即在所連接的任何一個攝像頭的監(jiān)控區(qū)中,若出現(xiàn)物體的移動變化即可啟動報警、發(fā)送入侵郵件等報警設(shè)備。用戶可以獲得服務(wù)器驗證通過后的任何一臺聯(lián)網(wǎng)PC機上進(jìn)行監(jiān)控區(qū)域的查看,還可以多個合法用戶同時查看。當(dāng)用戶在報警結(jié)束后查看系統(tǒng),則可從錄像的圖片文件中得到異常情況發(fā)生時監(jiān)控區(qū)域的狀況。
電子科技大學(xué)學(xué)士學(xué)位論文
進(jìn)入系統(tǒng)成功加載動態(tài)鏈接庫Y成功打開視頻設(shè)備Y注冊回調(diào)函數(shù)NN錯誤處理入侵目標(biāo)檢測與跟蹤退出系統(tǒng)發(fā)生異常事件Y報警操作及發(fā)送報警信息N 圖2-2 系統(tǒng)處理流程圖
2.2.2 關(guān)鍵數(shù)值設(shè)定說明
在程序主界面,從提高監(jiān)控系統(tǒng)的整體性能、提高對環(huán)境的適應(yīng)能力出發(fā),提供了四個參數(shù)的設(shè)置,分別為色差、限差、監(jiān)控間隔和監(jiān)控延遲。下面就這四個數(shù)值做簡單的分析。
色差設(shè)定:主要是為了防止因為細(xì)微的環(huán)境變化而導(dǎo)致誤報的現(xiàn)象。因為我們?nèi)粘K幍那闆r,很容易受到天氣和時段的影響。一天的不同時間段以及不同的天氣狀況,攝像頭內(nèi)的畫面是會在一定范圍內(nèi)波動的??梢愿鶕?jù)用戶的需要,靈活設(shè)定這些參數(shù),能更好地為用戶服務(wù)。增大色差容差能力,將更模糊外界不可抗因素對視頻內(nèi)容的影響。當(dāng)圖像變化的顏色差值大于該色差值時,判斷有可
第二章 需求分析與總體設(shè)計
能出現(xiàn)變化,該值越小則要求圖像變化越小,即要求越嚴(yán)格。色差是該視頻監(jiān)控系統(tǒng)穩(wěn)定性和靈敏性的關(guān)鍵指標(biāo)。因為考究到該系統(tǒng)將會用到各種復(fù)雜的環(huán)境中,用戶可以根據(jù)自身的需求設(shè)定合適的數(shù)值。同時,由0-100的變化指標(biāo),對環(huán)境變化要求不高的用戶就可以將數(shù)值調(diào)大,避免畫面因微小的污染造成誤報。而對環(huán)境純度要求較高的用戶,對于微小的畫面污染也要糾察出來的話,可以適當(dāng)將數(shù)值調(diào)小。
限差設(shè)定:限差用于控制圖像中變化比率ratio,當(dāng)超過該值時開始報警,即當(dāng)圖像出現(xiàn)ratio%的變化時程序認(rèn)為出現(xiàn)異常,該值越小要求圖像變化越小。限差設(shè)定主要是用于防止一些細(xì)微的變化引發(fā)不必要的誤報發(fā)生。適當(dāng)提高限差值,能過濾掉一些無關(guān)緊要的畫面污染。
監(jiān)控間隔設(shè)定:即每隔多長時間進(jìn)行一次監(jiān)控分析。最小值為100ms,值越小,其監(jiān)控分析的頻率越高,同時CPU使用率越高。用戶可以根據(jù)自己的需求設(shè)定相應(yīng)的間隔值。
延長時間設(shè)定:延長時間值表示點擊“開始監(jiān)控”按鈕后延長多少時間后開始監(jiān)控。如果設(shè)置延長時間為0,則表示點擊“開始監(jiān)控”按鈕后馬上開始進(jìn)行監(jiān)控。設(shè)置該參數(shù)主要是用于一些延長監(jiān)控的情況,如現(xiàn)在開啟監(jiān)控,但是人要出門,出門大概需要30s,則設(shè)置延長時間為30s,30s后程序自動進(jìn)入監(jiān)控狀態(tài)。
同時在主程序界面還有兩個選項需要用戶選擇:單個色差、總體色差。因為該監(jiān)控系統(tǒng)主要是基于RGB值來實現(xiàn)對入侵物體的識別。因此就存在兩個維度的對比,單個色差指分別比較RGB顏色差值,總色差值指比較RGB的總差值。
圖2-3 相關(guān)參數(shù)設(shè)置
2.3 本章總結(jié)
本章研究和分析了視頻監(jiān)控系統(tǒng)的相關(guān)需求,對該程序的開發(fā)環(huán)境做了簡單
電子科技大學(xué)學(xué)士學(xué)位論文 的介紹。本章的重點在于設(shè)計和介紹攝像頭監(jiān)控軟件的主要功能模塊與總體設(shè)計。用框圖的形式展示了系統(tǒng)的整體結(jié)構(gòu),并對在設(shè)計軟件中發(fā)揮重要作用的關(guān)鍵數(shù)據(jù)如色差限定、限差設(shè)定、監(jiān)控間隔設(shè)定進(jìn)行了簡單的分析。并針對軟件設(shè)計過程中遇到的問題,提出了相應(yīng)的解決方案。
基于對此次課題的需求分析重新整合梳理,為下面課題的實現(xiàn)打下了良好的基礎(chǔ)。
第三章 關(guān)鍵理論及技術(shù)
第三章
關(guān)鍵理論及技術(shù)
3.1 智能視頻監(jiān)控技術(shù)
IEEE在圖像的智能分析等方面有比較大的成果,比如運動檢測、人臉識別、目標(biāo)跟蹤等。運動檢測是指在指定區(qū)域能識別圖像的變化,檢測運動物體的存在并避免由光線變化帶來的干擾。由于背景圖像的動態(tài)變化,如天氣、光照、影子及混亂干擾等的影響,使得運動檢測成為一項相當(dāng)困難的工作。早期的運動檢測是對編碼后產(chǎn)生的I幀進(jìn)行比較分析,通過視頻幀的比較來檢測圖像變化。目前常用的方法有背景減除(Background Subtraction)、時間差分(Temporal Difference)、光流(OpticalFlow)、運動向量檢測法等[5]。
智能監(jiān)控系統(tǒng)各組成部分的說明如下:
(1)監(jiān)控前端:用于采集被監(jiān)控點的監(jiān)控信息,并可以配備報警設(shè)備。監(jiān)控前端可分為兩類:
①普通攝像頭+視頻服務(wù)器。普通攝像頭可以是模擬攝像頭,也可以是數(shù)字?jǐn)z像頭。原始視頻信號傳到視頻服務(wù)器,經(jīng)視頻服務(wù)器編碼后,以TCP/IP協(xié)議通過網(wǎng)絡(luò)傳至其他設(shè)備。
②網(wǎng)絡(luò)攝像頭。網(wǎng)絡(luò)攝像頭是融攝像、視頻編碼、Web服務(wù)于一體的高級攝像設(shè)備,內(nèi)嵌了TCP/IP協(xié)議棧??梢灾苯舆B接到網(wǎng)絡(luò)。
(2)管理中心:承擔(dān)所有前端設(shè)備的管理、控制、報警處理、錄像、錄像回放、用戶管理等工作。各部分功能分別由專門的服務(wù)器各司其職。
(3)監(jiān)控中心:用于集中對所轄區(qū)域進(jìn)行監(jiān)控,包括電視墻、監(jiān)控客戶終端群組成。系統(tǒng)中可以有一個或多個監(jiān)控中心。
(4)PC客戶端:在監(jiān)控中心之外,也可以由PC機接到網(wǎng)絡(luò)上進(jìn)行遠(yuǎn)程監(jiān)控。
(5)無線網(wǎng)橋:無線網(wǎng)橋用于接入無線數(shù)據(jù)網(wǎng)絡(luò),并訪問互聯(lián)網(wǎng)。通過無線網(wǎng)橋,可以將IP網(wǎng)上的監(jiān)控信息傳至無線終端,也可以將無線終端的控制指令傳給IP網(wǎng)上的視頻監(jiān)控管理系統(tǒng)。目前常用的無線網(wǎng)絡(luò)為CDMA網(wǎng)絡(luò)[6]。
運動目標(biāo)檢測(Moving-Objectives Detecting)作為智能視頻監(jiān)控系統(tǒng)重要的組成部分,是指從視頻流圖像序列中實時提取目標(biāo)運動變化的區(qū)域,檢測出圖像序列中目標(biāo)的運動信息,濾除與運動目標(biāo)無關(guān)的背景的過程。運動目標(biāo)檢測的算
電子科技大學(xué)學(xué)士學(xué)位論文
法依照目標(biāo)與攝像機之間的關(guān)系可以分為靜態(tài)背景下運動檢測和動態(tài)背景下運動檢測。下面就背景減除(Background Subtraction)、時間差分(Temporal Difference)、光流(OpticalFlow)、運動向量檢測法這四種方法做簡單的介紹。
3.1.1 背景減除(Background Subtraction)背景減除方法是目前運動檢測中最常用的一種方法,它是利用當(dāng)前圖像與背景圖像的差分來檢測出運動目標(biāo)的一種技術(shù)。它一般能夠提供相對來說比較全面的運動目標(biāo)的特征數(shù)據(jù),但對于動態(tài)場景的變化,如光線照射情況和外來無關(guān)事件的干擾等也特別敏感。
實際上,背景的建模是背景減除方法的技術(shù)關(guān)鍵。最簡單的背景模型是時間平均圖像,即利用同一場景在一個時段的平均圖像作為該場景的背景模型。由于該模型是固定的,一旦建立之后,對于該場景圖像所發(fā)生的任何變化都比較敏感,比如陽光照射方向,影子,樹葉隨風(fēng)搖動等。大部分的研究人員目前都致力于開發(fā)更加實用的背景模型,以期減少動態(tài)場景變化對于運動目標(biāo)檢測效果的影響[9]。
首先,為背景中每個像素點進(jìn)行統(tǒng)計建模。最簡單的背景模型是時間平均圖像,即利用同一場景在一個時段的平均圖像作為該場景的背景模型。由于該模型是固定的,一旦建立之后,對于該場景圖像所發(fā)生的任何變化都比較敏感,比如陽光照射方向、影子、樹葉隨風(fēng)搖動等。大部分的研究人員目前都致力于開發(fā)更加實用的背景模型,以減少動態(tài)場景變化對運動目標(biāo)檢測效果的影響。
其次,用當(dāng)前圖像與己知背景圖像比較,找出在一定閾值限制下當(dāng)前圖像中的背景像素點。定義當(dāng)前圖像為F(i, j,t),背景圖像為B(i, j,t)。則差分圖像可以表示為:d(i, j,t)=| F(i,j,t)?B(i,j,t)|
最后,對圖像進(jìn)行二值化處理,從而得到前景圖像(運動目標(biāo))的集合。設(shè)x(i,j)為差分圖像中任何一點,Th為灰度閥值,二值化過程可描述為:要保證一個視頻監(jiān)控系統(tǒng)長期穩(wěn)定的運行,背景差分法就要具備很強的魯棒性。背景差分法的難點在于如何建立背景模型和保持背景模型更新,用以彌補由動態(tài)場景中的光線變化等因素帶來的不利影響[7]。
3.1.2 時間差分(Temporal Difference)時間差分(Temporal Difference 又稱相鄰幀差)方法充分利用了視頻圖像的特征,從連續(xù)得到的視頻流中提取所需要的動態(tài)目標(biāo)信息。
第三章 關(guān)鍵理論及技術(shù)
在一般情況下采集的視頻圖像,若仔細(xì)對比相鄰兩幀,可以發(fā)現(xiàn)其中大部分的背景像素均保持不變。只有在有前景移動目標(biāo)的部分相鄰幀的像素差異比較大。時間差分方法就是利用相鄰幀圖像的相減來提取出前景移動目標(biāo)的信息的。讓我們來考慮安裝固定攝像頭所獲取的視頻。我們介紹利用連續(xù)的圖像序列中兩個或三個相鄰幀之間的時間差分,并且用閾值來提取出視頻圖像中的運動目標(biāo)的方法。我們采用三幀差分的方法,即當(dāng)某一個像素在連續(xù)三幀視頻圖像上均有相當(dāng)程度的變化(及大于設(shè)定的閾值時),我們便確定該像素屬于運動目標(biāo)。時間差分運動檢測方法對于動態(tài)環(huán)境具有較強的自適應(yīng)性,但一般不能完全提取出所有相關(guān)的特征像素點,在運動實體內(nèi)部容易產(chǎn)生空洞現(xiàn)象,只能夠檢測到目標(biāo)的邊緣。而且,當(dāng)運動目標(biāo)停止運動時,一般時間差分方法便失效[8]。
3.1.3 光流(OpticalFlow)基于光流方法(Optical Flow)的運動檢測采用了運動目標(biāo)隨時間變化的光流特性,如Meyer 等作者通過計算位移向量光流場來初始化基于輪廓的跟蹤算法,從而有效地提取和跟蹤運動目標(biāo)。該方法的優(yōu)點是在所攝場所運動存在的前提下也能檢測出獨立的運動目標(biāo)。然而,大多數(shù)的光流計算方法相當(dāng)復(fù)雜,且抗噪性能差,如果沒有特別的硬件裝置則不能被應(yīng)用于全幀視頻流的實時處理。
當(dāng)物體與背景發(fā)生相對運動時,運動物體在被觀測圖像上對應(yīng)點的亮度模式也在運動,這種像素點運動的瞬時速度場就是光流。光流表達(dá)了圖像的變化,由于它包含了目標(biāo)運動的信息,因此可被觀察者用來確定目標(biāo)的運動情況。由光流的定義可以引申出光流場,它是指圖像中所有像素點構(gòu)成的一種二維(2D)瞬時速度場,其中的二維速度矢量是景物中可見點的三維速度矢量在成像表面的投影。所以光流不僅包含了被觀察物體的運動信息,而且還包含有關(guān)景物三維結(jié)構(gòu)的豐富信息。對光流的研究成為計算機視覺及其相關(guān)研究領(lǐng)域中的一個重要部分。[8]
光流法的基本原理可描述如下:賦予圖像中的每個像素一個速度矢量,形成一個圖像運動場,根據(jù)各個像素的速度矢量特征,可以對圖像進(jìn)行動態(tài)分析。如果圖像中沒有運動目標(biāo),則光流矢量在整個圖像區(qū)域是連續(xù)變化的,當(dāng)物體和圖像背景存在相對運動時,運動物體所形成的速度矢量必然和區(qū)域背景速度矢量不同,從而檢測出運動物體的位置。
電子科技大學(xué)學(xué)士學(xué)位論文
3.1.4 運動向量檢測法
運動向量檢測法適合于多維變化的環(huán)境,能消除背景中的振動像素,使某一方向的運動對象更加突出的顯示出來。但是,運動向量檢測法也不能精確地分割出對象。動態(tài)視頻目標(biāo)跟蹤技術(shù)在傳統(tǒng)監(jiān)控系統(tǒng)中,目標(biāo)跟蹤是由監(jiān)控人員手工操作來完成。由于所有的目標(biāo)的運動特性是非線性的,其速度和方向都在隨時發(fā)生改變。即使目標(biāo)的速度、方向不變,但它與攝像機的距離也在變化,從而引入很強的非線性因素,因而用人工操作的方法來實現(xiàn)控制非常困難。智能化視頻監(jiān)控技術(shù)提供有效的目標(biāo)自動跟蹤的工具,在用計算機自動處理視頻流的過程中,如發(fā)現(xiàn)和跟蹤感興趣的目標(biāo),就提示監(jiān)控人員加以關(guān)注,并可以控制靈巧快球攝像機,對移動目標(biāo)實現(xiàn)自動跟蹤。
3.2 RGB色彩模式
在一個典型的多媒體計算機系統(tǒng)中常常涉及到用幾種不同的色彩空間表示圖形和圖像的顏色,以對應(yīng)于不同的場合和應(yīng)用。因此數(shù)字圖像的生成、存貯、處理及顯示時對應(yīng)不同的色彩空間需要作不同的處理和轉(zhuǎn)換。
RGB色彩模式是工業(yè)界的一種顏色標(biāo)準(zhǔn),是通過對紅(R)、綠(G)、藍(lán)(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代表紅、綠、藍(lán)三個通道的顏色。RGB色彩模式使用RGB模型為圖像中每一個像素的RGB分量分配一個0-255范圍內(nèi)的強度值。RGB圖像只使用三種顏色,就可以使它們按照不同的比例混合,在屏幕上重現(xiàn)16777216(256 * 256 * 256)種顏色。其中任何參數(shù)發(fā)生改變,顏色也與之對應(yīng)的變化。因此可以用RGB模型實現(xiàn)此次入侵檢測的功能。
人的眼睛通過三種可見光對視網(wǎng)膜的錐狀細(xì)胞的刺激來感受顏色。這種理論就是使用紅、綠、藍(lán)三種基色來顯示彩色的基礎(chǔ),稱之為RGB色彩空間模型。以R、G、B三個參數(shù)為坐標(biāo),我們可以得到如下的一個單位立體方體描述RGB顏色模型。紅、綠、藍(lán)是相互正交的坐標(biāo)軸,每個坐標(biāo)軸都量化為0[9]。
第三章 關(guān)鍵理論及技術(shù)
Y黃(0,0,1)灰度紅(0,1,1)綠(1,0,1)白(0,0,0)黑(1,1,1)M品紅(0,1,0)青(1,0,0)C藍(lán)(1,1,0)
圖3-1 RGB顏色模型
3.3 SMTP和名稱空間簡介 3.3.1 SMTP簡介
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。SMTP協(xié)議屬于TCP/IP協(xié)議族,它幫助每臺計算機在發(fā)送或中轉(zhuǎn)信件時找到下一個目的地。通過SMTP協(xié)議所指定的服務(wù)器,就可以把E-mail寄到收信人的服務(wù)器上了,整個過程只要幾分鐘。SMTP服務(wù)器則是遵循SMTP協(xié)議的發(fā)送郵件服務(wù)器,用來發(fā)送或中轉(zhuǎn)發(fā)出的電子郵件。
首先,運行在發(fā)送端郵件服務(wù)器主機上的SMTP客戶,發(fā)起建立一個到運行在接收端郵件服務(wù) 器主機上的SMTP服務(wù)器端口號25之間的TCP連接。如果接收郵件服務(wù)器當(dāng)前不在工作,SMTP客戶就等待一段時間后再嘗試建立該連接。這個連接建立之后,SMTP客戶和服務(wù)器先執(zhí)行一些應(yīng)用層握手操作。在這個SMTP握手階段,SMTP客戶向服務(wù)器分別指出發(fā)信人和收信人的電子郵件地址。彼此自我介紹完畢之后,客戶發(fā)出郵件消息。SMTP可以指望由 TCP提供的可靠數(shù)據(jù)傳輸服務(wù)把該消息無錯地傳送到服務(wù)器。如果客戶還有其他郵件消息需發(fā)送到同一個服務(wù)器,它就在同一個TCP連接上重復(fù)上述過程,否則,它就指示TCP關(guān)閉該連接。
電子科技大學(xué)學(xué)士學(xué)位論文
SMTP通常有兩種工作模式:發(fā)送SMTP和接收SMTP。具體工作方式為:發(fā)送SMTP在接到用戶的郵件請求后,判斷此郵件是否為本地郵件,若是直接投送到用戶的郵箱,否則向dns查詢遠(yuǎn)端郵件服務(wù)器的MX紀(jì)錄,并建立與遠(yuǎn)端接收SMTP之間的一個雙向傳送通道,此后SMTP命令由發(fā)送SMTP發(fā)出,由接收SMTP接收,而應(yīng)答則反方面?zhèn)魉?。一旦傳送通道建立,SMTP發(fā)送者發(fā)送MAIL命令指明郵件發(fā)送者。如果SMTP接收者可以接收郵件則返回OK應(yīng)答。SMTP發(fā)送者再發(fā)出RCPT命令確認(rèn)郵件是否接收到。如果SMTP接收者接收,則返回OK應(yīng)答;如果不能接收到,則發(fā)出拒絕接收應(yīng)答(但不中止整個郵件操作),雙方將如此重復(fù)多次。當(dāng)接收者收到全部郵件后會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應(yīng)答即可。
用戶發(fā)送SMTP文件系統(tǒng)圖3-2 SMTP使用模型
SMTP命令,應(yīng)答和郵件內(nèi)容接受SMTP文件系統(tǒng) 3.3.2 名稱空間簡介
名稱空間(Namespace)System.Web.Mail類庫里所提供的郵件發(fā)送的對象、屬性和方法它有三個類:SmtpMail、MailMessage和MailAttachment。
(1)MailMessage:提供屬性和方法來創(chuàng)建一個郵件消息對象。(Provides properties and methods for constructing an e-mail message.)(2)MailAttachments:提供屬性和方法來創(chuàng)建一個郵件附件對象。(Provides properties and methods for constructing an e-mail attachment.)
(3)SmtpMail:提供屬性和方法通過使用windows 2000 CDOSYS 的消息組件的聯(lián)合數(shù)據(jù)對象來發(fā)送郵件消息)。(Provides properties and methods for sending messages using the Collaboration Data Objects for Windows 2000(CDOSYS)message component)。
各個類的屬性簡介:
From發(fā)送郵件的地址;To接受郵件的地址;Subject郵件的標(biāo)題;Priority郵件的優(yōu)先級(有效值為High ,Low ,Normal);Attachments返回一個集合,代表附件;Bcc密送地址;Cc抄送地址;獲取或是設(shè)置電子郵件消息的內(nèi)容。BodyFormat
第三章 關(guān)鍵理論及技術(shù)
獲取或是設(shè)置Mail Format的枚舉值,此值指定消息體郵件的格式(Html格式、Text格式);Bodyencoding指定消息的編碼方式編碼(主要有Base64,UUencode)。
SmtpMail類的Send方法,它的目的就是發(fā)送郵件,有兩個重載方法。(1)SmtpMail.Send(“發(fā)送郵件的地址”,“接受郵件的地址”,“郵件的標(biāo)題”,“郵件消息的內(nèi)容”)這個方法很簡單,不適合發(fā)送帶附件的郵件。
(2)SmtpMail.Send(MailMessage)此方法復(fù)雜、靈活,適合發(fā)送附件,而且可以設(shè)置MailMessage對象的各種屬性值。如果我們用ASP.NET寫一個郵件發(fā)送的程序,那么首先應(yīng)該如何得到SMTP。有兩種方法:第一種方法調(diào)用目前知名的郵件服務(wù)提供商的SMTP,比如新浪、搜狐、網(wǎng)易的免費電子郵箱的SMTP;第二種方法是自己裝一個SMTP虛擬服務(wù)器,這個在安裝IIS時一起裝上去的。
3.4 VFW體系結(jié)構(gòu)簡介
與技術(shù)在Wondows平臺下開發(fā)的視頻應(yīng)用程序一般采用兩種主要形式:
一、基于視頻采集卡附帶的二次軟件開發(fā)包SDK(Software Development Kit)進(jìn)行。這種方式的優(yōu)點是方便、容易上手,適于初學(xué)者;缺點是對硬件的依賴性較強、靈活性差,且功能參差不齊,不能充分滿足各種視頻應(yīng)用程序的開發(fā)需求。
二、另一種基于VFW(Video for Windows)進(jìn)行。VFW 是Microsoft公司為開發(fā)Windows平臺下的視頻應(yīng)用程序提供的軟件工具包,提供了一系列應(yīng)用程序編程接口(API),用戶可以通過這些接口很 方便地實現(xiàn)視頻捕獲、視頻編輯及視頻播放等通用功能,還可利用回調(diào)函數(shù)開發(fā)比較復(fù)雜的視頻應(yīng)用程序。該技術(shù)的特點是播放視頻時不需要專用的硬件設(shè)備,而且 應(yīng)用靈活,可以滿足視頻應(yīng)用程序開發(fā)的需要。Windows操作系統(tǒng)自身就攜帶了VFW技術(shù),系統(tǒng)安裝時,會自動安裝VFW的相關(guān)組件。
VFW技術(shù)主要由六個功能模塊組成,下面進(jìn)行簡單說明。
(1)AVICAP32.DLL:包含執(zhí)行視頻捕獲的函數(shù),給AVI文件的I/O處理和視頻,音頻設(shè)備驅(qū)動程序提供一個高級接口;
(2)MSVIDEO.DLL:包含一套特殊的DrawDib函數(shù),用來處理程序上的視頻操作;
(3)MCIAVI.DRV:包括對VFW的MCI命令解釋器的驅(qū)動程序;(4)AVIFILE.DLL:包含由標(biāo)準(zhǔn)多媒體I/O(mmio)函數(shù)提供的更高級的命令,用來訪問.AVI文件;
電子科技大學(xué)學(xué)士學(xué)位論文
(5)ICM:壓縮管理器,用于管理的視頻壓縮/解壓縮的編譯碼器;(6)ACM:音頻壓縮管理器,提供與ICM相似的服務(wù),適用于波形音頻。
采集程序編輯程序回放程序AVICAP.DLLAVICAPACMMCIAVI.DVRAVICAPMSVIDEO.DLLMCIWndMSVIEO.DLL視頻輸入通道AVIFILE.DLL視頻輸入通道圖3-3 VFW各模塊間聯(lián)系圖
AVICAP.DLLAVICAP3.4.1 VFW下AVICap基本功能
選擇攝像頭捕獲的畫面為視頻源,使用AVICap窗口類來實現(xiàn)視頻的采集。AVICap窗口類是VFW的一個重要的組成部分,它實現(xiàn)的主要功能是視頻的捕獲。AVICap提供給應(yīng)用程序一個簡單的、基于消息的接口去訪問視頻設(shè)備和錄音設(shè)備,并且可以控制處理視頻流的捕獲,滿足了此次課題的需求,并且很容易加入到應(yīng)用程序中,適于二次開發(fā)。
AVICap支持實時視頻流捕獲和單幀捕獲。此外,AVICap使程序員可以控制視頻源的開始和結(jié)束位置,并加入了如序列幀捕獲等功能。
使用AVICap生成的捕獲窗具有以下功能:(1)將音頻和視頻流捕獲到AVI文件;(2)動態(tài)地連接或斷開音頻和視頻輸入設(shè)備;
(3)以疊加(overlay)或預(yù)覽(preview)模式顯示輸入的實時視頻信號;(4)指定捕獲所用的文件,并可將捕獲文件的內(nèi)容拷貝到另一個文件;(5)設(shè)置捕獲速率;
(6)顯示控制視頻源和視頻格式的對話框;(7)創(chuàng)建,保存和載入對話框;(8)將圖像和調(diào)色板拷貝到剪貼板;(9)捕獲和保存DIB格式單幀圖像。
通過檢查CAPDRIVERCAPS結(jié)構(gòu)來獲取捕獲驅(qū)動器的能力,并通過AVICap
第三章 關(guān)鍵理論及技術(shù)
提供的Video Source,Video Format,Video Display對話框來對捕獲參數(shù)進(jìn)行設(shè)置。
AVICap在顯示視頻時提供的兩種模式:
預(yù)覽(Preview)模式:該模式使用CPU資源,視頻幀先從捕獲硬件傳到系統(tǒng)內(nèi)存,接著采用GDI函數(shù)在捕獲窗中顯示。在物理上,這種模式需要通過VGA卡在監(jiān)視器上顯示。
疊加(Overlay)模式:該模式使用硬件疊加進(jìn)行視頻顯示,疊加視頻的顯示不經(jīng)過VGA卡,疊加視頻的硬件將VGA的輸出信號與其自身的輸出信號合并,形成組合信號顯示在計算機的監(jiān)視器上。只有部分視頻捕獲卡才具有視頻疊加能力。
基于VFW實現(xiàn)C#控制攝像頭需要手動另起一個線程。定義一個叫AviCapture.cs的類,用于引入avicap32.dll以及相關(guān)的內(nèi)容。在avicap32.dll中,CAPTUREPARMS結(jié)構(gòu)里有一個fYield,表示另起線程標(biāo)志位,如果為真,則程序重新啟動一個線程用于視頻流的捕獲,默認(rèn)值是假。在AviCapture這個類的基礎(chǔ)上定義一個叫Video的類,實現(xiàn)如打開攝像頭、關(guān)閉攝像頭、開始錄像、結(jié)束錄像、拍照片等操作。
3.4.2 常用的數(shù)據(jù)結(jié)構(gòu)
用VFW編寫的視頻捕捉程序,往往要用到以下四個與視頻捕捉相關(guān)的數(shù)據(jù)結(jié)構(gòu):
(1)CAPSTATUS:定義捕獲窗口的當(dāng)前狀態(tài),如圖像的寬、高等;(2)CAPDRIVERCAPS:設(shè)置捕獲設(shè)備所擁有的功能能,如有無視頻疊加能力、有無控制視頻源、視頻格式的對話框等;
(3)CAPTUREPARMS:包含控制視頻流捕獲過程的參數(shù),如捕獲幀頻、指定鍵盤或鼠標(biāo)鍵以種植捕獲,捕獲的時間限制等;
(4)VIDEOHDR:定義視頻數(shù)據(jù)塊的頭信息,在編寫回調(diào)函數(shù)時常用到其數(shù)據(jù)成員lPData(指向數(shù)據(jù)緩存的指針)和dwBuferLength(數(shù)據(jù)緩存大?。?。其中,前三種結(jié)構(gòu)都有相應(yīng)的函數(shù)來設(shè)置和獲取該結(jié)構(gòu)包含的信息。
設(shè)置視頻設(shè)備的屬性
CAPTUREPARMS數(shù)據(jù)結(jié)構(gòu)包括了視頻流的控制參數(shù),通過設(shè)置captureParms結(jié)構(gòu)變量的各個成員變量,可以控制設(shè)備的采樣頻率、中斷采樣按鍵、狀態(tài)行為等。它允許完成以下任務(wù):
電子科技大學(xué)學(xué)士學(xué)位論文
(1)指定幀速度(Frame Rate);(2)指定視頻分配的內(nèi)存大?。唬?)關(guān)閉或打開音頻捕獲;(4)設(shè)定捕獲的時間間隔;
(5)指定捕獲設(shè)備(MCI設(shè)備、VCR或者影碟);(6)指定結(jié)束捕獲的鍵盤或鼠標(biāo)操作;(7)指定使用的視頻類型。
向視頻捕獲窗體發(fā)送WM_CAP_GET_SEQENCE_SETUP消息或者使用宏函數(shù)capCaptureGetSetup,可以獲得一個CAPTUREPARMS數(shù)據(jù)結(jié)構(gòu)的對象,當(dāng)前連接的視頻設(shè)備信息就保存在這個結(jié)構(gòu)體對象里面,此對象的成員變量可以根據(jù)系統(tǒng)需要進(jìn)行修改。修改完畢后,發(fā)送WM_CAP_SET_SEQUENCE_SETUP消息給捕獲窗體,并把這個CAPTUREPARMS對象作為傳送參數(shù),或者使用宏capCaptureSetSetup,就可使修改的設(shè)置生效。之后還可以用capPreviewScale、capPreviewRate等函數(shù)設(shè)置預(yù)覽的比例與速度,直接使用設(shè)備的默認(rèn)值也能滿足大部分的系統(tǒng)需求。
3.4.3 回調(diào)函數(shù)
對采集的視頻數(shù)據(jù)進(jìn)行實時處理時需要用到回調(diào)函數(shù)。在窗口過程、鉤子過程、異步過程都需要調(diào)用回調(diào)函數(shù),在整個回調(diào)過程中自始至終地使用回調(diào)方法?;卣{(diào)函數(shù)是一類特殊的函數(shù),其功能類似于中斷函數(shù),其調(diào)動過程由系統(tǒng)完成,而回調(diào)函數(shù)的具體內(nèi)容則由用戶自己設(shè)定。開發(fā)者可以注冊回調(diào)函數(shù)方法以獲得加載/卸載通知,未處理異常通知、數(shù)據(jù)庫/窗口狀態(tài)修改通知、文件系統(tǒng)修改通知、菜單項選擇、完成的異步操作通知、過濾一組條目等。在系統(tǒng)中,當(dāng)每一回調(diào)函數(shù)被設(shè)定后,并且滿足某一特定條件時,系統(tǒng)將自動調(diào)用該回調(diào)函數(shù)。VFW的回調(diào)函數(shù)主要包括狀態(tài)回調(diào)、錯誤回調(diào)和視頻回調(diào)。兩個宏函數(shù)簡要介紹如下:
(1)capSetCallbackOnFranme(hWnd,fpFrameProc),注冊幀回調(diào)函數(shù)。只要一啟動視頻捕獲,當(dāng)一幀結(jié)束后它就理科產(chǎn)生同步動作,而究竟是哪一個回調(diào)函數(shù)響應(yīng),則由登記在設(shè)置宏函數(shù)中的fpFrameProc參數(shù)來決定。此響應(yīng)是一幀一幀地在同一個緩沖區(qū)內(nèi)進(jìn)行刷新。另外回調(diào)函數(shù)要提前定義,即在程序頭部進(jìn)行定義。
(2)capSetCallbackonVideoStream(hwnd,fpVideoProc)。與capSetCallbackOnFranme不同的是,它要和capCaptureSequenceNoFile(hWnd)或
第三章 關(guān)鍵理論及技術(shù)
capCaptureSequence(hwnd)配合使用,當(dāng)其中一個被執(zhí)行后,回調(diào)動作才會產(chǎn)生。此想聽同樣是一幀結(jié)束后邊產(chǎn)生回調(diào),但每次數(shù)據(jù)都追加在上一幀數(shù)據(jù)的后面,知道所分配的數(shù)據(jù)緩沖區(qū)用完為止。
3.5 Windows API簡介
C#開發(fā)Windows應(yīng)用程序的兩種主要方法為:使用Windows API(Application Programming Interface,應(yīng)用程序編程接口)函數(shù),利用MFC(Microsoft Foundation Class,微軟基礎(chǔ)類庫)類庫。
Windows API 就是操作系統(tǒng)留給應(yīng)用程序的一個調(diào)用接口,應(yīng)用程序通過調(diào)用操作系統(tǒng)的 API 而使操作系統(tǒng)去執(zhí)行應(yīng)用程序的命令(動作)。Windows API是一套用來控制Windows的各個部件的外觀和行為的預(yù)先定義的Windows函數(shù)。用戶的每個動作都會引發(fā)一個或幾個函數(shù)的運行以告訴Windows發(fā)生了什么。API函數(shù)包含在Windows系統(tǒng)目錄下的動態(tài)連接庫文件中[10]。
應(yīng)用程序接口為:“?計算機操作系統(tǒng)(Operating system)?或?程序庫?提供給應(yīng)用程序調(diào)用使用的代碼”。其主要目的是讓應(yīng)用程序開發(fā)人員得以調(diào)用一組例程功能,而無須考慮其底層的源代碼為何、或理解其內(nèi)部工作機制的細(xì)節(jié)。API本身是抽象的,它僅定義了一個接口,而不涉入應(yīng)用程序如何實現(xiàn)的細(xì)節(jié)。Windows API所提供的功能可以歸為七類:
1.基礎(chǔ)服務(wù)(Base Services),提供對Windows系統(tǒng)可用的基礎(chǔ)資源的訪問接口。比如象:文件系統(tǒng)(file system)、外部設(shè)備(device)、進(jìn)程(process)、線程(thread)以及訪問注冊表(Windows registry)和錯誤處理機制(error handling)。這些功能接口位于,16位Windows下的kernel.exe、krnl286.exe或krnl386.exe系統(tǒng)文檔中;以及32位Windows下的 kernel32.dll和advapi32.dll中。
2.圖形設(shè)備接口(GDI),提供功能為:輸出圖形內(nèi)容到顯示器、打印機以及其他外部輸出設(shè)備。它位于16位Windows下的gdi.exe;以及32位Windows下的gdi32.dll。
3.圖形化用戶界面(GUI),提供的功能有創(chuàng)建和管理屏幕和大多數(shù)基本控件(control),比如按鈕和滾動條。接收鼠標(biāo)和鍵盤輸入,以及其他與GUI有關(guān)的功能。這些調(diào)用接口位于:16位Windows下的user.exe,以及32位Windows下的user32.dll。從Windows XP版本之后,基本控件和通用對話框控件(Common Control Library)的調(diào)用接口放在comctl32.dll中。
電子科技大學(xué)學(xué)士學(xué)位論文
4.通用對話框鏈接庫(Common Dialog Box Library),為應(yīng)用程序提供標(biāo)準(zhǔn)對話框,比如打開/保存文檔對話框、顏色對話框和字體對話框等等。這個鏈接庫位于:16位Windows下的commdlg.dll中,以及32位Windows下comdlg32.dll中。它被歸類為User Interface API之下。
5.通用控件鏈接庫(Common Control Library),為應(yīng)用程序提供接口來訪問操作系統(tǒng)提供的一些高級控件。比如像:狀態(tài)欄(status bar)、進(jìn)度條(progress bars)、工具欄(toolbar)和標(biāo)簽(tab)。這個鏈接庫位于:16位Windows下的commctrl.dll中,以及32位Windows下comctl32.dll中。它被歸類為User Interface API之下。
6.Windows外殼(Windows Shell),作為Windows API的組成部分,不僅允許應(yīng)用程序訪問Windows外殼提供的功能,還對之有所改進(jìn)和增強。它位于16位Windows下的shell.dll中,以及32位Windows下的shell32.dll中(Windows 95則在 shlwapi.dll中)。它被歸類為User Interface API之下。
7.網(wǎng)絡(luò)服務(wù)(Network Services),為訪問操作系統(tǒng)提供的多種網(wǎng)絡(luò) 功能提供接口。它包括NetBIOS、Winsock、NetDDE及RPC等。
3.6 本章小結(jié)
本章主要介紹了軟件設(shè)計過程中運用到的相關(guān)理論與技術(shù)。先是對視頻監(jiān)控系統(tǒng)做了簡單的介紹再針對現(xiàn)下較為流行的視頻監(jiān)控技術(shù)手段做了簡單的介紹,有背景減除法、時間差分法、光流法。并簡要分析了這幾種算法的優(yōu)缺點。同時對RGB顏色空間和SMTP郵件的基礎(chǔ)知識進(jìn)行了解,為后面的軟件的設(shè)計與實現(xiàn)提供了一定的依據(jù)。
第四章 軟件實現(xiàn)
第四章 軟件實現(xiàn)
4.1 軟件總體實現(xiàn)
課題主要的任務(wù)為開發(fā)一套基于視頻場景分析的敏感區(qū)域入侵檢測軟件,主要功能包括:檢測參數(shù)設(shè)置、場景圖像采集、異常場景元素提取、場景元素判別、異常入侵報警等功能。
充分考慮到課題的需求,筆者將分為以下三個環(huán)節(jié)介紹軟件具體的實現(xiàn)過程。1.視頻內(nèi)容捕獲的實現(xiàn);2.視頻內(nèi)容識別的實現(xiàn);3.報警功能的設(shè)計與實現(xiàn)。
4.2 軟件各模塊說明 4.2.1 視頻內(nèi)容捕獲實現(xiàn)
視頻捕獲是指由專用的視頻采集卡捕獲視頻、圖像等信息,再將獲得的視頻數(shù)據(jù)進(jìn)行數(shù)字化操作,然后可以針對這些數(shù)據(jù)進(jìn)行保存、修改、傳輸、回放等各項操作。視頻的捕獲并顯示是此次課題實現(xiàn)的關(guān)鍵步驟,關(guān)系到后續(xù)關(guān)于視頻處理的一系列操作。能否準(zhǔn)確有效地捕獲指定的監(jiān)控敏感區(qū),進(jìn)而實現(xiàn)精確的數(shù)據(jù)獲取、分析和處理。在此次課題中,由于資金有限,將采取在本地直接調(diào)用筆記本攝像頭的開閉實現(xiàn)視頻的捕獲[11]。
根據(jù)不同的應(yīng)用需求,可以將視頻幀采集到文件中或者緩存直接加以處理。利用VFW獲取實時視頻數(shù)據(jù)時,通常使用回調(diào)機制來獲得實時數(shù)據(jù)緩沖區(qū)的首址和長度,從而獲得視頻數(shù)據(jù),實現(xiàn)視頻的實時處理。在此次課題中,由于是實現(xiàn)實時的入侵監(jiān)控和報警,并且提供郵件發(fā)送的功能,郵件附帶入侵的視頻數(shù)據(jù)截圖,那么考慮到文件傳輸?shù)乃俣群头€(wěn)定性,將主要以捕獲視頻圖像為主。
電子科技大學(xué)學(xué)士學(xué)位論文
創(chuàng)建視頻捕獲窗口①獲取視頻采集設(shè)備的能力及狀態(tài)信息注冊系統(tǒng)回調(diào)函數(shù)⑤設(shè)置窗口顯示模式④獲取有關(guān)視頻捕獲窗口缺省參數(shù)捕獲圖像到緩存或文件并進(jìn)行相應(yīng)處理設(shè)置捕獲窗口參數(shù)③中止視頻捕獲并斷開與視頻采集設(shè)備的連接與視頻捕獲設(shè)備連接②
圖4-1 視頻捕獲軟件實現(xiàn)流程
具體實現(xiàn)過程如下:(1)創(chuàng)建視頻捕獲窗口
捕獲窗口是所有捕獲操作的基礎(chǔ),其構(gòu)造要調(diào)用:
public CameraClass(IntPtr handle, int left, int top, int width,int height)
{
mControlPtr = handle;
mWidth = width;
mHeight = height;
mLeft = left;
mTop = top;
}(2)將捕獲窗口與視頻捕獲驅(qū)動相連 BOOL fOK;fOK = capDriverConnect(ghWndCap, 0);
if(!fOK){ //無法將指定的視頻捕獲驅(qū)動連接到捕獲窗
第四章 軟件實現(xiàn)
//在此加入錯誤處理 }(3)獲得捕獲驅(qū)動器的能力
capDriverGetCaps(hwndCap, &gCapDriverCaps, sizeof(CAPDRIVERCAPS));其中, gCapDriverCaps是由CAPDRIVERCAPS gCapDriverCaps;定義的。CAPDRIVERCAPS 結(jié)構(gòu)定義了捕獲驅(qū)動器的能力,如有無視頻疊加能力,有無控制視頻源、視頻格式的對話框等。
執(zhí)行capDriverGetCaps語句后,gCapDriverCaps中就獲得了與當(dāng)前捕獲窗相連的捕獲驅(qū)動的各項能力,要根據(jù)該捕獲驅(qū)動的能力來實現(xiàn)視頻的顯示和捕獲。
(4)顯示視頻
由于疊加模式只被部分視頻捕獲卡支持,而大部分視頻捕獲設(shè)備都支持預(yù)覽模式,我們用預(yù)覽(preview)模式顯示視頻:
capPreviewRate(ghWndCap,66);
//設(shè)置顯示幀率
capPreview(ghWndCap,TRUE);
//開始預(yù)覽顯示
要停止預(yù)覽可用:capPreview(ghWndCap,FALSE);用疊加模式顯示視頻的方法相似,只是所用函數(shù)應(yīng)為capOverlay。(5)進(jìn)行視頻捕獲
視頻捕獲主要有兩種模式,連續(xù)視頻流捕獲和單幀捕獲。在進(jìn)行視頻捕獲之前要指定捕獲文件名并為捕獲文件分配存儲空間。public void SaveImage(string path)
{
IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
SendMessage(hWndC,WM_CAP_SAVEDIB,0,hBmp.ToInt32());
}(6)結(jié)束,將捕獲窗同驅(qū)動斷開連接 public void Stop()
{
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
bStat = false;
}
這一步在結(jié)束視頻捕獲程序時是必須的,否則將導(dǎo)致視頻驅(qū)動無法釋放,其它程序?qū)⒉荒苁褂貌东@設(shè)備。
電子科技大學(xué)學(xué)士學(xué)位論文
利用函數(shù)capOverlay選擇采用疊加模式預(yù)覽,從而減小系統(tǒng)資源的占用率,加快了視頻的加載速度。之后使用capPreview啟動預(yù)覽功能,這時就可以在屏幕上顯示出整個界面窗口,并可以看到指示燈亮攝像頭被打開,屏幕上顯示攝像頭攝入的視頻內(nèi)容。
一個程序可以為捕獲窗口登記多個回調(diào)函數(shù),以便在以下幾種情況發(fā)生時通知程序作出相應(yīng)的應(yīng)對操作:(1)狀態(tài)改變;(2)錯誤發(fā)生;
(3)視頻框架緩沖區(qū)變?yōu)榭捎茫?/p>
(4)應(yīng)用程序在捕獲視頻流過程中接收到數(shù)據(jù)。
通過以上幾個步驟就可以建立一個基本的視頻捕獲程序,之后需要使用捕獲窗口的回調(diào)函數(shù),獲取每一幀的視頻數(shù)據(jù),以供之后進(jìn)行視頻內(nèi)容的操作處理。至此,視頻數(shù)據(jù)顯示、采集功能已基本實現(xiàn)[12]。
打開后的視頻捕獲窗口如下圖所示:
圖4-2 啟動攝像頭監(jiān)控程序
第四章 軟件實現(xiàn)
4.2.2 視頻內(nèi)容識別實現(xiàn)
此次課題是基于視頻敏感區(qū)內(nèi)容的識別,目標(biāo)的檢測與跟蹤就是把物體提取出來,對其進(jìn)行識別并獲取其相關(guān)信息的過程。在智能視頻監(jiān)控系統(tǒng)中,物體檢測和跟蹤是提高系統(tǒng)智能性的關(guān)鍵技術(shù)。
因此此次課題的重點則是實現(xiàn)視頻內(nèi)容的識別,筆者在綜合考慮各方面的因素之后,采取了通過對比視頻當(dāng)前畫面和背景畫面的顏色變化的方式來判別是否為有害入侵。確定了基于顏色的敏感入侵檢測,設(shè)定了色差、限差兩個參數(shù)的維度來判斷入侵是否有害,這兩個參數(shù)取值范圍均為0—100區(qū)間,用戶可以根據(jù)自身的需求自定義。
(1)設(shè)置監(jiān)控對比圖形
首先用戶需在攝像頭開啟狀態(tài)下,通過點擊“設(shè)置監(jiān)控對比圖形”來設(shè)置背景圖像。用戶可以根據(jù)自身的需求設(shè)定監(jiān)控對比圖形,這一功能的開放,使得該攝像頭監(jiān)控程序可運用的范圍大大增加。
圖4-3 CaptureScreenClass類圖
CaptureScreenClass類包含三個參數(shù),BitBlt、CreateDC、GetScreenImage。其中GetScreenImage是捕捉當(dāng)前屏幕圖像的關(guān)鍵類,也是設(shè)置監(jiān)控對比圖形的基礎(chǔ)。
public static Bitmap GetScreenImage(Point point01, Point point02, bool full)
{
//創(chuàng)建顯示器的DC
IntPtr dc1 = CreateDC(“DISPLAY”, null, null,(IntPtr)null);
//由一個指定設(shè)備的句柄創(chuàng)建一個新的Graphics對象
Graphics g1 = Graphics.FromHdc(dc1);
Bitmap MyImage;
int width, height;
if(full)
{
電子科技大學(xué)學(xué)士學(xué)位論文
width = Screen.PrimaryScreen.Bounds.Width;
height = Screen.PrimaryScreen.Bounds.Height;
}
else
{
width = point02.Xpoint01.Y;
}
//根據(jù)指定的寬度和高度創(chuàng)建一個與之相同大小的Bitmap對象
MyImage = new Bitmap(width, height, g1);
//獲得屏幕的句柄
Graphics g2 = Graphics.FromImage(MyImage);
//獲得位圖的句柄
IntPtr dc3 = g1.GetHdc();
//把當(dāng)前屏幕捕獲到位圖對象中
IntPtr dc2 = g2.GetHdc();
//把當(dāng)前屏幕拷貝到位圖中
BitBlt(dc2, 0, 0, width, height, dc3, point01.X, point01.Y, 13369376);
//釋放屏幕句柄
g1.ReleaseHdc(dc3);
//釋放位圖句柄
g2.ReleaseHdc(dc2);
return MyImage;
} 設(shè)置好監(jiān)控對比圖形之后,程序自動將圖形保存在debug文件目錄下,命名為BASE。實現(xiàn)語句如下:
private void 設(shè)置監(jiān)控對比圖形button_Click(object sender, EventArgs e)
{
camera.SaveImage(“BASE.bmp”);
}
第四章 軟件實現(xiàn)
(2)色差、限差、監(jiān)控間隔、延遲時間等參數(shù)設(shè)定。
設(shè)置好監(jiān)控對比圖形之后,可以就自身需求設(shè)定參數(shù)值,以期達(dá)到最佳的監(jiān)控效果。參數(shù)的設(shè)定給出了監(jiān)控的彈性范圍,降低系統(tǒng)因過度敏感發(fā)生誤報,或是敏感度不夠造成漏報的現(xiàn)象。
①色差設(shè)定。為了防止因為細(xì)微的環(huán)境變化而導(dǎo)致誤報的現(xiàn)象,因此需要一定的閾值范圍來判斷畫面是否發(fā)生變化。當(dāng)圖像變化的顏色差值大于該色差值時,判斷有可能出現(xiàn)變化,該值越小則要求圖像變化越小,即要求越嚴(yán)格。
string tempStr;
tempStr = ini.ReadValue(“Values”, “色差”);
int tempInt;
if(int.TryParse(tempStr, out tempInt))
{
LimitedValue = tempInt;
colorTrackBar.Value = tempInt;
limitedColorlabel.Text = tempInt.ToString();
} ②限差設(shè)定。限差用于控制圖像中變化比率ratio,當(dāng)超過該值時開始報警,即當(dāng)圖像出現(xiàn)ratio%的變化時程序認(rèn)為出現(xiàn)異常,該值越小要求圖像變化越小。
tempStr = ini.ReadValue(“Values”, “限差”);
if(int.TryParse(tempStr, out tempInt))
{
LimitedRatio =(double)tempInt/100;
ratioTrackBar.Value = tempInt;
ratiolabel.Text = tempInt.ToString();
}
③監(jiān)控間隔設(shè)定。監(jiān)控間隔即每隔多長時間進(jìn)行一次監(jiān)控分析。最小值為100ms,值越小,其監(jiān)控分析的頻率越高,同時CPU使用率越高。private void monitortrackBar_Scroll(object sender, EventArgs e)
{
MonitorTime = monitortrackBar.Value;
monitorlabel.Text = monitortrackBar.Value.ToString();
電子科技大學(xué)學(xué)士學(xué)位論文
if(ini!= null)
ini.WriteValue(“Values”, monitortrackBar.Value.ToString());
monitorTimer.Interval = monitortrackBar.Value * 100;
} ④延遲時間設(shè)定。
private void delaytrackBar_Scroll(object sender, EventArgs e)
{
delaylabel.Text = delaytrackBar.Value.ToString();
if(ini!= null)
ini.WriteValue(“Values”, “延遲”, delaytrackBar.Value.ToString());
}(3)視頻內(nèi)容變化識別
即時捕獲圖像保存為TEMP文件,則是為了實現(xiàn)入侵對象的抓取。該程序自動將監(jiān)控對比圖形賦值到firstMap中,而攝像頭捕獲的圖形賦值到secondMap中。color1和color2分別作為firstMap和secondMap的兩個參數(shù)。GetPixel是用于獲取像素的一個主要函數(shù),除了寬destWidth高destHeight之外,還有三個參數(shù)tempR,tempG,tempB,分別用于存儲圖形的紅、綠、藍(lán)的顏色信息。那么通過比對這三對數(shù)值,若發(fā)生了改變,說明出現(xiàn)了色差,則證明了視頻監(jiān)控的范圍內(nèi)有可能遭到了入侵。
而比對三對R、G、B三對數(shù)值的方法有兩種,一是基于單個色差,對R、B、G的數(shù)值進(jìn)行一一對比。
tempR = Math.Abs((int)color01.R(int)color02.G);tempB = Math.Abs((int)color01.B(int)color02.R);
tempG = Math.Abs((int)color01.G(int)color02.B);
if(colorType)
{
if(tempR > LimitedValue)
“色差方式”,電子科技大學(xué)學(xué)士學(xué)位論文
{
tempCount++;
}
else if(tempG > LimitedValue)
{
tempCount++;
}
else if(tempB > LimitedValue)
{
tempCount++;
}
}
else
{
if(tempR + tempG + tempB > limitedValue3)
tempCount++;
}
}
}(4)開始監(jiān)控
設(shè)置好以上參數(shù),點擊“開始監(jiān)控”后,系統(tǒng)立即進(jìn)入監(jiān)控狀態(tài)。如果之前沒有設(shè)置對比監(jiān)控圖形,將會彈出相應(yīng)的窗口提醒用戶進(jìn)行設(shè)置。
private void 開始監(jiān)控button_Click(object sender, EventArgs e)
{
if(monitorTimer.Enabled)
{
開始監(jiān)控button.Text = “開始監(jiān)控”;
if(mp3!= null)
mp3.StopT();
monitorTimer.Enabled = false;
}
else
第四章 軟件實現(xiàn)
{
if(System.IO.File.Exists(“BASE.bmp”))
{
int tempInt = delaytrackBar.Value * 1000;
System.Threading.Thread.Sleep(tempInt);
baseImage = new Bitmap(“BASE.bmp”);
開始監(jiān)控button.Text = “停止監(jiān)控”;
mp3 = new MP3Class();
mp3.FileName = “Alarm.mp3”;
monitorTimer.Enabled = true;
}
else
{
MessageBox.Show(“還沒有設(shè)置監(jiān)控對比圖形!n請先設(shè)置監(jiān)控對比圖形!”,“MessageBoxIcon.Warning);
}
}
}
提
示
”,MessageBoxButtons.OK, 4.2.3 報警功能的設(shè)計與實現(xiàn)
本文在前面給出了關(guān)于基于視頻內(nèi)容敏感區(qū)入侵檢測的方案,使得監(jiān)控設(shè)備能準(zhǔn)確而有效地追蹤到進(jìn)入到監(jiān)控區(qū)域的異常物體,并能做出反應(yīng)。但是對于背景畫面受到污染,監(jiān)控人員必須通過肉眼觀察屏幕是否有異常入侵,在報警方式上缺乏主動性和實時性。為了防止事后需要監(jiān)控人員查閱大量的視頻數(shù)據(jù),因此監(jiān)控系統(tǒng)還應(yīng)該具備相應(yīng)的實時報警功能,這也是智能視頻監(jiān)控相對于傳統(tǒng)監(jiān)控系統(tǒng)較先進(jìn)的方式。
下面就報警功能的需求分析、兩種報警方式的實現(xiàn)做具體說明。
電子科技大學(xué)學(xué)士學(xué)位論文
4.2.3.1 報警功能的需求分析
報警系統(tǒng)作為視頻監(jiān)控系統(tǒng)的重要組成部分,發(fā)揮著至關(guān)重要的作用,特別是針對本課題的一體化監(jiān)控系統(tǒng)。目前的報警系統(tǒng)多為一臺報警主機和一些前端報警設(shè)備組成。前端報警器能夠快速、準(zhǔn)確地檢測出現(xiàn)場的異常狀態(tài),經(jīng)分析后將分析得到的結(jié)果及時有效地傳送到系統(tǒng)控制主機。系統(tǒng)控制主機可自動判別報警信號來源,自動生成報警并響應(yīng)。系統(tǒng)還可以通過視頻、音頻設(shè)備接收現(xiàn)場視頻的圖像和聲音信號,全面了解視頻敏感區(qū)的現(xiàn)狀。綜合這些信息可以為監(jiān)控人員提供判斷報警信號的可靠性和嚴(yán)重性提高了必要的依據(jù)。
報警系統(tǒng)在設(shè)計過程中應(yīng)該考慮到以下功能需求:
1)系統(tǒng)具備自檢功能,前端報警器或傳輸線路發(fā)生故障時應(yīng)產(chǎn)生報警信號,并自動通報給控制主機;
2)系統(tǒng)可按設(shè)定的報警規(guī)則自動產(chǎn)生報警響應(yīng),如打開或關(guān)閉警報設(shè)備(包括警鈴、現(xiàn)場輔助光源等),自動撥打110或119報警,避免由于人為延誤造成的損失;
3)系統(tǒng)應(yīng)支持人工手動方式的報警響應(yīng),對那些需要經(jīng)過多方核實后方可采取行動的報警信號,操作人員可采取手動報警響應(yīng)模式;
4)系統(tǒng)需要將前端設(shè)備的響應(yīng)記錄在案(包括響應(yīng)的方法、日期時間)、生成日志文件,以備日后查詢。
本系統(tǒng)實現(xiàn)的是一個簡易的智能視頻監(jiān)控報警系統(tǒng),因此在報警功能的設(shè)計的功能實現(xiàn)比較簡單。當(dāng)視頻監(jiān)控區(qū)域有侵入行為發(fā)生時,記錄下被監(jiān)視場所的視頻圖像的同時,實現(xiàn)了兩種形式的報警,一是通過監(jiān)控主機直接發(fā)出警報聲,另外是通過發(fā)送入侵相關(guān)郵件到指定郵箱,實現(xiàn)遠(yuǎn)程實時監(jiān)控。以下就兩種監(jiān)控方式分別做說明。
4.2.3.2 發(fā)出報警鈴音的功能設(shè)計
該程序主要設(shè)置了三個枚舉變量play、pause、StopT,分別定義報警信號的播放、暫停、停止,用MP3Class類來控制。在收到控制主機發(fā)送過來的信號后,做出相應(yīng)的操作。
第四章 軟件實現(xiàn)
圖4-4 MP3Class類
關(guān)鍵的實現(xiàn)代碼如下:
//播放
public void play()
{
TemStr = “";
TemStr = TemStr.PadLeft(127, Convert.ToChar(” “));
APIClass.mciSendString(”play media“, TemStr, TemStr.Length, 0);
mc.state = State.mPlaying;
}
//停止
public void StopT()
{
TemStr = ”“;
TemStr = TemStr.PadLeft(128, Convert.ToChar(” “));
ilong = APIClass.mciSendString(”close media“, TemStr, 128, 0);
ilong = APIClass.mciSendString(”close all“, TemStr, 128, 0);
mc.state = State.mStop;
}
///
/// 暫停
///
public void Pause()
{
TemStr = ”“;
TemStr = TemStr.PadLeft(128, Convert.ToChar(” “));
電子科技大學(xué)學(xué)士學(xué)位論文
ilong = APIClass.mciSendString(”pause media“, TemStr, TemStr.Length, 0);
mc.state = State.mPuase;
}
private string GetCurrPath(string name)
{
if(name.Length < 1)return ”“;
name = name.Trim();
name = name.Substring(0, name.Length-1);
return name;
} } 4.2.3.3 發(fā)出報警郵件的功能設(shè)計
該課題發(fā)出報警郵件的功能,主要是通過SMTP郵件傳輸報警信號到指定郵箱實現(xiàn)的。SMTP 獨立于特定的傳輸子系統(tǒng),且只需要可靠有序的數(shù)據(jù)流信道支持。SMTP 重要特性之一是其能跨越網(wǎng)絡(luò)傳輸郵件,即“SMTP 郵件中繼”。通常,一個網(wǎng)絡(luò)可以由公用互聯(lián)網(wǎng)上 TCP 可相互訪問的主機、防火墻分隔的 TCP/IP 網(wǎng)絡(luò)上 TCP 可相互訪問的主機,及其它 LAN/WAN 中的主機利用非 TCP傳輸層協(xié)議組成。使用 SMTP,可實現(xiàn)相同網(wǎng)絡(luò)上處理機之間的郵件傳輸,也可通過中繼器或網(wǎng)關(guān)實現(xiàn)某處理機與其它網(wǎng)絡(luò)之間的郵件傳輸。所以符合該視頻監(jiān)控系統(tǒng)的各方面需求。
TCP/IP Internet背景更新目標(biāo)分割視頻編碼及傳輸背景圖像攝像頭目標(biāo)模板生成截圖存儲t幀圖像運動區(qū)域檢測報警處理
圖4-5 基于視頻的入侵檢測系統(tǒng)框圖
第四章 軟件實現(xiàn)
(1)SMTP發(fā)送郵件過程
SMTP的命令和響應(yīng)都是基于文本,以命令行為單位,換行符為CR/LF。響應(yīng)信息一般只有一行,由一個3位數(shù)的代碼開始,后面可附上很簡短的文字說明。
SMTP要經(jīng)過建立連接、傳送郵件和釋放連接3個階段。具體為: 1)建立TCP連接。
2)客戶端向服務(wù)器發(fā)送HELLO命令以標(biāo)識發(fā)件人自己的身份,然后客戶端發(fā)送MAIL命令。
3)服務(wù)器端以O(shè)K作為響應(yīng),表示準(zhǔn)備接收。4)客戶端發(fā)送RCPT命令。
5)服務(wù)器端表示是否愿意為收件人接收郵件。
6)協(xié)商結(jié)束,發(fā)送郵件,用命令DATA發(fā)送輸入內(nèi)容。7)結(jié)束此次發(fā)送,用QUIT命令退出。
SMTP服務(wù)器基于DNS中的郵件交換(MX)記錄路由電子郵件。電子郵件系統(tǒng)發(fā)郵件時是根據(jù)收信人的地址后綴來定位郵件服務(wù)器的。SMTP通過用戶代理程序(UA)完成郵件的編輯、收取和閱讀等功能;通過郵件傳輸代理程序(MTA)將郵件傳送到目的地。
初始化攝像頭程序攝像頭程序初始化成功N退出攝像頭監(jiān)控程序Y有待發(fā)送的報警信息Y發(fā)送報警郵件N
圖4-6 郵件報警系統(tǒng)處理流程
(2)SMTP郵箱信息設(shè)置
報警郵件包含MailInfo和MailForm兩個類。其中MailInfo是郵件基本信息的設(shè)置,包括發(fā)件人郵箱、發(fā)件人郵箱密碼、收件人郵箱、郵件SMTP主機選擇、郵件內(nèi)容等。SMTP主機可選擇smtp.163.com、smtp.qq.com、smtp.gmail.com三種形式。
電子科技大學(xué)學(xué)士學(xué)位論文
圖4-7 郵件類信息
設(shè)置郵件基本信息。①設(shè)置郵件主題
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(19, 22);
this.label5.Name = ”label5“;
this.label5.Size = new System.Drawing.Size(41, 12);
this.label5.TabIndex = 6;
this.label5.Text = ”主題:“;②設(shè)置郵件內(nèi)容
this.groupBox1.Controls.Add(this.mailBodyrichTextBox1);
this.groupBox1.Controls.Add(this.mailSubjecttextBox4);
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Location = new System.Drawing.Point(3, 124);
this.groupBox1.Name = ”groupBox1“;
this.groupBox1.Size = new System.Drawing.Size(258, 179);
this.groupBox1.TabIndex = 22;
this.groupBox1.TabStop = false;
this.groupBox1.Text = ”郵件內(nèi)容:“;③設(shè)置發(fā)件人郵箱
this.label1.AutoSize = true;
第四章 軟件實現(xiàn)
this.label1.Location = new System.Drawing.Point(22, 9);
this.label1.Name = ”label1“;
this.label1.Size = new System.Drawing.Size(77, 12);
this.label1.TabIndex = 14;
this.label1.Text = ”郵箱用戶名:“;④設(shè)置發(fā)件人郵箱密碼
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(27, 37);
this.label2.Name = ”label2“;
this.label2.Size = new System.Drawing.Size(65, 12);
this.label2.TabIndex = 17;
this.label2.Text = ”郵箱密碼:“;⑤設(shè)置收件人郵箱
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(22, 90);
this.label4.Name = ”label4“;
this.label4.Size = new System.Drawing.Size(77, 12);
this.label4.TabIndex = 19;
this.label4.Text = ”收件人郵箱:“;⑥設(shè)置郵件SMTP主機
this.SMTPAddresscomboBox1.FormattingEnabled = true;
this.SMTPAddresscomboBox1.Items.AddRange(new object[] {
”smtp.163.com“,”smtp.qq.com“,”smtp.gmail.com“});
this.SMTPAddresscomboBox1.Location System.Drawing.Point(105, 61);
this.SMTPAddresscomboBox1.Name = ”SMTPAddresscomboBox1“;
this.SMTPAddresscomboBox1.Size = new System.Drawing.Size(142, 20);
this.SMTPAddresscomboBox1.TabIndex = 15;
this.SMTPAddresscomboBox1.Text = ”smtp.163.com“;
= new
電子科技大學(xué)學(xué)士學(xué)位論文
郵件內(nèi)容設(shè)置好后,將會查看到如下郵件設(shè)置信息。
圖4-8 郵件設(shè)置信息
(2)SMTP發(fā)送郵件的實現(xiàn)
在設(shè)置好郵件信息后,勾選主界面“發(fā)送郵件”選項,則實現(xiàn)了發(fā)送報警郵件的功能。其中,TEMP2是監(jiān)控狀態(tài)下,監(jiān)控畫面發(fā)生異常時捕獲的視頻圖像。在監(jiān)控區(qū)域發(fā)生入侵時,若主機在聯(lián)網(wǎng)狀態(tài)下,系統(tǒng)將自動將入侵圖片TEMP2發(fā)送到關(guān)聯(lián)郵箱。若是沒有將郵件的信息填寫完整,將對應(yīng)彈出對話框提醒用戶。private void 設(shè)置郵箱button_Click(object sender, EventArgs e)
{
MailForm form = new MailForm();
if(form.ShowDialog()== DialogResult.OK)
{
EmailInfo = form.emailInfo;
EmailInfo.AttachFilePath ”TEMP2.bmp“;
}
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
if(ini!= null)
ini.WriteValue(”Values“, checkBox2.Checked.ToString());
= Application.StartupPath +
”發(fā)送郵件“,第四章 軟件實現(xiàn)
}
private void button3_Click(object sender, EventArgs e)
{
if(EmailInfo!= null)
EmailInfo.Send();
else
MessageBox.Show(”沒有設(shè)置郵箱!請先設(shè)置郵箱!“, ”提示!",MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
本章主要介紹了軟件各模塊的具體實現(xiàn)代碼,實現(xiàn)了攝像頭監(jiān)控系統(tǒng)的視頻監(jiān)控并實時報警的功能。選擇基于RGB顏色的內(nèi)容識別方式,并提出色差、限差兩個維度來控制監(jiān)控識別的效果,提高了系統(tǒng)對復(fù)雜環(huán)境的適應(yīng)能力。在報警方式上,除了由監(jiān)控主機發(fā)出報警鈴音外,還新增了發(fā)送報警郵件的功能,進(jìn)一步實現(xiàn)了該系統(tǒng)的實時性。
電子科技大學(xué)學(xué)士學(xué)位論文
第五章 測試
5.1 系統(tǒng)測試相關(guān)理論
(1)系統(tǒng)測試的目標(biāo)和任務(wù)
按照系統(tǒng)開發(fā)的總思路,在系統(tǒng)各模塊及相應(yīng)接口等軟件設(shè)計完成后,有必要對系統(tǒng)的完整性、有效性、可操作性及正確性進(jìn)行測試,以確保軟件投入運行后能充分體現(xiàn)其先進(jìn)性。軟件測試是確保軟件開發(fā)質(zhì)量的重要手段,它也是對開發(fā)需求能否完整實現(xiàn)的檢驗,它也是對系統(tǒng)總體設(shè)計及相關(guān)編碼正確性的最后復(fù)核。
系統(tǒng)軟件開發(fā)的目的是為用戶提供滿足使用要求,確保使用質(zhì)量的高性能產(chǎn)品。監(jiān)督和管理信息系統(tǒng)的開發(fā)是與系統(tǒng)安全性密切結(jié)合的,是一個復(fù)雜的系統(tǒng)工程。在開發(fā)過程中,各模塊的開發(fā)難免會存在一些接口問題,在操作實施過程中也不可避免地會產(chǎn)生錯誤,為解決這些問題和錯誤必須對已開發(fā)完成的系統(tǒng)軟件進(jìn)行實地運行與測試,真正實現(xiàn)系統(tǒng)投用后的正確性和可操作性,真正使系統(tǒng)功能的發(fā)揮,達(dá)到設(shè)計的目的。
(1)測試的方法
軟件測試的方法一般有兩種,即功能測試和結(jié)構(gòu)測試兩種。功能測試采用完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程,以開發(fā)的程序是否能適時地接收輸入數(shù)據(jù)并產(chǎn)生正確的輸出信息,完成設(shè)計規(guī)定的功能。結(jié)構(gòu)測試必須完全了解程序的結(jié)構(gòu)和處理過程,了解與相關(guān)工藝的相互銜接,按照已編程序內(nèi)部的邏輯測試程序檢驗程序中每個通路,是否按預(yù)先的設(shè)置正確工作。
(3)測試的原則
1)軟件測試一般應(yīng)遵行以下一些原則: 2)必須與現(xiàn)場的系統(tǒng)操作員相結(jié)合; 3)測試應(yīng)編制好詳細(xì)的測試工作計劃; 4)測試應(yīng)分塊、分階段進(jìn)行; 5)測試應(yīng)考慮相關(guān)數(shù)據(jù)的誤輸入;
6)測試必須有輸入數(shù)據(jù)和預(yù)輸出結(jié)果兩部分;
7)所有測試必須都應(yīng)追溯到現(xiàn)場工作完成后預(yù)期功能,以確保整個系統(tǒng)處于
第五章 測試
安全、正常運轉(zhuǎn)狀態(tài);
5.2 攝像頭監(jiān)控程序軟件描述
(1)軟件描述
軟件名稱:攝像頭監(jiān)控程序。
實現(xiàn)目標(biāo):為用戶提供簡單、方便、一體化的視頻敏感區(qū)入侵檢測報警體系,便于實時報警和遠(yuǎn)程管理。
軟件使用領(lǐng)域:本軟件適用于本地用戶,暫不適合網(wǎng)絡(luò)應(yīng)用。(2)一般約束
本項目開發(fā)過程中的約束如下:
1)管理方針:嚴(yán)格貫徹加強項目開發(fā)過程管理的指導(dǎo)思想,文檔撰寫和程序設(shè)計執(zhí)行《計算機軟件開發(fā)工程規(guī)范2003》相關(guān)的國家標(biāo)準(zhǔn)。
2)軟件約束:系統(tǒng)平臺為WindowsXP sp2,開發(fā)平臺使用Visual Studio 2010,目標(biāo)框架.NET Framework,開發(fā)語言使用C#。3)使用環(huán)境假設(shè):本地計算機。4)與其它應(yīng)用間的接口:無。
5)并行操作:服務(wù)器端均提供并行操作的能力。6)控制功能:提供圖形界面對系統(tǒng)進(jìn)行控制管理。7)所需開發(fā)語言:C#。(3)假設(shè)和約定
軟件客戶端假定為Windows系統(tǒng)和安裝了Visual Studio 2010的系統(tǒng),所開發(fā)的客戶端只能在此系統(tǒng)下安裝運行,暫不支持其他操作系統(tǒng)。
(4)軟件功能
攝像頭控制:包括啟動攝像頭,關(guān)閉攝像頭,啟動監(jiān)控系統(tǒng)等。攝像頭顯示:攝像頭攝入內(nèi)容顯示,界面的控制。
輸出:包括保存當(dāng)前圖像,發(fā)出入侵報警音,發(fā)送入侵郵件等。
遠(yuǎn)程監(jiān)控實現(xiàn):發(fā)送入侵郵件到指定郵箱。
電子科技大學(xué)學(xué)士學(xué)位論文
5.3 功能測試
5.3.1 啟動攝像頭功能測試
此次課題將測試地點定為教學(xué)樓C區(qū)108教室,從多個角度測試該視頻監(jiān)控系統(tǒng)的性能。如設(shè)定不同的色差、限差值來測試系統(tǒng)的靈敏度。
啟動程序后筆記本電腦的攝像頭自動打開,并跳轉(zhuǎn)到程序主界面。
圖5-1 啟動攝像頭
如圖顯示攝像頭成功啟動,并能準(zhǔn)確捕獲視頻圖像顯示在熒幕上。屏幕不閃,畫面固定,性能穩(wěn)定。選定好一個角度之后,接下來就可以開始實現(xiàn)具體的監(jiān)控環(huán)節(jié)。
5.3.2 監(jiān)控對比圖形的設(shè)置測試
點擊界面上的“設(shè)置監(jiān)控對比圖形”的控件之后,系統(tǒng)默認(rèn)將當(dāng)前攝像頭攝入的圖形為監(jiān)控對比圖形,并存儲在debug下,命名為BASE。這個操作是設(shè)定背景圖形。該系統(tǒng)提供給用戶自定義背景圖形的功能,使得該系統(tǒng)的移植性和適應(yīng)性大大增強。用戶可以根據(jù)自己的需求,在需要的場合安裝好攝像頭,開啟該程序之后就可以立即啟動監(jiān)控。
第五章 測試
圖5-2 保存當(dāng)前截圖圖片
測試成功。設(shè)置好監(jiān)控對比圖形之后,就可以對視頻區(qū)域進(jìn)行監(jiān)控了。
5.3.3 視頻敏感區(qū)入侵測試
根據(jù)需要設(shè)定好色差、限差、監(jiān)控間隔、監(jiān)控延遲之后,點擊“開始監(jiān)控”之后,程序處于監(jiān)控狀態(tài)。測試人員要小心不要走入到監(jiān)控畫面內(nèi)即可。
測試時,設(shè)定初始色差為4,限差為10,監(jiān)控間隔為50ms。以單個色差方式對入侵物體進(jìn)行捕獲。
(1)在沒有入侵的情況下,監(jiān)控畫面正常,沒有發(fā)出警報。系統(tǒng)穩(wěn)定性測試成功。
電子科技大學(xué)學(xué)士學(xué)位論文 圖5-3 沒有入侵情況
(2)入侵發(fā)生測試
為了方便測試,筆者在監(jiān)控區(qū)域內(nèi)放置了一個棕綠相間的書包。
系統(tǒng)檢測到異常情況,程序很快啟動,在窗口界面彈出“監(jiān)控發(fā)現(xiàn)異常!”的提醒外,也發(fā)出報警信號音報警。鈴音正常作響,警鈴報警方式測試成功。
圖5-4 發(fā)生入侵情況
5.3.4 郵件發(fā)送測試
分別對郵件的各方面填寫不完全進(jìn)行測試,查看系統(tǒng)在應(yīng)對各種不同狀況時給出的反應(yīng)。于是分為以下四種:未填寫發(fā)件人郵箱、未填寫發(fā)件人郵箱密碼、未填寫收件人郵箱、控制主機未聯(lián)網(wǎng)狀態(tài)分別進(jìn)行測試。
1.當(dāng)未填寫發(fā)件人郵箱時:
第二篇:防盜報警與視頻監(jiān)控系統(tǒng)聯(lián)動
防盜報警系統(tǒng)
安防報警主機接收分析各無線探測器發(fā)送過來的觸發(fā)信號,并可智能化地進(jìn)行報警工作:啟動攝像頭進(jìn)行拍照、發(fā)送報警短信和彩信、撥打用戶報警電話和中心報警電話、聯(lián)動相應(yīng)開關(guān)、聯(lián)動監(jiān)控設(shè)備進(jìn)行錄像。
以下為系統(tǒng)各個組件的功能:
·報警主機:接收分析各無線探測器發(fā)送過來的觸發(fā)信號,并可智能化地進(jìn)行報警工作:啟動攝像頭進(jìn)行拍照、發(fā)送報警短信和彩信、撥打用戶報警電話和中心報警電話、聯(lián)動相應(yīng)開關(guān)。
·無線紅外探測器:安裝在室內(nèi)需要監(jiān)控位置,當(dāng)人非法進(jìn)入時,紅外探測器觸發(fā)主機報警。
·無線氣感探測器:安裝在廚房或浴室,一旦有燃?xì)庑孤?,即觸發(fā)主機報警。
·無線煙霧探測器:安裝在客廳或廚房位置,當(dāng)住戶發(fā)生火災(zāi)時,探頭探測到煙霧,即觸發(fā)主機報警。
·無線緊急按鈕:當(dāng)家中有緊急事情發(fā)生如重病,或有盜賊闖入,需要求助時按動緊急按鈕,即觸發(fā)主機報警。
·無線門磁探測器:安裝在需監(jiān)控的門框或窗戶上,當(dāng)有人非法打開大門或窗門時,即觸發(fā)主機報警。
·攝像頭:與主機有線連接,安裝在室內(nèi)需視頻監(jiān)控的位置,當(dāng)主機報警或視頻移動偵測啟動時,立即拍攝現(xiàn)場圖片。
安防聯(lián)網(wǎng)中心系統(tǒng)
系統(tǒng)報警時,主機撥打設(shè)置好的主人電話外,還撥打夜狼安防聯(lián)網(wǎng)中心電話和派出所110接警監(jiān)控中心,夜狼安防聯(lián)網(wǎng)中心可顯示用戶的資料及觸發(fā)報警的探測器信息,并在監(jiān)控顯示屏上彈出顯示用戶詳細(xì)地理位置的地圖,以便接警中心快速獲得最準(zhǔn)確的信息。本系統(tǒng)有如下特征:
·接收、識別、記錄報警信號
·強大的用戶數(shù)據(jù)庫管理功能
·電子地圖及萬能顯示板
·完善的操作員權(quán)限、數(shù)據(jù)維護(hù)功能
·多媒體功能特征
報警聯(lián)動視頻監(jiān)控系統(tǒng)
系統(tǒng)特點
·廣泛性:非常適合現(xiàn)代家庭安全防范的需求,系統(tǒng)集防盜、防火、視頻監(jiān)控于一體,使每個家庭都能得到保護(hù)。
·實用性:系統(tǒng)能在實際可能發(fā)生受侵的情況及時自動報警,并且操作簡便,環(huán)節(jié)少,易學(xué)易用,不需要增加更多設(shè)備。
·系統(tǒng)性:在案情發(fā)生時,除能現(xiàn)場報警外,能自動進(jìn)行錄像,能發(fā)送報警短信和現(xiàn)場圖片的彩信,同時聯(lián)動報警器還自動撥打用戶的指定手機,固定電話或?qū)⒕閭鞯叫^(qū)的保安報警中心。
·可靠性:該系統(tǒng)結(jié)構(gòu)設(shè)計合理,產(chǎn)品耐用、質(zhì)量可靠、并實現(xiàn)報警后通過現(xiàn)場視頻驗證。
·移動性:系統(tǒng)中報警部分采用GSM無線移動網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸,可安裝在家中任何可以接收GSM網(wǎng)絡(luò)信號的位置,不受布線的限制,而且移動更方便;視頻監(jiān)控只需接入家中的寬帶網(wǎng)絡(luò)即可。
·功能強大:系統(tǒng)不但可以遠(yuǎn)程視頻監(jiān)控、錄像,還可以遠(yuǎn)程監(jiān)聽,異地布防撤防、遙控啟動家用電器開關(guān)等功能、兼容性強、可兼容各類型有線、無線探頭,集防盜、緊急求助、防煤氣泄漏、火災(zāi)自動報警于一體。
防盜報警聯(lián)動視頻監(jiān)控系統(tǒng)的現(xiàn)實意義
1.滿足客戶對報警服務(wù)業(yè)的期望
家庭的安全,是每個人都重點關(guān)心的話題。在以往外出收到警情,卻不知道具體發(fā)生什么事情的時候,人們都會感到極其擔(dān)心,都希望第一時間趕回家處理。而如今夜狼安防提供報警聯(lián)動視頻監(jiān)控系統(tǒng),在外的人收到警情后,可以遠(yuǎn)程實時視頻監(jiān)控,實時掌握家里現(xiàn)場的情況,為溫馨的家庭又增添了一份關(guān)懷。
2.對報警服務(wù)單位的工作進(jìn)行優(yōu)化
對于報警服務(wù)單位來說,這將是一個重大的技術(shù)升級,極大地提升了工作效率和監(jiān)控效果。從以往的電話撥號形式,到現(xiàn)在實時的視頻監(jiān)控現(xiàn)場。報警服務(wù)單位即可有效地掌握警情的處理過程,同時可以高效地安排資源。通過報警觸發(fā)錄像功能,將現(xiàn)場的警情記錄起來,作為破案的有力證據(jù)。通過產(chǎn)品系統(tǒng)的升級,更能顯現(xiàn)報警服務(wù)業(yè)的重要性和必要性,這將是推動行業(yè)高速發(fā)展的助力器。
3.達(dá)到政府對特殊行業(yè)的要求
國務(wù)院在前年就頒發(fā)了《娛樂場所管理條例》,明確規(guī)定:歌舞娛樂場所應(yīng)當(dāng)在營業(yè)場所的出入口、主要通道安裝閉路電視監(jiān)控設(shè)備,并保證閉路電視監(jiān)控設(shè)備在營業(yè)期間正常運行,不得中斷。
對于其他相關(guān)在公共場所經(jīng)營的行業(yè),也有相應(yīng)條例要求安裝視頻監(jiān)控。因此,作為報警服務(wù)單位,在提供防盜報警、視頻監(jiān)控的同時,還提供警情協(xié)管的支持,為人民群眾提供了一個安全的活動環(huán)境,讓經(jīng)營管理者安心無憂。
第三篇:基于A8的嵌入式Linux遠(yuǎn)程視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)
基于A8的嵌入式Linux遠(yuǎn)程視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)
摘 要:將網(wǎng)絡(luò)技術(shù)和嵌入式技術(shù)相結(jié)合的遠(yuǎn)程視頻監(jiān)控系統(tǒng)是視頻采集技術(shù)的發(fā)展趨勢,文中提出了一種基于對等網(wǎng)絡(luò)模型的嵌入式遠(yuǎn)程視頻監(jiān)控系統(tǒng)的設(shè)計方案。該方案將嵌入式系統(tǒng)和Web開發(fā)技術(shù)相結(jié)合,再利用USB攝像頭作為視頻監(jiān)控系統(tǒng)的終端進(jìn)行圖像采集,并使用網(wǎng)絡(luò)TCP協(xié)議將其遠(yuǎn)程發(fā)送給服務(wù)器終端。相較于傳統(tǒng)的Client/Server網(wǎng)絡(luò)模型,本系統(tǒng)實現(xiàn)采用對等網(wǎng)絡(luò)模型,即確定發(fā)送命令的控制程序既可以是客戶端,又可以是服務(wù)端。文中選擇嵌入式開發(fā)平臺ARM系列A8處理器進(jìn)行研究和設(shè)計,并采用PC機下的Linux系統(tǒng)作為主機開發(fā)環(huán)境。
關(guān)鍵詞:嵌入式;視頻監(jiān)控;網(wǎng)絡(luò)遠(yuǎn)程控制;對等網(wǎng)絡(luò)
中圖分類號:TP39 文獻(xiàn)標(biāo)識碼:A 文章編號:2095-1302(2016)05-00-03
0 引 言
網(wǎng)絡(luò)遠(yuǎn)程控制(Network Remote Control,NRC)是利用計算機網(wǎng)絡(luò)對遠(yuǎn)程計算機進(jìn)行操作的一種控制方式。計算機技術(shù)和網(wǎng)絡(luò)技術(shù)目前都在高速發(fā)展,現(xiàn)在監(jiān)控系統(tǒng)已經(jīng)發(fā)展到網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)[1]。網(wǎng)絡(luò)視頻監(jiān)控具有數(shù)字視頻監(jiān)控和網(wǎng)絡(luò)傳輸技術(shù)的優(yōu)點,其具有不受地理位置約束、擴展方便簡單、信息處理較容易等特點,可以使遠(yuǎn)程的管理和維護(hù)變成現(xiàn)實,只要是網(wǎng)絡(luò)覆蓋的地方,就能實現(xiàn)網(wǎng)絡(luò)監(jiān)控[2]。嵌入式系統(tǒng)向網(wǎng)絡(luò)發(fā)展已成必然趨勢,目前嵌入式系統(tǒng)對網(wǎng)絡(luò)協(xié)議如TCP/IP協(xié)議和HTTP協(xié)議的支持也越來越廣泛。系統(tǒng)硬件設(shè)備選擇與配置
系統(tǒng)硬件設(shè)備選擇凌陽嵌入式A8教學(xué)實驗系統(tǒng)進(jìn)行設(shè)計與實現(xiàn)。該實驗箱基于ARM CortexTM-A8內(nèi)核的處理器S5PV210,該芯片又名“蜂鳥”(Hummingbird),是三星公司推出的一款適用于智能手機和平板電腦等多媒體設(shè)備的應(yīng)用處理器[3]。本系統(tǒng)使用了人機交互模塊的USB接口、多媒體模塊攝像頭接口及通信模塊以太網(wǎng)接口。
1.1 USB攝像頭
攝像頭屬于視頻類設(shè)備。在目前的Linux核心中,視頻部分的標(biāo)準(zhǔn)是Video for Linux(簡稱V4L)。這個標(biāo)準(zhǔn)其實定義了一套接口,內(nèi)核、驅(qū)動、應(yīng)用程序以這個接口為標(biāo)準(zhǔn)進(jìn)行交流。目前的V4L涵蓋了視、音頻流捕捉及處理等內(nèi)容,USB攝像頭也屬于它支持的范疇。
本系統(tǒng)所采用的嵌入式Linux操作系統(tǒng)如果需要使用USB攝像頭則必須在內(nèi)核配置時添加Video4Linux驅(qū)動和對USB攝像頭驅(qū)動模塊的支持。本系統(tǒng)的設(shè)計與實現(xiàn)采用靜態(tài)加載以上驅(qū)動。首先進(jìn)入Linux源代碼所在的目錄,在終端輸入make menuconfig命令,在基于Ncurses內(nèi)核配置圖形界面進(jìn)行內(nèi)核選項的配置。選中多媒體設(shè)備選項“Multimedia device->”,進(jìn)入多媒體設(shè)備配置界面,選中“Video For Linux”,加載Video4Linux模塊,就可以使內(nèi)核實現(xiàn)對Video4Linux驅(qū)動的支持,為視頻采集設(shè)備提供編程接口。在內(nèi)核配置主界面,選中USB支持選項“USB support―>”,選中“USB Multimedia device”選項下的“USB OV511 Camera support”,使內(nèi)核中加入OV511接口芯片的USB數(shù)字?jǐn)z像頭的驅(qū)動支持。OV511 USB 攝像頭驅(qū)動配置界面如圖1所示。
圖1 OV511 USB 攝像頭驅(qū)動配置界面
1.2 開啟幀緩沖設(shè)備
幀緩沖(Frame Buffer,F(xiàn)B)是Linux為顯示設(shè)備提供的一個接口,是把顯存抽象后的一種設(shè)備,它允許上層應(yīng)用程序在圖形模式下直接對顯示緩沖區(qū)進(jìn)行讀寫操作。由于FB設(shè)備驅(qū)動為受限驅(qū)動,因此必須進(jìn)行設(shè)備開啟。本系統(tǒng)開發(fā)環(huán)境采用發(fā)行版Linux操作系統(tǒng)Ubuntu10.10,Ubuntu下啟用FB設(shè)備的一般步驟如下所示:
安裝v86d和hwinfo兩個包查看顯卡是否支持,并設(shè)置本機支持模式。
修改啟動文件/etc/default/grub,如圖2所示。
圖2 修改啟動文件圖
修改modules文件/etc/initramfs-tools/modules,如圖3所示。
圖3 修改modules文件
更新以上兩個文件并重啟系統(tǒng),即可查看到FB設(shè)備,具體如圖4所示。
圖4 查看FB設(shè)備系統(tǒng)軟件設(shè)計
本系統(tǒng)軟件由攝像頭驅(qū)動模塊、圖像采集模塊、網(wǎng)絡(luò)傳輸模塊和網(wǎng)絡(luò)服務(wù)器模塊組成[4]。攝像頭驅(qū)動模塊使得攝像頭為應(yīng)用程序編寫提供系統(tǒng)編程接口。功能主要包括攝像頭設(shè)備信息的獲取與設(shè)置、設(shè)備的打開和關(guān)閉、信號通道選擇、窗口初始化等。圖像采集模塊的作用是使用編程接口獲取攝像頭采集來的圖像信息并進(jìn)行暫時存儲。服務(wù)器通過網(wǎng)絡(luò)傳輸模塊與遠(yuǎn)程監(jiān)控PC機端進(jìn)行信息交流。
2.1 V4L圖像信息采集流程
V4L圖像信息采集流程分為如下幾步:
(1)打開攝像頭設(shè)備
int vd->fd = open(“/dev/video0”,O_RDWR);
(2)讀video_capability 中的信息,成功后可讀取vd->capability各分量ioctl(vd->fd,VIDIOCGCAP,&(vd->capability));
(3)讀video_picture中的信息,成功后可讀取圖像的屬性ioctl(vd->fd,VIDIOCGPICT,&(vd->picture));
(4)初始化channel
int i;
for(i = 0; i capability.channels; i++){
vd->channel[i].channel = i;
第四篇:數(shù)字圖像課程設(shè)計 監(jiān)控視頻中道路車流量檢測系統(tǒng)設(shè)計
山東建筑大學(xué)
課 程 設(shè) 計 說 明 書
題
目:
課
程:
院(部):
專
業(yè):
班
級:
學(xué)生姓名:
學(xué)
號:
指導(dǎo)教師:
完成日期:
監(jiān)控視頻中道路車流量檢測系統(tǒng)設(shè)計
數(shù)字圖像處理課程設(shè)計
信息與電氣工程學(xué)院
電子信息工程
電信
2013年6月
山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
目錄
摘要································································································II 1 設(shè)計目的························································································1 2 設(shè)計要求············
··················································1 3 設(shè)計內(nèi)容························································································2 3.1運動車輛檢測算法比較································································ 2 3.2形態(tài)學(xué)濾波·················································································5 3.3車輛檢測···················································································6 3.4車輛計數(shù)···················································································9 3.5軟件設(shè)計····················································································9 總結(jié)與致謝·························································································10 參考文獻(xiàn)····························································································11 附錄···································································································12
I 山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
摘 要
獲得實時的交通信息是當(dāng)前各種檢測方式的前提,但是現(xiàn)有的信息采集方式并不能滿足交通管理與控制的需求。隨著計算機技術(shù)的快速發(fā)展,基于視頻的檢測技術(shù)在交通中得到了廣泛的應(yīng)用,同其它檢測方式相比,它具有檢測范圍大、設(shè)置靈活、安裝維護(hù)方便、檢測參數(shù)多等優(yōu)點?;趫D像處理的視頻檢測方式近年來發(fā)展很快,已成為當(dāng)今智能交通系統(tǒng)的一個研究熱點。本論文對視頻交通流運動車輛檢測的內(nèi)容進(jìn)行了深入地研究。結(jié)合視頻圖像詳細(xì)的介紹了視頻檢測中的背景更新、陰影去除、車輛分割等關(guān)鍵技術(shù)和算法,介紹了視頻檢測的方法。最后在MATLAB的平臺上進(jìn)行了系統(tǒng)實現(xiàn)設(shè)計。實驗結(jié)果表明,該算法具有一定的可行性,能夠快速的將目標(biāo)參數(shù)檢測出來
關(guān)鍵詞:MATLAB;幀間差法;車輛檢測
II 山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書 設(shè)計目的
隨著經(jīng)濟的發(fā)展,人民生活水平的提高,汽車保有量大幅增加,怎樣安全高效地對交通進(jìn)行管理,就顯得非常重要.解決這一問題的關(guān)鍵是建立智能交通系統(tǒng)(ITS),其中車輛檢測系統(tǒng)是智能交通系統(tǒng)的基礎(chǔ).它為智能控制提供重要的數(shù)據(jù)來源
作為ITS的基礎(chǔ)部分,車輛檢測系統(tǒng)在ITS中占有很重要的地位,目前基于視頻的檢測法是最有前途的一種方法,它是通過圖像數(shù)字的方法獲得交通流量信息,主要有以下優(yōu)點:(1)能夠提供高質(zhì)量的圖像信息,能高效、準(zhǔn)確、安全可靠地完成道路交通的監(jiān)視和控制工作.(2)安裝視頻攝像機破壞性低、方便、經(jīng)濟.現(xiàn)在我國許多城市已經(jīng)安裝了視頻攝像機,用于交通監(jiān)視和控制.(3)由計算機視覺得到的交通信息便于聯(lián)網(wǎng)工作,有利于實現(xiàn)道路交通網(wǎng)的監(jiān)視和控制.(4)隨著計算機技術(shù)和圖像處理技術(shù)的發(fā)展,滿足了系統(tǒng)實時性、安全性和可靠性的要求 設(shè)計要求
通過對視頻流中的車輛進(jìn)行檢測和跟蹤,準(zhǔn)確地統(tǒng)計每個車道流量、平均車速、平均車道占有率、車隊長度、平均車間距等信息為交通規(guī)劃,交通疏導(dǎo)和車輛動態(tài)導(dǎo)航領(lǐng)域提供一系列指導(dǎo)。
設(shè)計車輛檢測與識別方法和車流量統(tǒng)計方法,實現(xiàn)監(jiān)控視頻中道路車流量檢測。通過實驗驗證檢測精度。山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書 設(shè)計內(nèi)容
3.1運動車輛檢測算法比較
目前,大多數(shù)的運動目標(biāo)檢測的方法或是基于圖像序列中時間信息的,或是基于圖像序列中空間信息的。常見的方法有如下3種:(1)光流法
當(dāng)目標(biāo)運動時,圖像上對應(yīng)目標(biāo)的亮度信息(光流)也相應(yīng)的運動。這樣,根據(jù)時間上相鄰的幾幀圖像可以計算出各像素點運動的大小和方向,從而利用運動場來區(qū)分背景和運動目標(biāo)。其主要優(yōu)點在于能檢測出獨立的運動目標(biāo),而不需預(yù)知場景的任何信息,對變化的復(fù)雜背景情況有較好的適應(yīng)。但其缺點也很明顯,由于要依賴光流估計的準(zhǔn)確程度,大多數(shù)計算方法相當(dāng)復(fù)雜并且計算量特別大,所以除非有特殊的硬件支持,否則很難實現(xiàn)實時檢測。(2)背景減法
將實時視頻流中的圖像像素點灰度值與事先已存儲或?qū)崟r得到的視頻背景模型中的相應(yīng)值比較,不符合要求的像素點被認(rèn)為是運動像素。這是視頻監(jiān)控中最常用的運動檢測方法。這種方法雖然能較完整的提取運動目標(biāo),但對光照和外部條件造成的環(huán)境變化過于敏感,常常會將運動目標(biāo)的陰影錯誤的檢測為其自身的一部分。同時由于時間流逝,實際場景的多種因素都會發(fā)生變化,比如停留物的出現(xiàn)、光線等的變化、運動目標(biāo)對背景的遮擋等等,背景需要得到實時地更新,這是影響其檢測效果的一個重要因素。背景差分算法的實質(zhì)是:實時輸入的場景圖像與背景圖像進(jìn)行差分,可以較準(zhǔn)確的分割出運動目標(biāo)。但是背景差分算法也有其天然的缺陷,隨著時間的推移,場景的光線、樹葉的遮擋、或者運動物體滯留都會很大程度的破壞已經(jīng)建立好的背景圖像。為了解決這些問題,最好的方法便是使用背景建模和背景更新算法來彌補。前面已經(jīng)討論過相關(guān)問題,因此,本文假設(shè)背景處于理想情況下進(jìn)行背景差分算法的研究?;诒尘皽p法的MATLAB仿真,如圖 山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
Surendra算法計算出背景圖像,左圖為原始輸入圖像,中圖為背景圖像,右圖為背景差分法得出的二值化圖像。實驗結(jié)果表明:背景差分算法也可以有效地檢測出運動目標(biāo)。由于背景建模算法的引入,使得背景對噪聲有一定的抑制作用,在差分圖像中“雪花”較幀間差分算法有所減少。同時,使用背景差分算法檢測出的運動物體輪廓,比幀間差分法的檢測結(jié)果更清晰。因此,在背景建模與背景更新處于比較理想的狀態(tài)下,背景差分算法得到的結(jié)果略好于幀間差分的結(jié)果。(3)幀間差法
幀間差法是根據(jù)當(dāng)前圖像與參考圖像的差別來獲得運動目標(biāo)輪廓的方法。這種方法對于場景中的光線漸變不敏感,適于動態(tài)變化的環(huán)境,且運算量相對較小。但一般不能完整的提取運動目標(biāo),且在運動實體內(nèi)易產(chǎn)生空洞現(xiàn)象,從而不利于下一步的分析和處理。
2.2.1 幀間差法運動目標(biāo)檢測
基于幀間差分的運動檢測即幀差法,它根據(jù)相鄰幀或隔幀圖像間亮度變化的大小來檢測運動目標(biāo),選取T=20,仿真結(jié)果如下圖: 山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
由上面的仿真實驗可以得出:運用幀間差分方法進(jìn)行運動目標(biāo)的檢測,可以有效的檢測出運動物體。右子圖中,可以比較清晰地得到運動物體的輪廓。但是,這種算法雖然可以使背景像素不隨時間積累,迅速更新,因此這種算法有比較強的適應(yīng)場景變化能力。但是幀差法表示的是相鄰兩幀同位置的變化量,因此很有可能將比較大的運動目標(biāo),或者運動目標(biāo)內(nèi)部顏色差異不大的像素判斷錯誤,在實體內(nèi)部產(chǎn)生拉伸、空洞現(xiàn)象。而且當(dāng)前景運動很慢且時間間隔選擇不合適時,容易出現(xiàn)根本檢測不到物體的情況。在差分圖像中,有很多“雪花”般的噪聲,這些是由于圖像局部的干擾造成的。使用幀間差分法,需要考慮如何選擇合理的時間間隔,這一般取決于運動目標(biāo)的速度。對于快速運動的目標(biāo),需要選擇較短的時間間隔,如果選擇不當(dāng),最壞情況下目標(biāo)在前后兩幀中沒有重疊,被檢測為兩個分開的目標(biāo);對于慢速運動的目標(biāo),應(yīng)該選擇較長的時間間隔,如果選擇不當(dāng),最壞情況下目標(biāo)在前后兩幀中幾乎完全重疊,根本檢測不到目標(biāo)。此外,在場景中由于多個運動目標(biāo)的速度不一致也給時間間隔的選取帶來很大麻煩。山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
3.2形態(tài)學(xué)濾波
由于刮風(fēng)、氣流等原因,背景中部分物體小幅度晃動;光線的變化等不確定因素,會使得視頻圖像產(chǎn)生大量噪聲,當(dāng)差值圖像二值化后,仍然有很多無用的噪聲斑點,因此,需要采用數(shù)學(xué)形態(tài)學(xué)方法,對分割后的二值圖像進(jìn)行形態(tài)學(xué)濾波。數(shù)學(xué)形態(tài)學(xué)的主要用途是獲取物體拓?fù)浜徒Y(jié)構(gòu)信息。它通過物體和機構(gòu)元素相互作用的某些運算,得到物體更本質(zhì)的形態(tài)。其基本思想是:利用一個成為結(jié)構(gòu)元素的“探針”收集圖像信息。這種基于探測的思想與人的視覺特點有類似之處:總是關(guān)注一些感興趣的物體或者結(jié)構(gòu),并有意識地尋找圖像中的這些結(jié)構(gòu)。數(shù)字形態(tài)學(xué)在本文所涉及到的圖像處理中,主要作用包括利用形態(tài)學(xué)的基本運算,對圖像進(jìn)行觀察和處理,從而達(dá)到改善圖像質(zhì)量的目的。形態(tài)學(xué)的基本運算包括:腐蝕(Erosion)、膨脹(Dilation)、開(Opening)和閉(Closing)運算。用這些算子及其組合來進(jìn)行圖像形狀和結(jié)構(gòu)的分析及處理,包括圖像分割、特征提取、邊界檢測、圖像濾波、圖像增強與恢復(fù)等方面的工作。形態(tài)學(xué)一般以二值圖像為處理對象,但也可以用在某些灰度圖像的應(yīng)用中。(1)結(jié)構(gòu)元素
結(jié)構(gòu)元素被形象的稱為刷子或探針,是膨脹和腐蝕操作中最基本的組成部分。它用于測試輸入圖像,通常比待處理圖像小得多。本文使用3×3的結(jié)構(gòu)元素,經(jīng)開運算處理后,可提取出移動物體。二維結(jié)構(gòu)元素由一個數(shù)值為0或1矩陣組成。結(jié)構(gòu)元素的原點指定了圖像中需要處理的像素范圍,結(jié)構(gòu)元素數(shù)值為1的點決定結(jié)構(gòu)元素的領(lǐng)域像素在腐蝕或膨脹操作是需要參與計算。(2)腐蝕和膨脹
腐蝕和膨脹是許多形態(tài)學(xué)算法的基礎(chǔ)。腐蝕操作會去掉物體的邊緣點,細(xì)小物體所有的點都會被認(rèn)為是邊緣點,因此會整個被刪去。再做膨脹時,留下來的大物體會變回原來的大小,而被刪除的小物體則永遠(yuǎn)消失了。膨脹操作會使物體的邊界向外擴張,如果物體內(nèi)部存在小空洞的話,經(jīng)過膨脹操作這些洞將被補上,因而不再是邊界了。再進(jìn)行腐蝕操作時,外部邊界將變回原來的樣子,而這些內(nèi)部空洞則永遠(yuǎn)消失了。山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
(3)開啟和閉合
開啟就是相對圖像進(jìn)行腐蝕,然后膨脹其結(jié)果。閉合就是先對圖像進(jìn)行膨脹,然后腐蝕其結(jié)果。開啟一般使對象的輪廓變得光滑,斷開狹窄的間斷和消除細(xì)的突出物。閉合同樣使輪廓線變得光滑,但是開啟相反的是,它通常消除狹窄的間斷和長細(xì)的鴻溝,消除小的孔洞,并填補輪廓線中的斷裂開啟。
3.3車輛檢測
(1)車輛檢測新算法流程 山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
(2)截取檢測帶
為了提高數(shù)字系統(tǒng)處理的實時性的要求,我們只取檢測圖像中的一部分來進(jìn)行處理,這個過程我們叫做截取檢測帶,但是檢測帶內(nèi)要包含足夠的車輛信息,以滿足檢測精度的需要.檢測帶的寬度和高度可以根據(jù)需要進(jìn)行設(shè)置,從而保證了算法的通用性和靈活性.檢測帶的高度:車輛前后間距在圖像上大約為40-50個像素,因此檢測帶高度應(yīng)小于40-50行,否則會引起誤判.又考慮到檢測帶的高度決定其內(nèi)包含的總像素數(shù),將直接影響計算量,因此檢測帶高度不應(yīng)過高.另一方面,檢測帶的高度又不能過小,否則帶內(nèi)包含的車輛信息量太少,易受噪聲影響,引起誤判.綜合考慮以上因素,取高度為20行.如下圖 山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
(3)提取檢測帶的數(shù)據(jù)流以及對數(shù)據(jù)流的校正
檢測帶內(nèi)留下了車輛的信息,如何對這些車輛進(jìn)行計數(shù)?如何判斷相鄰兩幀的車輛信息是否是同一輛車? 以圖像寬度為800個像素為例,為了減少數(shù)據(jù)的運算量以及所需存儲器的數(shù)目,可選取每10個像素寬的信息生成數(shù)據(jù)流的一個信息位.為此,定義3個長度為80的一維數(shù)組a、b、c,分別表示前一幀數(shù)據(jù)流、當(dāng)前幀數(shù)據(jù)流、兩幀數(shù)據(jù)流之差.若檢測帶的高度為20個像素,則把每個寬10個像素、高20個像素的浮動窗內(nèi)像素的灰度值進(jìn)行累加(∑∑g,g為灰度值),如果累加值大于某個設(shè)定的閾值,就將對應(yīng)的數(shù)組元素賦值為‘1’,否則賦值為‘0’.這樣就得到了當(dāng)前圖像的反映車輛運動信息的數(shù)據(jù)流
由于鄰域比較可能會造成車輛的一部分信息丟失,甚至產(chǎn)生斷帶,使獲得的數(shù)據(jù)流在有車輛信息的連續(xù)‘1’中,會產(chǎn)生毛刺‘0’.因此需要修正數(shù)據(jù)流,消除毛刺,得到盡可能連續(xù)的‘1’
(1)填1:在兩個連續(xù)的‘1’段中間產(chǎn)生的毛刺‘0’,其數(shù)目與沒有車的‘0’數(shù)目相比還是很少的,并且與‘1’之間的距離比較小.根據(jù)這些特征我們對數(shù)據(jù)流進(jìn)行“填1”處理.(2)填0:如果上一幀車頭部分進(jìn)入檢測帶,鄰域比較的結(jié)果所提取的車輛信息的‘1’的個數(shù)不足判斷有新車過來,而當(dāng)前幀車體進(jìn)入了檢測帶,雖然鄰域比較的結(jié)果所提取的車輛信息的‘1’的個數(shù)表明有車輛在,但與上一幀相減的結(jié)果始終不足計數(shù),從而造成該車漏檢.為了解決這種車輛頭部小尾部大造成的車輛誤判的問題以及有效消除車前燈的影響,可將這些不足判別車輛信息的‘1’抹‘0’.對于有些車輛由于情況比較復(fù)雜,會使相鄰兩幀的信息變化出現(xiàn)忽多忽少情況,這樣就可能出現(xiàn)漏計或誤計的現(xiàn)象.為了克服這種現(xiàn)象,利用前后兩幀圖像相關(guān)信息進(jìn)行修正.笫27幀信息流: ***************00000 第28幀未修正信息流: ***************00000 山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
第28幀修正信息流: ***************00000 第29幀未修正信息流: ***************00000 第29幀修正信息流: ***************00000 3.4車輛計數(shù)
由于窗口浮動,這給車輛計數(shù)帶來一定的困難.為此,筆者提出了用檢測帶內(nèi)車輛信息的變化規(guī)律進(jìn)行
計數(shù)的方法.其原理如下:如果用當(dāng)前幀的數(shù)據(jù)流減去上一幀的數(shù)據(jù)流則只可能出現(xiàn)4種情況和3種結(jié)果:(1)上一幀某一位置沒有車,當(dāng)前幀對應(yīng)位置也沒有車:0減0,結(jié)果為0;(2)上一幀某一位置有車,當(dāng)前幀對應(yīng)位置也有車:1減1,結(jié)果為0;(3)上一幀某一位置沒有車,當(dāng)前幀對應(yīng)位置有車:1減0,結(jié)果為1;(4)上一幀某一位置有車,當(dāng)前幀對應(yīng)位置沒有車:0減1,結(jié)果為-11 顯然,結(jié)果為‘1’,表示有新車輛到來:結(jié)果為‘-1’,表示車輛已離開.利用該結(jié)果就可以方便地進(jìn)行車輛的計數(shù)和車速的估算了.其方法如下:(1)利用數(shù)據(jù)流上升沿‘1’來進(jìn)行車輛的計數(shù).(2)利用上升沿‘1’
和下降沿‘-1’之間的幀數(shù),根據(jù)攝像頭的拍攝速度和車輛的長度進(jìn)行車速的估算.(3)由于噪聲的存在,數(shù)組c里可能會出現(xiàn)較短的連續(xù)‘1’段,為此可根據(jù)車輛的最小寬度來選取一個閾值,如:車輛的最小寬度為100個像素,即占數(shù)據(jù)流信息為10位,就可以選取連續(xù)的‘1’段長度大于9計為一輛車.共有多少個連續(xù)的、長度大于該選定閾值的‘1’段,就表示新到來了多少輛車.3.5軟件設(shè)計
據(jù)攝像頭的本設(shè)計采用MATLAB進(jìn)行程序編寫,部分程序見附錄 山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
總結(jié)與致謝
本次設(shè)計設(shè)計的系統(tǒng)具有準(zhǔn)確率高的特點,該設(shè)計能夠正確判斷有無車輛的信息,在交通擁塞狀況不十分嚴(yán)重、車速不太快(車速≤70km/h)的情況下,該算法對車輛計數(shù)的準(zhǔn)確率很高。但該算法要求車輛速度不是太快。
通過本次課程設(shè)計,使我對MATLAB有了更深的掌握和理解,鞏固了我在《數(shù)字圖像處理》課程中所學(xué)的基本理論知識和實驗技能,使我對《數(shù)字圖像處理》課程有了更深入的了解,進(jìn)一步激發(fā)了我對所學(xué)專業(yè)學(xué)習(xí)的興趣;
在設(shè)計的過程和設(shè)計說明書的撰寫過程中,指導(dǎo)老師給予了我熱心的幫助和大力的支持,給我提了諸多的寶貴意見,拓寬了我的思路。在此我向老師致以崇高的敬意和衷心的感謝!山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
參考文獻(xiàn)
[1] 許志影,李晉平.MATLAB及其在圖像處理中的應(yīng)用[J].計算機與現(xiàn)代化,2003(4)[2] 羅軍輝,馮平.MATLAB710在圖像處理中的應(yīng)用[M].北京:機械工業(yè)出版社,2005.[3] 董長虹,賴志國,余嘯海.MATLAB圖像處理與應(yīng)用[M].北京:國防工業(yè)出版社,2004.[4] 王家文,李仰軍.MATLAB710圖形圖像處理[M].北京:國防工業(yè)出版社,2006 山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
附錄1 % Moving object detection ver1.0 2012-10-23 clear all;close all;clc;% read a avi file information, 'cartest.avi' 為待處理的視頻文件,格式為.avi fileinfo = aviinfo('cartest.avi');
numFrames = fileinfo.NumFrames;% To avoid consuming too much memories, read only a clip of 200 frames each time clipframes = 200;Clips = floor(numFrames/clipframes);% Read the first frame in the video sequence as the reference background image %在matlab2010 版本中,可采用函數(shù)mmreader,詳見matlab2010 help Fref = aviread('cartest.avi',10);Iref =Fref.cdata;
% predefine the threshold Threh = 15;% Define a structure element se=strel('disk',3);for m = 1:Clips
% Calculate the start and end frame index of the m-th movie clip
startframe =(mstartframe +1)
Icurr = movclip(k).cdata;
% Calculate the absolute differrence image between the current frame Icurr, % and the referrence frame Iref.Idiff = abs(double(rgb2gray(Iref))-double(rgb2gray(Icurr)));
% motion segment,detection moving object by threholding Idiff
Ifg = Idiff >Threh;% morphological filtering by using IMOPEN ,to remove noise region
% in the segmented result image
Ifg2 = imopen(Ifg,se);
figure(1);山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
subplot(2,2,1), imshow(Icurr),title('Current Image ');
subplot(2,2,2), imshow(Ifg), title('Foreground Image(moving object)');
subplot(2,2,3), imshow(Ifg2), title('filtered by morphological opening operation ');
pause(0.01);
end end山東建筑大學(xué)信息與電氣工程學(xué)院課程設(shè)計說明書
附錄2
第五篇:基于ARM的視頻采集系統(tǒng)的設(shè)計與實現(xiàn)
基于ARM的視頻采集系統(tǒng)的設(shè)計與實現(xiàn)
摘要
本文根據(jù)家庭視頻采集系統(tǒng)的要求,提出一種基于ARM的網(wǎng)絡(luò)視頻采集方案。方案要求視頻的實時傳輸、實時監(jiān)控。本系統(tǒng)以Intel Xscale 芯片和嵌入式Linux系統(tǒng)為平臺,在平臺中搭建網(wǎng)絡(luò)視頻服務(wù)器,并以它為中介,負(fù)責(zé)將USB攝像頭采集到得視頻數(shù)據(jù)傳輸?shù)骄W(wǎng)絡(luò)服務(wù)器中,最后發(fā)送到申請監(jiān)控的遠(yuǎn)程PC機中,遠(yuǎn)程PC只需在網(wǎng)頁中便能實時的看到監(jiān)控端的視頻圖像。
論文首先闡述了嵌入式網(wǎng)絡(luò)視頻采集技術(shù)的發(fā)展、現(xiàn)狀和前景,然后介紹了嵌入式硬件系統(tǒng)結(jié)構(gòu)和嵌入式Linux操作系統(tǒng)的特點,闡述了嵌入式硬件整體結(jié)構(gòu),使大家大體的完整的對系統(tǒng)硬件有詳細(xì)的了解,實際記錄了嵌入式操作系統(tǒng)內(nèi)核的編譯和移植,介紹了Bootloader的基本原理和啟動過程,實現(xiàn)了視頻采集程序的編譯和移植,研究了嵌入式一般驅(qū)動程序的使用。隨后,本文詳細(xì)描述了視頻采集程序的整體結(jié)構(gòu)框圖和具體功能代碼塊、網(wǎng)絡(luò)通信編程技術(shù)、圖像編解碼、嵌入式視頻服。
關(guān)鍵詞:ARM;嵌入式;Linux;視頻采集
I
目錄
摘 要.............................................................................................................................I 第1章 引言.................................................................................................................1
1.1 課題的背景和來源..........................................................................................1 1.2本文的內(nèi)容及主要工作..................................................................................1 第2章 嵌入式ARM系統(tǒng)硬件結(jié)構(gòu)簡介..................................................................3
2.1 視頻監(jiān)控系統(tǒng)結(jié)構(gòu)簡介..................................................................................3 2.2 ARM處理器簡介.............................................................................................3 2.3 XSCALE體系結(jié)構(gòu)............................................................................................4 2.4 主要硬件電路說明..........................................................................................7 第3章 嵌入式ARM系統(tǒng)軟件結(jié)構(gòu)..........................................................................9
3.1 LINUX操作系統(tǒng)簡介.......................................................................................9 3.2 交叉編譯環(huán)境的建立....................................................................................10 3.3 嵌入式LINUX操作系統(tǒng)移植........................................................................11 3.3.1 BootLorder移植...................................................................................11 3.3.2 Linux 內(nèi)核移植...................................................................................12 3.3.3 嵌入式文件系統(tǒng).................................................................................13 3.4 LINUX下的程序調(diào)試.....................................................................................14 第4章 USB設(shè)備驅(qū)動程序設(shè)計...............................................................................15 4.1 設(shè)備驅(qū)動程序簡介........................................................................................15 4.2 LINUX下驅(qū)動程序的實現(xiàn).............................................................................18 4.3 USB攝像頭驅(qū)動程序設(shè)計............................................................................20 第5章 視頻采集功能的設(shè)計...................................................................................23 5.1 基于V4L的編程...........................................................................................24 5.1.1 攝像頭相關(guān)數(shù)據(jù)結(jié)構(gòu).........................................................................24 5.1.2 攝像頭基本功能實現(xiàn).........................................................................25 5.1.3 視頻數(shù)據(jù)采集.....................................................................................29 5.2 圖像編解碼....................................................................................................32 5.2.1 編解碼介紹.........................................................................................32 5.2.2 系統(tǒng)壓縮技術(shù).....................................................................................33
第1章引言
1.1課題的背景和來源
二十一世紀(jì)的網(wǎng)絡(luò)化、數(shù)字化讓人們的生活每天都發(fā)生著翻天覆地的變化,獲取信息的方便和快捷可以使人們在信息化的今天領(lǐng)先一步創(chuàng)造出巨大的利益,而獲取信息的重要途徑就是眼睛。據(jù)統(tǒng)計,人類采集信息的80%來自視覺。圖像和視頻是對客觀事物生動、形象的描述,是一種最直觀的表現(xiàn)方式。而視頻監(jiān)控技術(shù)因為它方便快捷、生動形象、信息豐富等特點日益受到人們的青睞,并在各行各業(yè)得到廣泛的應(yīng)用。與此同時,現(xiàn)代網(wǎng)絡(luò)和數(shù)字技術(shù)的快速發(fā)展也為視頻監(jiān)控技術(shù)的發(fā)展奠定了堅實的基礎(chǔ)。
二十一世紀(jì),嵌入式技術(shù)、多媒體處理技術(shù)進(jìn)一步發(fā)展,為視頻監(jiān)控系統(tǒng)的發(fā)展提供了新的出路——嵌入式視頻監(jiān)控系統(tǒng)。嵌入式系統(tǒng)是以應(yīng)用為中心,軟硬件可以剪裁,具有高穩(wěn)定、低成本、功耗低、速度快、實時好的專用計算機系統(tǒng),它由嵌入式微處理器,配以周邊硬件設(shè)備,接口電路組成。嵌入式系統(tǒng)內(nèi)部使用嵌入式操作系統(tǒng),安裝專用的功能軟件。嵌入式技術(shù)把硬件和軟件集于一體,獨立工作。嵌入式視頻監(jiān)控系統(tǒng)比其他視頻采集系統(tǒng)在布局區(qū)域范圍上要廣泛;由于使用IP技術(shù),嵌入式視頻監(jiān)控技術(shù)比其他視頻采集系統(tǒng)更具緊密的結(jié)合度,能夠充分利用現(xiàn)代網(wǎng)絡(luò)技術(shù)的成果,并能構(gòu)成復(fù)雜的視頻監(jiān)控網(wǎng)絡(luò);性能上,嵌入式視頻采集系統(tǒng)繼承了嵌入式技術(shù)的優(yōu)點,非常適合自動化的環(huán)境。
因此,嵌入式視頻采集技術(shù)正在我國快速的發(fā)展,積極的研究會加強我們在這方面技術(shù)的學(xué)習(xí),也會為視頻監(jiān)控技術(shù)的發(fā)展貢獻(xiàn)力量。
1.2本文的內(nèi)容及主要工作
根據(jù)畢業(yè)設(shè)計的初衷,我們需要設(shè)計基于ARM的網(wǎng)絡(luò)視頻采集系統(tǒng)。在監(jiān)控系統(tǒng)中,視頻采集、傳輸、播放的功能不是由專門視頻處理芯片完成,而是由軟件實現(xiàn)。
論文首先介紹了嵌入式ARM系統(tǒng)的硬件結(jié)構(gòu)和軟件結(jié)構(gòu),方便大家熟悉ARM和Linux系統(tǒng),包括嵌入式設(shè)備的硬件結(jié)構(gòu),邏輯框圖和Linux的基本操作、安裝方法;第二,研究了嵌入式的一些驅(qū)動程序,主要是攝像頭驅(qū)動程序
V4L,系統(tǒng)中選用的攝像頭芯片——中星微301;第三,研究了視頻監(jiān)控的具體流程和實現(xiàn)方式,讓大家在總體上對整個系統(tǒng)有一個大概的認(rèn)知。
本次設(shè)計的目的只有一個,就是實現(xiàn)視頻的實時監(jiān)控。圍繞它,不管是硬件結(jié)構(gòu)還是軟件流程,都需要學(xué)習(xí)和研究,不斷調(diào)試,決不放棄。
總之,論文的內(nèi)容都是圍繞如何建立一個視頻采集系統(tǒng)。無論是從哪個方面,我們都是為這個目標(biāo)而努力。2
第2章嵌入式ARM系統(tǒng)硬件結(jié)構(gòu)簡介
2.1視頻監(jiān)控系統(tǒng)結(jié)構(gòu)簡介
網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)是基于嵌入式技術(shù)設(shè)計的。嵌入式并沒有統(tǒng)一的定義,但目前有一個廣泛而又被認(rèn)可的規(guī)范:將軟件產(chǎn)品固化到硬件平臺上,完成應(yīng)有的功能既是嵌入式。
基于嵌入式ARM技術(shù)的視頻監(jiān)控系統(tǒng)服務(wù)器端采用攝像頭不斷的采集圖像,壓縮成視頻流,然后通過網(wǎng)絡(luò)發(fā)送到申請監(jiān)控的客戶端。監(jiān)控系統(tǒng)的使用者可以在遠(yuǎn)程實現(xiàn)網(wǎng)頁上的實時監(jiān)控和一些簡單的功能操作。系統(tǒng)整體結(jié)構(gòu)如圖2.1所示[1]。
LCDJTAG攝像頭ZC301CPU單元Intel Xscale以太網(wǎng)控制器遠(yuǎn)程PC客戶端SDRAMFLASH
圖2.1 系統(tǒng)整體結(jié)構(gòu)圖
該系統(tǒng)中CPU采用基于ARM的PXA270微處理器,通過在其上運行Linux操作系統(tǒng),執(zhí)行Boa視頻服務(wù)器,接受并處理來自攝像頭的圖像信號,通過以太網(wǎng)控制器發(fā)送至遠(yuǎn)端,實現(xiàn)視頻數(shù)據(jù)的遠(yuǎn)程傳輸和接受,達(dá)到視頻監(jiān)控的目的[2]。
2.2ARM處理器簡介
ARM,既是一個公司的名字,也是對一類微處理器的通稱。ARM嵌入式微處理器是全球領(lǐng)先的16/32位RISK處理器芯片知識產(chǎn)權(quán)設(shè)計供應(yīng)商ARM(AdvancedRISKMachines)公司的產(chǎn)品。ARM公司本身不直接從事芯片生產(chǎn),而是依靠轉(zhuǎn)讓設(shè)計許可,由合作公司生產(chǎn)各具特色的芯片。
ARM處理器以其完整的體系結(jié)構(gòu),極小的體積、極低的功耗、極低的成本、極高的性能,及時根據(jù)嵌入對象的不同進(jìn)行功能上的擴展的優(yōu)勢,在眾多種類的嵌入式微處理器中脫穎而出?;贏RM技術(shù)的微處理器應(yīng)用占據(jù)了32位RISC微處理器75%以上的市場份額,ARM技術(shù)正在逐步滲入到我們生活的各個方面。
采用RISC架構(gòu)的ARM微處理器一般具有如下特點:
(1)采用固定長度的指令格式,指令規(guī)整、簡單、基本尋址方式有2~3種;(2)使用單周期指令,便于流水線操作執(zhí)行;
(3)大量使用寄存器,數(shù)據(jù)處理指令只對寄存器進(jìn)行操作,以提高指令的執(zhí)行效率;
(4)所有的指令都可根據(jù)前面的執(zhí)行結(jié)果決定是否被執(zhí)行,從而提高指令的執(zhí)行效率;
(5)可用加載/存儲指令批量傳輸數(shù)據(jù),以提高數(shù)據(jù)的傳輸效率;(6)可在一條數(shù)據(jù)處理指令中同時完成邏輯處理和移位處理;(7)在循環(huán)處理中使用地址的自動增減來提高運行效率。
目前,ARM處理器有ARM7、ARM9、ARM9E、ARM10、ARM10E、SecurCore、StrongARM和XScale等系列。每個系列除了具有ARM體系結(jié)構(gòu)的共同特點以外,都有各自的特點和應(yīng)用領(lǐng)域。
2.3XScale體系結(jié)構(gòu)
Xscale核是采用ARM V5TE架構(gòu)的處理器,是Intel公司的StrongARM的升級換代產(chǎn)品,它具有高性能、低功耗等特點,并在流水線設(shè)計、DSP處理和指令設(shè)計中有很大改進(jìn)[3]。ARM的體系結(jié)構(gòu)是基于RISK的,XScale是ARM處理器的一種,所以XScale具有RISK的基本特性。而且針對嵌入式系統(tǒng),XScale構(gòu)架還引入了Pentium處理器工藝和系統(tǒng)結(jié)構(gòu)技術(shù),實現(xiàn)了Pentium微處理器體系結(jié)構(gòu)的一系列高性能技術(shù),達(dá)到了高性能、低功耗和小體積等嵌入式系統(tǒng)要求的特性。它的特點有:超流水線、高主頻、存儲體系、分支預(yù)測和指令集體系結(jié)構(gòu)。本設(shè)計采用的就是基于英特爾Xscale構(gòu)架的一種32位嵌入式處理器,它除了應(yīng)用于掌上電腦之中外,還可以應(yīng)用于智能手機、網(wǎng)絡(luò)存儲設(shè)備、骨干網(wǎng)路由器等電子設(shè)備。
PXA27x系列處理器是英特爾當(dāng)前最新推出的嵌入式處理器。它的時鐘頻率從312到624MHz不等,并內(nèi)建64MB的堆棧型Intel StrataFlash內(nèi)存。內(nèi)置了英特爾的無線MMX技術(shù),能夠顯著提升多媒體性能。
OURS-PXA270-EP是一款基于INTEL XSCALE PXA270處理器,針對高效
嵌入式系統(tǒng)教學(xué)和實驗科研的平臺。這款設(shè)備主要包括核心板與底版兩個部分,核心板主要集成了高速的PXA270 CPU,配套的存儲器,網(wǎng)卡等設(shè)備;底版主要是各種類型的接口與擴展口。
核心板(8層PCB電路)系統(tǒng)包括:
CPU: INTEL PXA270(520M),支持GDB調(diào)試; SDRAM: 64M 工作在104M外頻上; FLASH: 32M INTEL Nor FLASH;Net: 10/100M Ethernet controller(LAN91C111);SUPERIO: WINBOND 83977;CPLD: XILINX 95144(117USER IO);總線驅(qū)動器: 若干;核心板正面如圖2.2所示,核心板背面如圖2.3所示。
SDRAMCPUdrvdrvCPLDdrvFLASHdrvdrvFLASHLDOdrv 圖2.2 核心板正面圖
SDRAMdrvEthernetdrvdrvdrv100PIN CONNECTORSuperIOLDO 圖2.3 核心板背面圖
底版(4層PCB電路)如圖2.4所示。包括: Ethernet: 10/100接口1個
UART: 6個(包括RS232,RS485,IRDA,全功能串口)USB1.1:2個(1個host 一個device)PS2:2個(KEYBOARD&MOUSE)標(biāo)準(zhǔn)并口:1個 PCMCIA: 1個 IDE:1個 SD/MMC: 1個 SMC:1個 CAMERA:1個 96PIN功能擴展口:2個 4X5 小鍵盤
CPU_JTAG CPLD_JTAG LED SHARP LQ080V3DG01 8寸真彩LCD
640X480 VGA 640X480 LED 8X8點陣
一組7段LED數(shù)碼管
4個
串口irda串口串口串口LCD接口LCD接口并口VGALED點陣音頻1音頻2音頻3PCMCIA 卡LED數(shù)碼管SMC 卡核心板SDPSPSUSBUSB485NET鍵盤 圖2.4 底版圖
2.4主要硬件電路說明
嵌入式設(shè)備除了以ARM芯片為主要控制單元,也有很多周邊電路和外圍設(shè)備,它們有的幫助ARM處理信號、有的負(fù)責(zé)存儲數(shù)據(jù)、有的進(jìn)行網(wǎng)絡(luò)連接、有的用來數(shù)據(jù)通信,這些周邊設(shè)備缺一不可,不能替代。
首先介紹CPU核心總線[4],總線是CPU和其他設(shè)備的橋梁。CPU是通過總線信號來控制SDRAM ,FLASH,網(wǎng)卡,SUPERIO等外部設(shè)備的,無論是低速還是高速,只要是與總線相關(guān)的芯片,都要和CPU總線信號有關(guān)。其次,研究嵌入式系統(tǒng)內(nèi)存——SDRAM。SDRAM是嵌入式系統(tǒng)的內(nèi)存,具有單位空間存儲容量大和價格便宜的優(yōu)點,已廣泛應(yīng)用在各種嵌入式系統(tǒng)中。當(dāng)系統(tǒng)啟動時,CPU首先從復(fù)位地址0x0處讀取啟動代碼,在完成系統(tǒng)的初始化后,程序代碼一般應(yīng)調(diào)入SDRAM中運行,以提高系統(tǒng)的運行速度。同時,系統(tǒng)及用戶堆棧、運行數(shù)據(jù)也都放在SDRAM中。SDRAM的存儲單元可以理解為一個電容,總是傾向于放電,為避免數(shù)據(jù)丟失,必須定時刷新(充電)。因此,要在系統(tǒng)中使用SDRAM,就要求微處理器具有刷新控制邏輯,或在系統(tǒng)中另外加入刷新控制邏輯電路。PXA270芯片在片內(nèi)具有獨立的SDRAM刷新控制邏輯,可方便地與SDRAM接口。除了SDRAM,F(xiàn)LASH也是一種存儲媒介。FLASH一般具有NOR型和NAND型。NAND型FLASH單元密度高,寫入和擦除速度非???,而且一般NAND型FLASH的存儲容量很大。NOR型FLASH的優(yōu)點是芯片內(nèi)執(zhí)行命令,這樣應(yīng)用程序可以直接在FLASH內(nèi)運行,不用進(jìn)入內(nèi)存,使得它的傳輸效率很高。嵌入式設(shè)備最大的優(yōu)點就是網(wǎng)絡(luò)功能強大,它能像PC一樣方便地連接到互聯(lián)網(wǎng)上,這些功能都是網(wǎng)絡(luò)控制器的作用。也就是Ethernet Controller,本系統(tǒng)采用SMSC公司的單芯片的網(wǎng)絡(luò)控制器,LAN91C111。它可以工作在兩種速度下,10M以太網(wǎng)或者100M以太網(wǎng)。LAN91C111的工作流程是,驅(qū)動程序?qū)⒁l(fā)送的數(shù)據(jù)包按指定格式寫入芯片并啟動發(fā)送命令,LAN91C111會自動把數(shù)據(jù)包轉(zhuǎn)換成物理幀格式在物理信道上傳輸;反之芯片收到物理信號后自動將其還原成數(shù)據(jù),并按指定格式存放在芯片RAM中以便主機程序取用。就是LAN91C111完成數(shù)據(jù)包和電信號之間的相互轉(zhuǎn)換。最后,說明一下串口電路,在嵌入式視頻監(jiān)控系統(tǒng)中,串口起到了很重要地作用,嵌入式系統(tǒng)啟動的信息都可以通過串口傳到PC上,極大地方便了系統(tǒng)的移植和軟件的調(diào)試。大多數(shù)情況下,嵌入式CPU的串口0會作為CPU的一個終端,為用戶與CPU交互提供基本的輸出輸入信息。當(dāng)CPU運行BOOT代碼時,通常只有這個終端 ;運行LINUX內(nèi)核時,如果有LCD顯示,串口0與LCD終端會同時有效。串口0終端的交互
方式是命令行的模式,在BOOT階段,支持簡單的BOOT命令。8
第3章嵌入式ARM系統(tǒng)軟件結(jié)構(gòu)
3.1Linux操作系統(tǒng)簡介
Linux是一個類似Unix的操作系統(tǒng),它起源于芬蘭一個名為LinusTorvaldS的業(yè)余愛好者,現(xiàn)已成為最流行的一款開放源代碼的操作系統(tǒng)。Linux從問世至今,短短時間內(nèi)已發(fā)展成為一個功能強大、設(shè)計完善的操作系統(tǒng)。Linux系統(tǒng)不僅能夠運行于PC平臺,還在嵌入式系統(tǒng)方面大放光芒。由于Linux的源碼開放,內(nèi)核精簡且性能強悍,不依賴于具體廠商,能廣泛適用于各種硬件設(shè)備,系統(tǒng)二次開發(fā)成本極低,因此在IT業(yè)界已經(jīng)達(dá)成共識,即采用嵌入式Linux作為嵌入式操作系統(tǒng)是大勢所趨[5]。
嵌入式Linux是目前嵌入式系統(tǒng)領(lǐng)域中發(fā)展勢頭非常迅猛的系統(tǒng)。嵌入式Linux是指對Linux經(jīng)過小型化裁剪后,能夠固化在容量只有幾百K字節(jié)或幾M字節(jié)的存儲器芯片或單片機中,應(yīng)用于特定嵌入式場合的專用操作系統(tǒng)。目前正在開發(fā)的嵌入式系統(tǒng)中,49%的項目選擇嵌入式Linux作為操作系統(tǒng)。嵌入式Linux現(xiàn)已成為嵌入式操作系統(tǒng)的理想選擇[6]。目前基于嵌入式Linux的應(yīng)用已經(jīng)遍布很多領(lǐng)域,比如移動多媒體設(shè)備、手持設(shè)備、車載導(dǎo)航系統(tǒng)、機械控制等。嵌入式Linux分為兩種類型:在沒有使用MMU的平臺上(無內(nèi)存虛實地址轉(zhuǎn)換和映射)的一般為uCLinux;而在有MMU平臺上,則使用原本地嵌入式Linux版本。由于在目前的主流嵌入式ARM中大多不具有MMU,因此只用IM左右的內(nèi)核就能實現(xiàn)網(wǎng)絡(luò)功能和任務(wù)調(diào)度的Linux系統(tǒng)就可以適用于從高端服務(wù)器到嵌入式應(yīng)用的各級平臺。ARM技術(shù)和Linux成功地結(jié)合,應(yīng)用于數(shù)以千計的商業(yè)產(chǎn)品中。從便攜式消費品、網(wǎng)絡(luò)和無線設(shè)備,到自動化設(shè)備、醫(yī)療設(shè)備和存儲產(chǎn)品,這一應(yīng)用列表與日俱增。ARM和Linux的結(jié)合充分滿足了各類應(yīng)用對嵌入式平臺高性能、低功耗和低價格的要求,通過開發(fā)環(huán)境、開源社區(qū)和ARM的商業(yè)伙伴的優(yōu)勢為嵌入式開發(fā)提供了更靈活的選擇。
本次設(shè)計的開發(fā)環(huán)境為redhat9.0系統(tǒng),在Windows XP 下安裝虛擬機,在虛擬機中安裝Linux系統(tǒng),這樣可以屏蔽底層差別,避免硬件驅(qū)動帶來的麻煩,而且還能方便的使用串口、并口、USB接口,快速的進(jìn)入實驗環(huán)境。圖3.1為虛擬機下Linux系統(tǒng)啟動后的情況。
圖3.1 虛擬機下Linux操作系統(tǒng)
3.2交叉編譯環(huán)境的建立
通常嵌入式系統(tǒng)的軟件編譯和執(zhí)行是在兩個不同平臺上進(jìn)行的。編譯是在宿主機,一般為裝有Linux的pc;執(zhí)行是在目標(biāo)機,即嵌入式系統(tǒng)的硬件平臺。一般是在宿主機上通過跨平臺交叉編譯器把源文件編譯成目標(biāo)平臺上可執(zhí)行的文件,再通過串口、并口或者網(wǎng)絡(luò)下載至目標(biāo)平臺上的FLASH或者其它存儲介質(zhì),然后由目標(biāo)機來運行這些軟件。這里所說的跨平臺編譯器和一般的編譯器功能類似,都是把源代碼通過編譯器編譯成目標(biāo)文件,然后通過鏈接器、可重定位器程序和定位器把目標(biāo)文件重新定位成可執(zhí)行文件。和通用的編譯器之間最大的差別就在于跨平臺編譯器編譯出來的可執(zhí)行程序通常只能在特定CPU所屬平臺上運行。所以一般來說每種CPU都對應(yīng)有不同的跨平臺編譯器。
本系統(tǒng)采用基于XScale的PXA270,可以使用常用的ARM-LINUX-GCC交叉編譯器。要成功構(gòu)建完整的交叉編譯環(huán)境需要在宿主機上創(chuàng)建一系列的工具包括C/C++編譯器、匯編器、鏈接器、嵌入式系統(tǒng)的標(biāo)準(zhǔn)C庫和GDB代碼級調(diào)試器。成功建立好開發(fā)環(huán)境后便可以運用這些工具進(jìn)行嵌入式系統(tǒng)開發(fā)[7]。
3.3嵌入式Linux操作系統(tǒng)移植 3.3.1BootLorder移植
BootLoader是系統(tǒng)加電后運行的第一段代碼。一般只是在啟動時運行很短的時間,然而對一個嵌入式系統(tǒng)來說,這一部分卻是整個系統(tǒng)的一個無比重要的組成部分,不可缺少。在一般嵌入式系統(tǒng)中,系統(tǒng)復(fù)位或者加電后通常從地址0x00000000處開始執(zhí)行,而這個地址一般正是存放的BootLoader啟動代碼。通過這段程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終加載操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
BootLoader一般情況下需要包含以下幾個必備的功能 :(l)初始化處理器。這個動作都是用匯編語言完成的,稱為重置碼(resetcode)或者稱為bootcode,而且對于每個CPU都不一樣的,當(dāng)電源接通后就會執(zhí)行這個動作,通常只有兩三個匯編指令,目的是將CPU的控制權(quán)轉(zhuǎn)給硬件初始化的程序。
(2)初始化一些必要的硬件。這個動作也大都由匯編語言來完成,主要是初始化CPU、SDRAM等,其他的硬件,例如串口,可以由c語言等比較高級的程序語言來完成后續(xù)動作。
(3)設(shè)置處理器的寄存器以及內(nèi)存,關(guān)掉所有的輸入管腳(包括中斷管腳),以防止突然有信號進(jìn)入妨礙接下來的硬件初始化動作。然后初始化串口,以便后續(xù)運行的程序能夠同HOST端進(jìn)行通信,便于調(diào)試。
(4)從特定的位置把操作系統(tǒng)和文件系統(tǒng)調(diào)入內(nèi)存,并設(shè)置一些操作系統(tǒng)所必需的參數(shù),然后把CPU控制權(quán)交給操作系統(tǒng)。有的BootLoader會先從串口或者網(wǎng)絡(luò)等其他途徑得到內(nèi)核的映像文件,然后把這些文件寫入目標(biāo)系統(tǒng)的FLASH或者其它存儲介質(zhì),最后再把內(nèi)核載入RAM執(zhí)行,交出控制權(quán)。
一般BootLoader都包含兩種不同的操作模式:“啟動加載”模式和“下載”模式,這種區(qū)別僅對于開發(fā)人員才有意義。從最終用戶的角度看,BootLoader的作用就是用來加載操作系統(tǒng),而并不存在所謂的啟動加載模式與下載模式的區(qū)別。
(l)啟動加載(Bootloading)模式:這種模式也稱為“自主”(Autonomous)模式,即BootLoader從目標(biāo)機上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到RAM中運行,整個過程并沒有用戶的介入。這種模式是BootLoader的正常工作模式,因此在嵌入式產(chǎn)品發(fā)布的時候,BootLoader顯然必須工作在這種模式下。
(2)下載(Downloading)模式:在這種模式下,目標(biāo)機上的BootLoader將通過串
口連接或者網(wǎng)絡(luò)連接等通信手段從主機(HOST)下載文件,比如下載內(nèi)核映像和根文件系統(tǒng)映像等。從主機下載的文件通常首先被BootL0ader保存到目標(biāo)機的RAM中,然后再被BootLoader寫到目標(biāo)機上的FLASH類固態(tài)存儲設(shè)備中。BootLoader的這種模式通常在第一次安裝內(nèi)核與根文件系統(tǒng)時被使用,此外,以后的系統(tǒng)更新也會使用BootLoader的這種工作模式。工作于這種模式下的BootLoader通常都會向它的終端用戶提供一個簡單的命令行接口。
BootLoader的實現(xiàn)依賴于CPU的體系結(jié)構(gòu),一般來說啟動過程分為兩個階段。
第一階段依賴于CPU體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在第一階段中,而且通常都用匯編語言來實現(xiàn),運行效率比較高。這個階段完成的任務(wù)一般如下:(l)硬件設(shè)備初始化(屏蔽所有的中斷、關(guān)閉處理器內(nèi)部的指令/數(shù)據(jù)cache);(2)為第二階段準(zhǔn)備RA.M空間;(3)復(fù)制BootLoader的第二階段代碼到RAM空間中;(4)設(shè)置好堆棧并跳轉(zhuǎn)到第二階段的C程序入口點。
第二階段則通常用C語言來實現(xiàn),這樣可以實現(xiàn)復(fù)雜的功能,而且代碼會具有更好的可讀性和可移植性。這個階段主要任務(wù)有:(l)初始化本階段要使用的硬件設(shè)備;(2)檢測系統(tǒng)內(nèi)存映射;(3)將內(nèi)核映像和根文件系統(tǒng)從FLASH讀到RAM中;(4)為內(nèi)核設(shè)置啟動參數(shù);(5)調(diào)用內(nèi)核文件運行。
本設(shè)計中的Bootloader采用Blob,Blob是Boot Loader Object的縮寫,是一款功能強大的Bootloader。Blob最初是由Jan-Derk Bakker和Erik Mouw兩人為一塊名為LART(Linux Advanced Radio Terminal)的開發(fā)板寫的,該板使用的處理器是StrongARM SA-1100,現(xiàn)在Blob已經(jīng)被成功移植到許多基于ARM的CPU上了。本設(shè)計中的Intel Xcale就是采用Blob作為Bootloader[8]。
3.3.2Linux 內(nèi)核移植
選用嵌入式Linux作為目標(biāo)機操作系統(tǒng),一方面由于Linux是一款免費的操作系統(tǒng),能很好的降低成本,同時Linux的開發(fā)應(yīng)用現(xiàn)在已經(jīng)成為熱門,有大量的資源可用于學(xué)習(xí)與重復(fù)應(yīng)用,并且Linux系統(tǒng)具有良好的可移植性和可裁剪性,能自動支持多任務(wù)管理。一般常用的GUI如QT/E,MiniGUI等都支持Linux。
Linux的開發(fā)工具也都可以很方便的免費獲得。
系統(tǒng)采用的嵌入式Linux內(nèi)核為隨實驗平臺光盤中的Linux內(nèi)核,它是針對這套實驗平臺所配置的Linux內(nèi)核,內(nèi)核版本為Linux2.4.20[9]。在實驗過程中,只需要在這個內(nèi)核的基礎(chǔ)上進(jìn)行添加和刪減所需要和不需要的功能,編譯后就可以使用了。
在編譯內(nèi)核之前,需要對內(nèi)核進(jìn)行必要的配置,通過虛擬機進(jìn)入/pxa270_linux/linux/目錄后在終端執(zhí)行make menuconfig[10]命令,就可以可視化的配置內(nèi)核需要的功能和要求,本次試驗,主要是針對視頻方面,選擇了對V4L的靜態(tài)加載、對spca5xx攝像頭驅(qū)動的動態(tài)加載,這樣就結(jié)束了對內(nèi)核的配置。編譯內(nèi)核需要創(chuàng)建內(nèi)核依賴關(guān)系、創(chuàng)建內(nèi)核鏡像文件和創(chuàng)建內(nèi)核模塊。首先執(zhí)行makedep命令,讀取配置過程生成的配置文件,來創(chuàng)建對應(yīng)于配置的依賴關(guān)系樹,從而決定哪些需要編譯而哪些不需要;接著需要makeclean刪除前面步驟留下的文件,以避免出現(xiàn)一些錯誤;然后便可以生成所需要的內(nèi)核文件了,用make zlmage來實現(xiàn)得到可移植的內(nèi)核。內(nèi)核文件通過并口下載線燒寫入開發(fā)板中,便可以通過BootLoader加載運行。
3.3.3嵌入式文件系統(tǒng)
嵌入式Linux操作系統(tǒng)一般采用FLASH作為存儲介質(zhì)。FLASH具有獨特的物理特性,所以必須使用專門的嵌入式文件系統(tǒng)。嵌入式系統(tǒng)對文件的操作是通過層次結(jié)構(gòu)實現(xiàn)的。對于用戶程序來說,文件是有結(jié)構(gòu)的文件,用戶程序通過對文件IO函數(shù)操作文件。嵌入式文件系統(tǒng)是嵌入式操作系統(tǒng)的一部分,它的任務(wù)是對邏輯文件進(jìn)行管理,其工作包括提供對邏輯文件的操作(復(fù)制、刪除、修改等)接口,方便用戶操作文件和目錄。在文件系統(tǒng)內(nèi)部,根據(jù)存儲設(shè)備的特點,使用不同的文件組織模式來實現(xiàn)文件的邏輯結(jié)構(gòu)。此外,文件系統(tǒng)要對管理文件的安全性負(fù)責(zé)。文件系統(tǒng)不能直接控制物理設(shè)備,它是通過FLASH驅(qū)動實現(xiàn)控制的[11]。
目前FLASH支持的文件系統(tǒng)技術(shù)主要有JFFS2,YAFFS2,TrueFFS,F(xiàn)TL/NTFL,RAMFS,CRAMFS和ROMFS等等。本系統(tǒng)采用的是JFFS2文件系統(tǒng)。
JFFS2文件系統(tǒng)是專門為NAND閃存設(shè)計的嵌入式文件系統(tǒng),根據(jù)NAND閃存以頁面為單位存取的特點,將文件組織成固定大小的數(shù)據(jù)段。利用NAND閃存提供的每個頁面16B的備用空間來存放ECC(ErrorCorrectionCode)和文件系統(tǒng)的組織信息、,不僅能夠?qū)崿F(xiàn)錯誤檢測和壞塊處理,也能夠提高文件系統(tǒng)的加
載速度。JFFS2采用一種多策略混合的垃圾回收算法,結(jié)合了貪心策略的高效性和隨機選擇的平均性,達(dá)到了兼顧損耗平均和系統(tǒng)開銷的目的。它是日志結(jié)構(gòu)的文件系統(tǒng),提供了損耗平衡和掉電保護(hù),可以有效地避免意外掉電對文件系統(tǒng)一致性和完整性的影響。JFFS2文件系統(tǒng)是按層次結(jié)構(gòu)設(shè)計的,分為文件系統(tǒng)管理層接口、JFFS2內(nèi)部實現(xiàn)層和NAND接口層,這樣就簡化了其與系統(tǒng)的接口設(shè)計,可以方便地集成到系統(tǒng)中去。與YAFFS相比,它增加了一些功能,因此功能更強。
3.4Linux下的程序調(diào)試
調(diào)試是程序開發(fā)過程中必不可少的一個重要環(huán)節(jié),通用PC機的程序調(diào)試與嵌入式操作系統(tǒng)的調(diào)試環(huán)境上有著明顯的區(qū)別,前者調(diào)試器和被調(diào)試的程序往往是運行在同一臺機器上,是相同操作系統(tǒng)下的兩個不同的進(jìn)程,調(diào)試器通過操作系統(tǒng)專用調(diào)用接口控制被調(diào)試進(jìn)程,后者通常為遠(yuǎn)程調(diào)試,調(diào)試器一般運行于桌面操作系統(tǒng)上,而被調(diào)試的程序則運行在嵌入式系統(tǒng)之上,因此需要協(xié)調(diào)這兩個程序之間的通信。Linux下的調(diào)試工具非常的少,gdb是Linux下最著名的調(diào)試工具,它是GNUC自帶的調(diào)試工具,它可以使開發(fā)人員了解程序運行的詳細(xì)細(xì)節(jié),從而消除程序的錯誤,達(dá)到調(diào)試的目的,gdb還具有遠(yuǎn)程調(diào)試功能,可以滿足嵌入式系統(tǒng)調(diào)試的要求,在調(diào)試過程中PC機也稱為宿主機和嵌入式系統(tǒng)通過串口協(xié)議或者TCP/IP協(xié)議連接起來,遠(yuǎn)程主機上運行被gdb規(guī)范斷點改造過的內(nèi)核,當(dāng)條件成立時,斷點被激活,然后等待本地宿主機的連接命令,一旦連接成功,宿主機就可以向遠(yuǎn)程嵌入式系統(tǒng)發(fā)送調(diào)試命令了。在調(diào)試過程中g(shù)db通過調(diào)試stub來完成通信功能,調(diào)試stub是嵌入式操作系統(tǒng)中的一小段代碼,它提供了運行g(shù)db的宿主機和嵌入式系統(tǒng)進(jìn)程之間交互的一個媒介。
除了使用調(diào)試器外還可以直接在程序中使用printf()或printk打印函數(shù),這種方法功能比較弱,效率低下,但在內(nèi)核模塊調(diào)試時這是唯一的方法。14
第4章USB設(shè)備驅(qū)動程序設(shè)計
4.1設(shè)備驅(qū)動程序簡介
Linux系統(tǒng)中,設(shè)備驅(qū)動程序扮演著特殊的角色。它就像一個獨立的黑盒子一樣,使某個特定的硬件可以相應(yīng)一個定義良好的內(nèi)部編程接口并且完成隱藏設(shè)備的作用。用戶只需調(diào)用一組標(biāo)準(zhǔn)化的函數(shù)完成操作,而且這些操作與特定的驅(qū)動程序無關(guān)。驅(qū)動程序的任務(wù)就是將這些函數(shù)映射到作用硬件的具體操作上。這樣的模塊化的驅(qū)動程序結(jié)構(gòu)使得Linux系統(tǒng)中的驅(qū)動程序可以獨立于內(nèi)核的其他部分,可以在需要使用的時候?qū)Ⅱ?qū)動“插入”內(nèi)核。
從系統(tǒng)運行順序來看,硬件平臺啟動運行Linux后,啟用了MMU單元即內(nèi)存管理單元,在這種模式下系統(tǒng)不能直接對物理地址進(jìn)行訪問。若要對某一硬件外設(shè)進(jìn)行讀寫,需要通過內(nèi)核調(diào)用該硬件的驅(qū)動來實現(xiàn)。
上面已經(jīng)說過,驅(qū)動程序的作用在于向應(yīng)用程序提供訪問硬件設(shè)備的接口,驅(qū)動程序屏蔽了硬件實現(xiàn)上的細(xì)節(jié)操作,于是應(yīng)用程序可以像操作普通文件一樣對硬件設(shè)備進(jìn)行操作。Linux以模塊的形式加載設(shè)備類型,通常是一個模塊對應(yīng)實現(xiàn)一個設(shè)備驅(qū)動。模塊是內(nèi)核的一部分,它們沒有被編譯到內(nèi)核中,而是分別被編譯并鏈接成一組目標(biāo)文件。可以根據(jù)用戶的需要在不需要對內(nèi)核進(jìn)行重新編譯的情況下動態(tài)載入正在運行的內(nèi)核,或從正在運行的內(nèi)核中卸載。利用這種機制,內(nèi)核尺寸可以保持在最小,并具有最大的靈活性,也便于檢驗新的內(nèi)核代碼,而不需要重新編譯內(nèi)核并重新引導(dǎo)。設(shè)備驅(qū)動程序一般需要完成以下功能:(l)對設(shè)備初始化和釋放;(2)把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);(3)讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序的請求數(shù)據(jù);(4)檢測和處理設(shè)備出現(xiàn)的錯誤。
在Linux操作系統(tǒng)下有兩類主要設(shè)備文件類型:塊設(shè)備、字符設(shè)備。用戶進(jìn)程正是通過設(shè)備文件來與硬件打交道。每個設(shè)備文件都有其文件屬性,表示是字符設(shè)備還是塊設(shè)備。另外每個文件都有2個設(shè)備號,第一個是主設(shè)備號,標(biāo)識驅(qū)動程序;第二個是從設(shè)備號,標(biāo)識使用同一個設(shè)備驅(qū)動程序的不同硬件設(shè)備。設(shè)備文件的主設(shè)備號必須與設(shè)備驅(qū)動程序在登記時申請的設(shè)備號一致,否則用戶進(jìn)程將無法訪問驅(qū)動程序。
Linux驅(qū)動程序可以分為三個主要部分: 15
(l)自動配置和初始化子程序,負(fù)責(zé)檢測所要驅(qū)動的硬件設(shè)備是否存在和能否正常工作。如果該設(shè)備正常,則對這個設(shè)備及其他必需的條件位口中斷、DMA通道)進(jìn)行申一請并初始化。這部分驅(qū)動程序僅在初始化時被調(diào)用一次。
(2)服務(wù)于I/O請求的子程序,又稱為驅(qū)動程序的上半部分。調(diào)用這部分程序是由于系統(tǒng)調(diào)用的結(jié)果。這部分程序在執(zhí)行時,系統(tǒng)仍認(rèn)為是與進(jìn)行調(diào)用的進(jìn)程屬于同一個進(jìn)程,只是由用戶態(tài)變成了核心態(tài),但仍具有進(jìn)行此系統(tǒng)調(diào)用的用戶程序的運行環(huán)境,因而可以在其中調(diào)用與進(jìn)程運行環(huán)境相關(guān)的函數(shù)。
(3)中斷服務(wù)子程序,又稱為驅(qū)動程序的下半部分。在Linux操作系統(tǒng)中,并不是直接從中斷向量表中調(diào)用設(shè)備驅(qū)動程序的中斷服務(wù)子程序,而是由Linux系統(tǒng)來接收硬件中斷,再由系統(tǒng)調(diào)用中斷服務(wù)子程序。中斷可以在任何一個進(jìn)程運行時產(chǎn)生,因而在中斷服務(wù)子程序被調(diào)用時,不能依賴于任何進(jìn)程的狀態(tài),也就不能調(diào)用任何與進(jìn)程運行環(huán)境有關(guān)的函數(shù)。因為設(shè)備驅(qū)動程序一般支持同一類型的若干設(shè)備,所以一般在系統(tǒng)調(diào)用中斷服務(wù)子程序時,都帶有一個或多個參數(shù),以唯一標(biāo)識請求服務(wù)的設(shè)備。
在系統(tǒng)內(nèi)部,I/O設(shè)備的存取通過設(shè)備驅(qū)動程序提供的一組固定的入口點來進(jìn)行,這組入口點在驅(qū)動程序初始化時向系統(tǒng)進(jìn)行登記,以便在系統(tǒng)適當(dāng)?shù)臅r候調(diào)用。一般來說,字符型設(shè)備驅(qū)動程序能夠提供如下幾個入口點:(1)open入口點:打開設(shè)備準(zhǔn)備I/O操作,對字符特別設(shè)備進(jìn)行打開操作,都會調(diào)用設(shè)備的open入口點。open子程序必須對將要進(jìn)行的I/O操作做好必要的準(zhǔn)備工作,如清除緩沖區(qū)等。如果設(shè)備是獨占的,即同一時刻只能有一個程序訪問此設(shè)備,則open子程序必須設(shè)置一些標(biāo)志以表示設(shè)備的狀態(tài)。
(2)close入口點:關(guān)閉一個設(shè)備,當(dāng)最后一次使用設(shè)備結(jié)束后,調(diào)用dose子程序。獨占設(shè)備必須標(biāo)記設(shè)備可再次使用。
(3)read入口點:讀取設(shè)備,對于有緩沖區(qū)的I/0操作,一般從緩沖區(qū)里讀取設(shè)備數(shù)據(jù)。
(4)write入口點:向設(shè)備寫數(shù)據(jù),對于有緩沖區(qū)的I/O操作,一般向緩沖區(qū)里寫入數(shù)據(jù)。
(5)ioctl入口點:執(zhí)行讀寫之外的操作。
USB(Universal Serial Bus)即“通用串行外部總線”,用途廣泛,可以外接硬盤、鍵盤、鼠標(biāo)、打印機等多種設(shè)備,USB能夠使用盡可能少的接口支持盡可能多的外設(shè),尤為適合在嵌入式設(shè)備中使用,是嵌入式接口標(biāo)準(zhǔn)的一個很好的選擇。
USB總線規(guī)范有1.1版和2.0版。USB1.1支持兩種傳輸速率:低速1.5Mbit/s、全速12Mbit/s,這樣的速率完全滿足鼠標(biāo)、鍵盤、CD-ROM等設(shè)備,但是在嵌入式視頻監(jiān)控系統(tǒng)中,這樣的速度還是很慢。所以,USB2.0提供了一種更好的傳輸速率:高速,它可以達(dá)到480Mbit/s。USB2.0向下兼容USB1.1,可以將遵循USB1.1規(guī)范的設(shè)備連接到USB2.0控制器上,也可以把USB2.0的設(shè)備鏈接到USB1.1控制器上。
USB總線的硬件拓?fù)浣Y(jié)構(gòu)[12]如圖4.1所示。
USB主機控制器USB設(shè)備根集線器USB設(shè)備USB設(shè)備集線器USB設(shè)備集線器USB設(shè)備集線器USB設(shè)備USB設(shè)備USB設(shè)備USB設(shè)備 圖4.1 USB總線硬件拓?fù)鋱D
USB主機控制器通過根集線器與其他USB設(shè)備相連。集線器也屬于USB設(shè)備,通過它可以在一個USB接口上擴展出多個接口。除根集線器外,最多可以層疊5個集線器,每條USB電纜的最大長度是5m,所以USB總線的最大距離為30m。一條USB總線上可以外接127個設(shè)備,包括根集線器和其他集線器。整個結(jié)構(gòu)圖是一個星狀結(jié)構(gòu),一條USB總線上所有設(shè)備共享一條通往主機的數(shù)據(jù)通道,同一時刻只能有一個設(shè)備與主機通信。
通過USB主機控制器來管理外接的USB設(shè)備,USB主機控制器共分3種:UHCI、OHCI和EHCI。在配置Linux內(nèi)核的時候,看到的“HCD”字樣表示“Host Controller Drivers”,即主機控制器驅(qū)動程序。
USB驅(qū)動程序分為兩類:USB主機控制器驅(qū)動程序(Host Controller Drivers)、USB設(shè)備驅(qū)動程序(USB device drivers)。它們在內(nèi)核中的層次如圖4.2所示。
UserUSB Device DriversUSB Host Controller DriversHardware 圖4.2 USB驅(qū)動程序?qū)哟谓Y(jié)構(gòu)
在試驗中,教學(xué)平臺上的Linux嵌入式內(nèi)核已經(jīng)配置了USB主機控制器驅(qū)動程序,只需要添加需要的USB設(shè)備驅(qū)動程序,就能實現(xiàn)USB設(shè)備的正常使用。
4.2Linux下驅(qū)動程序的實現(xiàn)
Linux操作系統(tǒng)下對硬件設(shè)備進(jìn)行驅(qū)動開發(fā)的一般步驟如下:(l)注冊設(shè)備
在系統(tǒng)啟動時或者在模塊加載的時候需要將設(shè)備和重要的數(shù)據(jù)結(jié)構(gòu)登記到內(nèi)核的設(shè)備數(shù)組中,并確定該設(shè)備的主次設(shè)備號。在Linux系統(tǒng)中,對于字符設(shè)備一般通過調(diào)用register_chrdev向系統(tǒng)注冊設(shè)備驅(qū)動程序,register_chrdev在fs/deviees.c文件中的定義如下:int register_chrdev(unsigned int major,const char*name,struct file_operations fops)定義中的major是設(shè)備驅(qū)動程序向系統(tǒng)申請的主設(shè)備號,如果major為O,則系統(tǒng)為該驅(qū)動程序動態(tài)的分配一個主設(shè)備號,不過此設(shè)備號是臨時的;name是設(shè)備名:fops是各個調(diào)用入口點的說明。函數(shù)返回O表示注冊成功,返回-INVAL表示申請的主設(shè)備號非法,返回-EBUSY表示申請的主設(shè)備號正在被其它設(shè)備驅(qū)動程序使用。
以后對設(shè)備驅(qū)動程序的file_operations的操作都可以通過該主設(shè)備號的索引來完成。register_chrdev函數(shù)操作成功后,設(shè)備名便出現(xiàn)在/proc/devices文件目錄中,使用命令cat/proc/devices可以查看設(shè)備的工作狀態(tài)。
(2)定義操作集
驅(qū)動程序中要通過一系列函數(shù)完成對設(shè)備的不同操作,這些操作在面向?qū)ο缶幊绦g(shù)語中也稱為方法,該操作集通過數(shù)據(jù)結(jié)構(gòu)file_operations實現(xiàn)。內(nèi)核內(nèi)部通過file結(jié)構(gòu)識別設(shè)備,通過file_operations數(shù)據(jù)結(jié)構(gòu)提供的文件系統(tǒng)的入口點函數(shù)訪問設(shè)備。
file_operations定義在
int(*release)(struct inode*, struct file*);int(*fsync)(struct file*, struct dentry*, int datasync);int(*fsyne)(int, struct file*, int);int(*lock)(struct file*,int, struct file_lock*);ssize_t(*readv)(struct file*, const struct iovec*, unsigned long, loff_t*);ssize_t(*writev)(struct file*, const struct iovec*, unsigned long, loff_t*);ssize_t(*sendpage)(struct file*, struct page*, int, size_t, loff_t*, int);unsigned long(*get_unmapped_area)(struct file*, unsigned long, unsigned long,unsigned long, unsigned long);}
這個結(jié)構(gòu)的每一個成員的名字對應(yīng)一個系統(tǒng)調(diào)用,在用戶程序利用系統(tǒng)調(diào)用對設(shè)備文件進(jìn)行諸如讀/寫操作時,系統(tǒng)調(diào)用會通過設(shè)備文件的主設(shè)備號找到相應(yīng)的驅(qū)動程序,然后讀取這個數(shù)據(jù)結(jié)構(gòu)的相應(yīng)函數(shù)指針,把控制權(quán)交給該函數(shù)。對于具體的設(shè)備驅(qū)動并不需要實現(xiàn)結(jié)構(gòu)中所有的例程,只要完成設(shè)備功能就可以了。例如對于一個常見的字符設(shè)備驅(qū)動來說,可能只有操作open(),write(),read(),ioctl()和close(),當(dāng)用戶程序通過系統(tǒng)調(diào)用訪問設(shè)備時,最終要通過這些操作集來完成。
(3)卸載模塊
當(dāng)不再需要使用一個模塊或設(shè)備時,需要將其從內(nèi)核中卸載下來,這時會動態(tài)調(diào)用模塊中的module_exit()函數(shù),并需要在該函數(shù)中調(diào)用modul_unregister_chrdev()或module_unregister_blkdev()釋放掛入內(nèi)核的數(shù)據(jù)結(jié)構(gòu)同時釋放該設(shè)備號。
4.3USB攝像頭驅(qū)動程序設(shè)計
攝像頭屬于視頻設(shè)備,在Linux內(nèi)核中,VideoforLinux(簡稱V4L)是關(guān)于視頻設(shè)備的驅(qū)動標(biāo)準(zhǔn)。這個標(biāo)準(zhǔn)為應(yīng)用程序定義了一系列的接口函數(shù),內(nèi)核、驅(qū)動和應(yīng)用程序都是依靠這個標(biāo)準(zhǔn)來進(jìn)行交流。本系統(tǒng)所使用的USB攝像頭正是基于該標(biāo)準(zhǔn)來編寫驅(qū)動和應(yīng)用程序的。
Linux內(nèi)核是依據(jù)設(shè)備號來操作設(shè)備文件的,在內(nèi)核中,攝像頭對應(yīng)的設(shè)備文件名為/dev/video0,主設(shè)備號是81,次設(shè)備號根據(jù)攝像頭數(shù)目來確定,本系統(tǒng)中僅使用一個攝像頭,所以可以通過mknod/dev/video0 c 81 0來創(chuàng)建節(jié)點。USB攝像頭驅(qū)動程序?qū)崿F(xiàn)原理如圖4.3所示。
USB攝像頭的驅(qū)動和通用設(shè)備的驅(qū)動準(zhǔn)則一樣,但需要與內(nèi)核提供的視頻驅(qū)動掛鉤。即首先在驅(qū)動中聲明一個 video_device結(jié)構(gòu),并為其指定文件操作函數(shù)指針數(shù)組fops,向系統(tǒng)注冊。在應(yīng)用程序發(fā)出文件操作的相關(guān)命令時,核心根據(jù)這些指針調(diào)用相應(yīng)函數(shù),并將該結(jié)構(gòu)作為參數(shù)傳遞給它們。這樣,就完成了驅(qū)動和核心之間的通信。
例如: Static struct video_devie vdev_template={……};
聲明 video_deviee,指出掛接驅(qū)動
用戶進(jìn)程系統(tǒng)調(diào)用攝像頭驅(qū)動文件操作接口接收緩沖區(qū)發(fā)送緩沖區(qū)中斷服務(wù)程序攝像頭 圖4.3 攝像頭驅(qū)動實現(xiàn)框圖
Static Struct file_operation spcasxx_fops= {……};
聲明本驅(qū)動的文件操作函數(shù)指針 Struct video_device*vdev=video_devdata(file);從文件指針中提取出 video_deviee結(jié)構(gòu)
在video_deviee結(jié)構(gòu)中,有一個私有指針priv,可以將它指向一塊保留內(nèi)存。在這塊內(nèi)存中,保存著本驅(qū)動、本設(shè)備的相關(guān)初始化信息。這塊內(nèi)存的申請、初始化、指針指向等工作都是在USB驅(qū)動的枚舉函數(shù)probe中完成。這樣,在枚舉函數(shù)將控制權(quán)返還給系統(tǒng)后,因為內(nèi)核不銷毀保留內(nèi)存,所以驅(qū)動仍然保留著自己的信息。在驅(qū)動卸載函數(shù)中需要將申請的各塊內(nèi)存全部釋放。
Linux系統(tǒng)中任何USB傳輸都通過URB實現(xiàn)。為提高速度,可以考慮擴大URB的緩沖,這樣可以降低每個USB事務(wù)中握手信息所占比例,提高有效數(shù)據(jù)的輸速度。但是受限于總線帶寬和具體的USB設(shè)備芯片,單純擴大URB的緩沖不能無限制地解決問題。USB在操作系統(tǒng)中每次傳輸都要包括URB的建立、發(fā)出、回收、數(shù)據(jù)整理等階段,這些時間不產(chǎn)生有效數(shù)據(jù)。因此可以建立兩個URB,在等待一個URB被回收時,也就是圖像正在被傳感器采集時,處理、初始化另一個URB,并在回收后立刻將其發(fā)出。兩個URB交替使用,大大減少了額外時間。
由于嵌入式平臺上運行的Linux2.4.20內(nèi)核,內(nèi)部已經(jīng)集成了對USB2.0的支持,所以無需移植相應(yīng)的USB驅(qū)動。
在設(shè)計中,攝像頭芯片采用中星微的Z301系列芯片,Linux2.4內(nèi)核并不支持這種芯片,所以我們通過移植芯片驅(qū)動程序來達(dá)到目的。芯片的驅(qū)動程序是spca5**系列,如果不重新編譯內(nèi)核的話,將驅(qū)動程序動態(tài)加載就可以正常使用。設(shè)計中動態(tài)加載的命令使用insmod命令,它和modprobe命令在使用上有所不同,modprobe在加載模塊時不用指定模塊文件的絕對路徑,也不用帶模塊文件的后綴.o或.ko;而insmod需要的是模塊的所在目錄的絕對路徑,并且一定要帶有模塊文件名后綴的.o或者.ko。但是在功能上,它們所達(dá)到的效果基本相同[13]。22
第5章視頻采集功能的設(shè)計
視頻采集程序是基于V4L開發(fā)的,包括攝像頭的初始化、打開/關(guān)閉、參數(shù)設(shè)置和數(shù)據(jù)讀取等操作,視頻采集程序流程圖如圖5.1所示[14]。
開始初始化攝像頭init_videoIn()打開攝像頭open_v4l()獲取攝像頭參數(shù)icotl(int->vd,int cmd,..)設(shè)置攝像頭參數(shù)ioctl()獲取一幀圖像N一幀是否截取完畢Y存儲并準(zhǔn)備傳輸N是否終止視頻采集Y關(guān)閉攝像頭終止 圖5.1 視頻采集程序流程圖
5.1基于V4L的編程 5.1.1攝像頭相關(guān)數(shù)據(jù)結(jié)構(gòu)
攝像頭的組成部分是傳感器、DSP、鏡頭、外殼、USB連線、電路板和周邊電路構(gòu)成,其中最重要的是傳感器和DSP(數(shù)字信號處理器)。本系統(tǒng)選用的攝像頭采用了CMOS傳感器和中星微301處理器。
V4L[15]提供了一系列的接口應(yīng)用程序,可以利用這些程序?qū)崿F(xiàn)對攝像頭的調(diào)用,其中有read、open、ioctl等。V4l同時將這些函數(shù)和參數(shù)封裝成一個數(shù)據(jù)結(jié)構(gòu)vdIn。struct vdIn {
int fd;char *videodevice;struct video_mmap vmmap;struct video_capability videocap;int mmapsize;struct video_mbuf videombuf;struct video_picture videopict;struct video_window videowin;struct video_channel videochan;struct video_param videoparam;
int cameratype;char *cameraname;char bridge[9];int sizenative;int sizeothers;int palette;int norme;int channel;int grabMethod;unsigned char *pFramebuffer;unsigned char *ptframe [4];
};int framelock [4];pthread_mutex_t grabmutex;int framesizeIn;volatile int frame_cour;int bppIn;int hdrwidth;int hdrheight;int formatIn;int signalquit;
int fd :打開攝像頭時,open函數(shù)返回的文件描述符,其他函數(shù)使用這個描述符對攝像頭進(jìn)行操作。
struct video_mmap vmmap: 用于內(nèi)存映射的結(jié)構(gòu)體。
struct video_capability videocap :描述攝像頭基本信息,如設(shè)備名稱、支持的最大分辨率、信號源信息、信道數(shù)等。
struct video_mbuf videombuf :在進(jìn)行內(nèi)存映射時讀取幀的信息,實際上是輸入到攝像頭存儲緩存中的幀信息。
struct video_picture videopict :攝像頭采集圖像的屬性,如亮度、色調(diào)、對比度、色度、深度等。
struct video_window videowin :表示采集窗口參數(shù),如分辨率等。struct video_channal videochan :關(guān)于信號源的屬性。
5.1.2攝像頭基本功能實現(xiàn)
(1)初始化攝像頭參數(shù)
在對攝像頭進(jìn)行操作之前,要對攝像頭進(jìn)行初始化,即對vdIn這個結(jié)構(gòu)進(jìn)行初始化。使用init_videoIn 函數(shù)。
int init_videoIn(struct vdIn *vd, char *device, int width, int height, int format, int grabmethod){
int err =-1;int i;if(vd == NULL || device == NULL)return-1;
} if(width == 0 || height == 0)return-1;grabmethod = 1;//read by default;if(grab method < 0 || grabmethod > 1)// check format
vd->videodevice = NULL;vd->cameraname = NULL;vd->videodevice = NULL;vd->videodevice =(char *)realloc(vd->videodevice, 16);vd->cameraname =(char *)realloc(vd->cameraname, 32);snprintf(vd->videodevice, 12, “%s”, device);if(debug)printf(“video %s n”,vd->videodevice);memset(vd->cameraname, 0, sizeof(vd->cameraname));memset(vd->bridge, 0, sizeof(vd->bridge));vd->signalquit = 1;vd->hdrwidth = width;vd->hdrheight = height;vd->formatIn = format;
vd->bppIn = GetDepth(vd->formatIn);vd->grabMethod = grabmethod;vd->pFramebuffer = NULL;err = init_v4l(vd);for(i = 0;i < OUTFRMNUMB;i++){
} vd->frame_cour = 0;pthread_mutex_init(&vd->grabmutex, NULL);return err;vd->ptframe[i] = NULL;(unsigned char *)realloc(vd->ptframe[i], sizeof(struct frame_t)+(size_t)vd->framelock[i] = 0;vd->framesizeIn);
(2)打開攝像頭
在Linux中,類似攝像頭的設(shè)備是作為文件來看待的,叫做設(shè)備文件。我們可以使用open函數(shù)來對設(shè)備進(jìn)行打開操作,open帶有兩個參數(shù),第一個為設(shè)備文件名稱,本實驗的攝像頭設(shè)備名稱是/dev/video0,第二個則是打開的類型。
在使用open函數(shù)打開攝像頭之前,要判斷是否有攝像頭設(shè)備,即檢查參數(shù)videodevice是否為空。Open函數(shù)執(zhí)行結(jié)束后會返回攝像頭的文件描述符,如果返回值為-1,則說明打開設(shè)備出錯。
int open_v4l(char *vd->videodevice){
if(!vd->videodevice){
printf(“No device file, ERROR opening V4L interface”);
return-1;}
if((vd->fd=open(vd->videodevice, O_RDWR))==-1){
printf(“ERROR opening V4L interface”);
return-1;} return vd->fd;}(3)獲取攝像頭參數(shù)
成功打開攝像頭后,需要獲取攝像頭的一些參數(shù),利用ioctl函數(shù)控制I/O通道來實現(xiàn)。Ioctl函數(shù)的使用是ioctl(int->fd, int cmd,……),fd代表文件描述符,cmd表示用戶對設(shè)備的控制命令,第三個參數(shù)是一個其他的參數(shù)。其中,cmd包括VIDIOCGCAP(獲得video_capbility中有關(guān)攝像頭的信息)、VIDIOCGPICT(獲取圖像信息)、VIDIOCSPICT(改變圖像信息)、VIDIOCGMBUF(獲取攝像頭存儲緩沖區(qū)幀信息)、VIDIOCAMCAPTURE(獲取視頻圖像)、VIDIOSYNC(判斷攝像頭是否截取成功)等。
讀取video_capability中有關(guān)攝像頭的信息
if(ioctl(vd->fd, VIDIOCGCAP, &(vd->videocap))==-1){ printf(“Fail to get video_capability!/n”);return-1;} 讀取video_picture中的圖像信息 printf(“Fail to get video_picture!/n”);return-1;} if(ioctl(vd->fd, VIDIOCGPICT, &(vd->videopict))==-1){
讀取video_window信息
if(ioctl(vd->fd,VIDIOCGWIN,&(vd->videowin))==-1){
printf(“Fail to get video_window!/n”);
return-1;}(4)設(shè)置攝像頭參數(shù)
在對攝像頭參數(shù)進(jìn)行設(shè)置的時候,應(yīng)該按照以下步驟:比如更改圖像信息,首先,先給video_picture結(jié)構(gòu)中所要修改的變量賦值,如vd->videopict.palette=vd->formaIn;vd->videopict.depth=GetDepth(vd->formatIn);然后通過ioctl函數(shù)的VIDIOCSPICT來設(shè)置,如if(ioctl(vd->fd,VIDIOCSPICT,&(vd->videopict))<0){ printf(Fail to set videopict params with VIDIOCSPICT!/n“);return-1;} 在設(shè)置好了之后可以通過VIDIOCGPICT命令來查詢圖像信息設(shè)置是否成功。(5)關(guān)閉攝像頭
在Linux編程過程中,必須養(yǎng)成一個好的編程習(xí)慣,就是在開啟一個設(shè)備后一定要關(guān)閉它,這樣可以避免很多諸如內(nèi)存泄露等嚴(yán)重的問題。
本系統(tǒng)支持兩種讀取方式來獲得視頻流,它們是內(nèi)存映射和直接讀取,所以首先需要判斷視頻采集的方式,如果是內(nèi)存映射,則在系統(tǒng)任務(wù)完成后關(guān)閉內(nèi)存映射,然后關(guān)閉攝像頭設(shè)備。同樣道理,如果采用的是直接讀取,則在任務(wù)完成后關(guān)閉直接讀取,然后在關(guān)閉攝像頭設(shè)備。在代碼中,采用了一個判斷語句,判斷vd->grabMethod的值來判斷系統(tǒng)采用哪種讀取方式。int close_v4l(struct vdIn *vd){
int i;if(vd->grabMethod){
} else { free(vd->pFramebuffer);vd->pFramebuffer = NULL;if(debug)printf(“unmapping frame buffern”);munmap(vd->pFramebuffer, vd->mmapsize);
} } if(debug)printf(“close video_devicen”);close(vd->fd);/* dealloc the whole buffers */ if(vd->videodevice){
} if(vd->cameraname){
} for(i = 0;i < OUTFRMNUMB;i++){
} pthread_mutex_destroy(&vd->grabmutex);if(vd->ptframe[i]){
} free(vd->ptframe[i]);vd->ptframe[i] = NULL;vd->framelock[i] = 0;if(debug)printf(“freeing output buffer %dn”, i);
free(vd->cameraname);vd->cameraname = NULL;free(vd->videodevice);vd->videodevice = NULL;5.1.3視頻數(shù)據(jù)采集
視頻數(shù)據(jù)的采集是系統(tǒng)實現(xiàn)的第一步,是所有工作的前提。嵌入式Linux系統(tǒng)支持兩種視頻數(shù)據(jù)采集的方式:內(nèi)存映射、直接讀取視頻。
(1)內(nèi)存映射
內(nèi)存映射方式是通過mmap系統(tǒng)調(diào)用函數(shù)來實現(xiàn)的。mmap系統(tǒng)調(diào)用使得進(jìn)程之間通過映射同一個普通文件實現(xiàn)共享內(nèi)存。普通文件被映射到進(jìn)程地址空間
后,進(jìn)程可以像訪問普通內(nèi)存一樣對文件進(jìn)行訪問,不必再調(diào)用read()、write()等操作。
首先,使用ioctl系統(tǒng)調(diào)用的VIDIOCSFBUF命令獲得攝像頭存儲緩沖區(qū)的幀信息,之后初始化video_mbuf,修改video_mmap中的設(shè)置,重新設(shè)置圖像信息,如幀的垂直及水平分辨率、彩色顯示格式等。為了防止緩沖區(qū)的內(nèi)容與有用信息疊加產(chǎn)生干擾,在初始化之前可以先調(diào)用memset(&(vd->videombuf),0,sizeof(vd->videombuf)來清零緩沖區(qū)。然后使用函數(shù)vd->map=(unsigned char*)mmap(O,vd->mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,vd->fd,ff_t offset)使設(shè)備內(nèi)容映射到內(nèi)存區(qū),其中第一個參數(shù)為共享內(nèi)存的起始地址,一般設(shè)為0,表示由系統(tǒng)分配;第二個參數(shù)為映射到調(diào)用進(jìn)程地址空間的字節(jié)數(shù),它從被映射文件開頭offset個字節(jié)開始算起;第三個參數(shù)指定共享內(nèi)存的訪問權(quán)限(PROT_READ(可讀),PROT_WRITE(可寫),PROT_EXEC(可執(zhí)行));第四個參數(shù)可以是MAP_SHARED或者M(jìn)AP_PRIVATE;第五個參數(shù)為設(shè)備描述符。mmap()成功調(diào)用后返回系統(tǒng)實際分配的起始地址。
內(nèi)存映射方式下真正進(jìn)行視頻截取的是ioctl系統(tǒng)調(diào)用的VIDIOCMCAPTURE命令,若函數(shù)成功調(diào)用,再用VIDIOCSYNC命令來判斷圖像截取是否己經(jīng)完畢,若該函數(shù)調(diào)用成功,則表明一幀圖像的截取已完成,便開始下一幀圖像數(shù)據(jù)的截取,并將當(dāng)前截取的幀號按緩沖區(qū)總幀數(shù)的模加上l。
vd->vmmap.height=vd->hdrheight;vd->vmmap.width=vd->hdrwidth;vd->vmmap.format=vd->formatln;/*判斷圖像截取是否完成*/ if(ioctl(vd->fd,VIDIOCSYNC,&vd->vmmap.frame)<0){ perror(??cvsync errn);erreur=-I;} while((vd->framelock [vd->frame_cour]!=0)&&vd->signalquit)usleep(1000);temps=ms_time();
pthread_mutex_lock(&vd->grabmutex);jpegsize=convertframe(vd->ptframe[vd->frame_cour]+sizeof(struct frame_t),vd->pFramebuffer+vd->videombuf.offsets[vd->vmmap.frame],vd->hdrwidth,vd->hdrheight,vd->formatln,vd->framesizeIn);headerframe=(struct frame_t*)vd->ptframe [vd->frame_cour];
snprintf(headerframe->header, 5,”%s”.”SPCA”);
headerframe->seqtimes=ms_time();headerframe->w=vd->hdrwidth;headerframe->h=vd->hdrheight;headerframe->size=((jpegsize<0)? 0: jpegsize);headerframe->format=vd->formatln;headerframe->nbframe=frame++;pthread_mutex_unlock(&vd->grabmutex);/*截取視頻幀*/ if((ioctl(vd->fd,VIDIOCMCAPTURE,&(vd->vmmap)))<0){ perror(“cmcapture”);
if(debug)printf(“>>cmcapture err n”);erreur=-l;} vd->vmmap.frame=(vd->vmmap.frame+1)%vd->videombuf.frames;vd->frame_cour=(vd->frame_cour+l)%OUT FRMNUMB;(2)直接讀取方式
直接讀取視頻數(shù)據(jù)是通過read系統(tǒng)調(diào)用函數(shù)來實現(xiàn)。read是一個用來從指定的文件或設(shè)備中讀取數(shù)據(jù)的系統(tǒng)調(diào)用。參數(shù)表為read(fd,(void*)pFramebuff,(size_t)framesizeln)。其中fd為文件描述符,pFramebuffer為指向存放數(shù)據(jù)的內(nèi)存的指針,framesizeln為需要讀取的數(shù)據(jù)的長度。對于攝像頭設(shè)備的讀取,需要先分配內(nèi)存空間,用來存儲從攝像頭讀取過來的視頻數(shù)據(jù),然后直接調(diào)用read系統(tǒng)調(diào)用讀取視頻數(shù)據(jù),返回值為實際讀取的視頻幀大小,也正是在視頻傳輸過程中發(fā)送的視頻數(shù)據(jù)大小。
size=vd->framesizeln;vd->pFramebuffer=(unsigned char*)realloc(vd->pFramebuffer,(size_t)size);Len=read(vd->fd, vd->pFramebuffer, size);if(len<0){ if(debug)printf(“v41 read errorn”);
if(debug)printf(“l(fā)en %d asked %dn”, len, size);return 0;}
/*是否有其他進(jìn)程正在使用該視頻幀*/ while((vd->framelock [vd->frame_cour]!=0)&&vd->signalquit)
headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant);
usleep(1000);temps=ms_time();
pthread_mutex_lock(&vd->grabmutex);jpegsize=convertframe(vd->ptframe[vd->frame_cour]+sizeof(structframe_t),vd->pFramebuffer,vd->hdrwidth,vd->hdrheight,vd->formatln,vd->framesizeln);headerframe=(struct frame_t*)vd->ptframe [vd->frame_cour];snprintf(headerframe->header, 5,”%s”,”SPCA”);headerframe->seqtimes=ms_time();headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant);headerframe->w=vd->hdrwidth;headerframe->h=vd->hdrheight;headerframe->size=((jpegsize<0)? 0: jpegsize);headerframe->format=vd->formatln;headerframe->nbframe=frame++;vd->frame_cour=(vd->frame_cour+1)%OUTFRMNUMB;pthread_mutex_unlock(&vd->grabmutex);5.2圖像編解碼 5.2.1編解碼介紹
通過攝像頭采集到數(shù)據(jù)后,還并不能把它們直接通過網(wǎng)卡傳輸,因為這樣的數(shù)據(jù)很大,網(wǎng)絡(luò)不能承擔(dān)如此龐大的數(shù)據(jù)傳輸。所以,必須將采集到得數(shù)據(jù)進(jìn)行編碼,壓縮數(shù)據(jù)大小。通過這樣的操作,我們采集到得數(shù)據(jù)就會變得很小,然后再把這些數(shù)據(jù)通過網(wǎng)絡(luò)傳輸。同樣的道理,在輸出端我們還要把接收到的已經(jīng)壓縮的數(shù)據(jù)還原回來,這就涉及到解碼的內(nèi)容。通過這一系列的操作,圖像和視頻數(shù)據(jù)就實現(xiàn)的遠(yuǎn)程的傳輸。如果沒有編解碼,遠(yuǎn)程傳輸就是實際上不可能的事情,所以圖像的編解碼是非常重要的。
現(xiàn)在普遍使用的編解碼技術(shù)。對于靜態(tài)圖像,普遍使用靜態(tài)壓縮JPEG標(biāo)準(zhǔn);對于動態(tài)視頻,普遍使用動態(tài)壓縮MPEG標(biāo)準(zhǔn)。
JPEG是由ISO和CCITT為靜態(tài)圖像壓縮所建立的國際上第一個靜態(tài)圖像壓縮標(biāo)準(zhǔn),JPEG有著較高的壓縮比,復(fù)雜度適中,既可以用硬件實現(xiàn),也可以用軟件實現(xiàn),實用性強,被廣泛使用于計算機和通信行業(yè)。
MPEG中文譯名為動態(tài)圖像專家組。到目前為止,MPEG標(biāo)準(zhǔn)主要有五個,32
MPEG-
1、MPEG-
2、MPEG-
4、MPEG-7和MPEG-21。它是由ISO/IEC1172壓縮編碼標(biāo)準(zhǔn)得出的視頻壓縮格式,MPEG的出現(xiàn)使視聽傳播進(jìn)入數(shù)碼化時代。MPEG標(biāo)準(zhǔn)的視頻壓縮編碼技術(shù)主要利用了具有運動補償?shù)膸g壓縮編碼技術(shù)以減少時間冗余度,利用DCT技術(shù)以減少圖像的空間冗余度,利用熵編碼技術(shù)在信息表示方面減少了統(tǒng)計冗余度。通過一系列技術(shù),極大的體現(xiàn)了壓縮性能[16]。
5.2.2系統(tǒng)壓縮技術(shù)
由于本系統(tǒng)要求實現(xiàn)遠(yuǎn)程視頻傳輸,為了達(dá)到預(yù)計的設(shè)計要求,設(shè)計采用基于MJPEG算法的壓縮技術(shù)進(jìn)行視頻壓縮。MJPEG和MPEG的不同點在于MJPEG不使用幀間編碼。可是MJPEG與MPEG仍然是一脈相承的,它對MEPG進(jìn)行了一些改進(jìn)和發(fā)展,功能更加強大,能發(fā)送高質(zhì)圖片、清晰視頻,編碼容易實現(xiàn)。但MJPEG也有一些缺點,由于功能的提升,MJPEG對帶寬的要求很高,編碼效率低。
參考文獻(xiàn)
1.張永強,趙勇勇,李崇德.嵌入式遠(yuǎn)程視頻采集系統(tǒng)的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2006,05(02):57-60.2.Jing Li, Weidong Hao.Research and Design of Embedded Network Video Monitoring System Based on Linux[C].The 2008 International Conference on Embedded Software and Systems Symposia, 2008, 1310-1313.3.陳章龍,唐志強,涂時亮.嵌入式技術(shù)與系統(tǒng)——Intel Xscale 結(jié)構(gòu)與開發(fā)[M].北 京:北京航空航天大學(xué)出版社,2004,143.4.奧爾博公司.PXA270嵌入式實驗開發(fā)系統(tǒng)——Linux實驗指導(dǎo)[M],2007.5.Seon Gyu Kim and Sung Ho Cho.Implementation of an Embedded Software Modem Platform[J].Division of Electrical & Computer Engineering,2006,04(2):5-9 6.杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003.7.朱珍民,隋雪青.嵌入式實時操作系統(tǒng)及其應(yīng)用開發(fā)[M].北京:北京郵電大學(xué)出版社,2006.8.李亞峰 歐文盛.ARM嵌入式Linux系統(tǒng)開發(fā)從入門到精通[M].北京:清華大學(xué) 33
出版社,2007,51-54.9.李善平.Linux內(nèi)核2.4版源代碼分析大全[M].北京:機械工業(yè)出版社,2002.10.廖日坤.ARM嵌入式應(yīng)用開發(fā)技術(shù)白金手冊[M].北京:中國電力出版社,2007, 284-290.11.劉昆.Linux環(huán)境下宿主機與ARM開發(fā)板NFS服務(wù)的配置[J].科技資訊,2008,05(04):65-80.12.韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民教育出版社,2008.13.孫紀(jì)坤,張小全.嵌入式Linux系統(tǒng)開發(fā)技術(shù)詳解——基于ARM[M].北京:人民郵電出版社,2006.14.李冰,孫建平,譚悅,張啟勤.基于嵌入式Linux與S3C2410的網(wǎng)絡(luò)視頻監(jiān)控[J].河北:華北電力大學(xué)學(xué)報,2006,2(4):15-30.15.董玲,朱宏,楊忠孝.基于ARM的嵌入式Linux應(yīng)用程序開發(fā)研究[J].電子測試,2008,05(06):40-60.16.Yongqiang Zhang, Bing Zhang.Design of Embedded Audio and Video Compression System[J].Workshop on Intelligent Information Technology Application,2007,12(8):76-90.17.Xing Zhang, Li-Ming Song.Implementation of Video Data Transmission Between ARM and DSP Through Embedded Linux[C].The 2008 International Conference on Embedded Software and Systems Symposia,2008,292-295.18.張躍進(jìn),謝昕.嵌入式網(wǎng)絡(luò)數(shù)字視頻監(jiān)控系統(tǒng)的設(shè)計[J].計算機工程與設(shè)計,2009,12(9):70-100.19.Yi Wu, Jiangyong Cai, Xiao Lin, Lianfeng Shen.The Design and Realization of the Wireless Video Monitoring System Based on Embedded Linux and CDMA1X[C].The 2008 International Conference on Embedded Software and Systems Symposia, 2008, 179-184.20.王先春,郭杰榮,胡惟文,樊希平.基于ARM_Linux的嵌入式Web服務(wù)器的設(shè)計與實現(xiàn)[J].微計算機信息,2007,14(7):90-95.34