-嵌入式監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)學(xué)士學(xué)位論文_第1頁
-嵌入式監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)學(xué)士學(xué)位論文_第2頁
-嵌入式監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)學(xué)士學(xué)位論文_第3頁
-嵌入式監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)學(xué)士學(xué)位論文_第4頁
-嵌入式監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)學(xué)士學(xué)位論文_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

畢業(yè)設(shè)計(jì)(論文)題目目錄TOC\o"1-3"\h\u17866摘要 i3283Abstract ii203141.緒論 1260001.1研究背景及現(xiàn)狀 1234181.1.1研究背景 167261.1.2視頻監(jiān)控的現(xiàn)狀 1239901.2研究目的和意義 2121881.3本論文的主要工作 3210471.4論文總體結(jié)構(gòu) 368312.硬件平臺(tái)概述 412402.1硬件平臺(tái)介紹 4159632.1.1攝像頭介紹 486522.1.2運(yùn)行硬件平臺(tái)介紹 581262.2軟件平臺(tái)介紹 5257322.2.1Linux操作系統(tǒng) 5297152.2.2QT 678612.2.3Vi編輯器 9312452.2.4ARM交叉編譯環(huán)境 10247583.V4L2詳細(xì)介紹 12254333.1V4L2概述 1255083.1.1什么是V4L2 12304563.1.2V4L2的主要功能 12143823.2V4L2使用方法 1370463.2.1V4L2驅(qū)動(dòng)的主要ioctl 13137003.2.2V4L2的主要結(jié)構(gòu) 13124633.2.3V4L2操作流程 14256444.軟件詳細(xì)設(shè)計(jì) 1665014.1軟件運(yùn)行環(huán)境方案 1637394.2服務(wù)器設(shè)計(jì)方案 1695934.2.1視頻采集初始化 16123344.2.2申請并設(shè)置視頻采集的幀緩沖區(qū) 1798454.2.3視頻傳輸 199244.3客戶端設(shè)計(jì)方案 20252544.3.1客戶端界面 20324404.3.2錄像功能 23268464.3.3拍照功能 23290664.4軟件使用流程說明 24152564.4.1打開服務(wù)端 2417642結(jié)論 2930576致謝 309629參考文獻(xiàn) 3130277外文原文 3211635中文翻譯 46 北京郵電大學(xué)畢業(yè)設(shè)計(jì) PAGE1PAGE11.緒論1.1研究背景及現(xiàn)狀隨著多媒體技術(shù)、信息電子技術(shù)和網(wǎng)絡(luò)通信技術(shù)的發(fā)展,視屏監(jiān)控系統(tǒng)正在朝著平臺(tái)化、智能化和網(wǎng)絡(luò)化的方向發(fā)展,嵌入式監(jiān)控系統(tǒng)以其獨(dú)有的微小性、穩(wěn)定性、功能針對(duì)性而被廣泛應(yīng)用在各個(gè)領(lǐng)域。1.1.1研究背景隨著人類社會(huì)不斷的向數(shù)字化、網(wǎng)絡(luò)化、全球一體化發(fā)展,人們接收的信息量越來越大。有人說:一切競爭都是對(duì)信息的競爭。信息的重要性正在逐步的被人們所意識(shí)到,人們在接受更多信息的同時(shí),對(duì)能獲取更多信息的意愿也變得更加強(qiáng)烈。從古至今,信息傳輸方式已經(jīng)進(jìn)行了好幾次重大的變革:從最原始書信傳遞,到之后的聲音傳遞,再到更加生動(dòng)的圖像傳遞,最后到現(xiàn)在高端的視頻傳遞,都可以看做是人們獲取更多信息量的意愿所推動(dòng)的產(chǎn)物。俗話說:“百聞不如一見”。在這幾項(xiàng)傳輸方式中,視頻傳遞無疑是其中的佼佼者:首先視頻可以真實(shí)地還原當(dāng)時(shí)的情景,使傳輸?shù)男畔⒏庇^、更有表現(xiàn)力,其次,視頻信息具有非常高的真實(shí)性和說服力:文字可以造假,聲音可以模仿,圖片可以修改,而視頻信息是非常難以偽造的,而修改后的視頻也很難不留下痕跡,可謂是最有說服力的信息之一。而視頻還有傳輸信息量大的特點(diǎn)。因此,信息在信息的傳輸中具有舉足輕重的地位。如今電子信息技術(shù)、計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)通信技術(shù)正在飛速的發(fā)展,這也給視頻信息的制作和傳輸提供了技術(shù)保證。在視頻信息剛剛開始發(fā)展的時(shí)候,生動(dòng)形象的視頻雖然給人們帶來了很多便利,但是也產(chǎn)生了一些問題:未經(jīng)壓縮的視頻文件的數(shù)據(jù)量是非常之大的,動(dòng)輒可達(dá)數(shù)十GB,而一張vcd光盤只有650MB,如果想要將一部視頻完整的保存視頻下來,則需要幾十張vcd,這樣大的數(shù)據(jù)量,即使放在現(xiàn)在的硬件設(shè)施和網(wǎng)絡(luò)環(huán)境下,都是難以承受的,何況是當(dāng)時(shí)還不算寬裕的條件.因此,必須對(duì)捕獲到的海量的視頻數(shù)據(jù)進(jìn)行高效的壓縮,這有將數(shù)據(jù)壓縮到一個(gè)合理的大小,才能解決視頻的存儲(chǔ)和傳輸?shù)汝P(guān)鍵問題。1.1.2視頻監(jiān)控的現(xiàn)狀隨著社會(huì)發(fā)展和科技的日新月異,視頻監(jiān)控技術(shù)在不斷的發(fā)展并被應(yīng)用到社會(huì)的各行各業(yè),并因其所扮演的重要角色而受到人們的關(guān)注,目前視頻監(jiān)控系統(tǒng)的類別按信號(hào)的不同可以分為模擬監(jiān)控和數(shù)字監(jiān)控,按傳輸介質(zhì)的不同可以分為有線監(jiān)控和無線監(jiān)控。模擬監(jiān)控主要是由模擬攝像頭構(gòu)成的閉路監(jiān)控系統(tǒng)。由于是早期視頻監(jiān)控系統(tǒng)的主要模式,所以在國內(nèi)仍然被許多地方使用。由于采用閉路線纜進(jìn)行數(shù)據(jù)傳輸,可以提供清晰可靠的視頻信息,但是存在著許多較為明顯的局限性:第一、傳輸?shù)木嚯x短,由于使用線纜,所以只能架設(shè)在離視頻采集點(diǎn)較近的地方,數(shù)據(jù)傳輸率較低,而且視頻質(zhì)量會(huì)受到傳輸距離的影響,如果距離過長會(huì)導(dǎo)致視頻質(zhì)量明顯下降;第二、系統(tǒng)的可擴(kuò)展性較差,由于電腦或電視上的接口有限,所以固定的設(shè)備只能接受有限的視頻,沒法充分利用計(jì)算機(jī)的處理能力,形成復(fù)雜的視頻網(wǎng)絡(luò)。第三、后期處理能力不強(qiáng),無法利用視頻處理技術(shù)處理捕獲的數(shù)據(jù),也就無法對(duì)視頻進(jìn)行篩選,只能存儲(chǔ)所有的視頻,降低了磁盤空間的利用率。第四、必須架設(shè)專線,無法利用現(xiàn)有網(wǎng)絡(luò),極大地浪費(fèi)了資金,增加了系統(tǒng)的花銷。但隨著圖像處理技術(shù),計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)通信技術(shù)的發(fā)展,出現(xiàn)了基于嵌入式技術(shù)的有線網(wǎng)絡(luò)數(shù)字視頻監(jiān)控系統(tǒng)。相比于傳統(tǒng)的模擬監(jiān)控,它有很多優(yōu)點(diǎn):它擁有權(quán)限控制,可以輕易的定制用戶組,授權(quán)特定用戶進(jìn)行特定的工作。用戶可以在瀏覽器上輸入特定網(wǎng)址來進(jìn)行系統(tǒng)的訪問,實(shí)現(xiàn)視頻監(jiān)控、查看設(shè)備運(yùn)行信息等功能,不需要攜帶龐大的專用設(shè)備,只需要在有因特網(wǎng)的地方就可以隨時(shí)監(jiān)控。給人們帶來了極大的方便。因此基于嵌入式技術(shù)的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)有著良好的應(yīng)用前景和發(fā)展前景,完美的替代了陳舊落后的模擬監(jiān)控。隨著無線技術(shù)的快速發(fā)展,數(shù)字監(jiān)控系統(tǒng)在原有的網(wǎng)絡(luò)監(jiān)控系統(tǒng)的基礎(chǔ)上,扔掉了網(wǎng)絡(luò)電纜,改用無線的方式進(jìn)行傳輸,使人們對(duì)視頻操作的系統(tǒng)不再局限于有網(wǎng)絡(luò)電纜的地方,WIFI的崛起和普及的速度人盡皆知,短短的時(shí)間內(nèi),WIFI熱點(diǎn)遍布全球各個(gè)角落。只要在有WIFI的地方,你就可以用手機(jī)、平板、筆記本等便攜式設(shè)備連接因特網(wǎng)來訪問視頻監(jiān)控系統(tǒng),使視頻監(jiān)控系統(tǒng)變得更加靈活、可用性更高。即使你走到了一個(gè)沒有WIFI熱點(diǎn)的地方,你也可以使用成熟的3G/4G網(wǎng)絡(luò)等無線數(shù)據(jù)通信方式、之前的2G/2.5G網(wǎng)絡(luò)由于傳輸速率較低,無法完美地訪問數(shù)據(jù)傳輸量大的視頻監(jiān)控系統(tǒng),但3G網(wǎng)絡(luò)的峰值速率可以達(dá)到153.6Kbps,4G網(wǎng)絡(luò)的峰值數(shù)據(jù)更是可以達(dá)到驚人的100Mbps的恐怖速率,這樣網(wǎng)絡(luò)的速率就已不再是問題。如今國內(nèi)大部分的無線視頻監(jiān)控系統(tǒng)所處理成的視頻還是JPEG格式壓縮,但是隨著社會(huì)的發(fā)展,人們對(duì)視頻監(jiān)控系統(tǒng)的性能指標(biāo)比如視頻畫面的大小、輸出流的大小、傳輸?shù)姆绞胶蛯?shí)時(shí)性等方面也提出了更高的要求,傳統(tǒng)的JPEG壓縮已經(jīng)達(dá)不到人們對(duì)系統(tǒng)性能的要求,所以現(xiàn)在的視頻監(jiān)控系統(tǒng)大多已經(jīng)投入了MPEG4或者H.264壓縮技術(shù)的陣營。使用這些技術(shù)的視頻監(jiān)控系統(tǒng)大多都使用了第三方生產(chǎn)的專用芯片或者顯示卡,還有第三方的視頻解碼庫來實(shí)現(xiàn)對(duì)視頻編碼的壓縮。這樣做的好處在于可以使用第三方成熟的技術(shù),快速的開發(fā)出實(shí)用的視頻監(jiān)控系統(tǒng),并且無需在技術(shù)的研發(fā)上投入高昂的資金,從而縮短產(chǎn)品的研發(fā)周期,降低產(chǎn)品的研發(fā)費(fèi)用。但是也帶來了一些缺點(diǎn):比如過分依賴第三方成熟的技術(shù),從而使自己的技術(shù)核心競爭力變低、而且第三方產(chǎn)品的好壞直接影響到了自己商品的質(zhì)量、長期來看成本依然偏高等問題。所以視頻壓縮技術(shù)在未來的應(yīng)用前景和發(fā)展前景必將一片光明。1.2研究目的和意義在視頻監(jiān)控系統(tǒng)不斷的發(fā)展、在人們?nèi)粘I钪兴嫉谋戎卦絹碓酱蟮那闆r下,對(duì)視頻監(jiān)系統(tǒng)進(jìn)行不斷地研究,將這門課題研究的更加成熟,從而給人們帶了更大的便利性已經(jīng)成為了比較熱門的方向,本文旨在了解并熟悉視頻監(jiān)控系統(tǒng)的發(fā)展背景和工作流程,并利用現(xiàn)有技術(shù)和平臺(tái)制作出一套工作穩(wěn)定、可用程度高、具有相關(guān)需要功能的視頻監(jiān)控系統(tǒng)。為以后更加深入的研究打下堅(jiān)實(shí)的基礎(chǔ),同時(shí)拋磚引玉,在制作這套系統(tǒng)的同時(shí),也對(duì)自己大學(xué)所學(xué)的知識(shí)和技術(shù)進(jìn)行復(fù)習(xí)和總結(jié),為以后即將到來的工作有一個(gè)非常好的準(zhǔn)備。并且拓展思維,將自己不在局限于大學(xué)的學(xué)習(xí)生活和模式下,學(xué)會(huì)以一個(gè)軟件開發(fā)者的角度來看待、了解并解決問題。1.3本論文的主要工作本文根據(jù)視頻監(jiān)控系統(tǒng)的工作流程,結(jié)合已經(jīng)擁有的技術(shù),打算開發(fā)一套基于Linux操作系統(tǒng)下的視頻監(jiān)控系統(tǒng),監(jiān)控系統(tǒng)通過視頻攝像頭來采集視頻數(shù)據(jù),在接收到視頻數(shù)據(jù)后,服務(wù)器使用Linux下的V4L2格式對(duì)數(shù)據(jù)進(jìn)捕獲,并對(duì)信息進(jìn)行必要的處理。之后通過TCP/IP的傳輸方式,將數(shù)據(jù)傳輸?shù)娇蛻舳?,客戶端?duì)傳輸?shù)男畔⑦M(jìn)行處理后,將其完整的顯示在其屏幕上,并將視頻壓縮成通用的AVI格式保存,同時(shí)實(shí)現(xiàn)幾個(gè)常用到的功能,比如說將視頻的某個(gè)瞬間進(jìn)行拍照并保存成圖片等。本文筆者的任務(wù)如下:熟悉Linux操作系統(tǒng),掌握Linux下的常用的操作命令。探索基于Linux平臺(tái)下的軟件開發(fā)流程。熟練的掌握Linux下的各種開發(fā)工具,掌握Linux下對(duì)特定的視頻攝像頭的驅(qū)動(dòng)程序的編寫和讀取。深入理解基于Linux下的VideoforLinux2的接口函數(shù),用于捕獲視頻信息,仔細(xì)研究可以將圖片壓縮成視頻的開源庫,實(shí)現(xiàn)視頻的壓縮和存儲(chǔ)。1.4論文總體結(jié)構(gòu)全文共分為五章,各章內(nèi)容安排如下:第一章緒論。介紹研究背景,并對(duì)視頻監(jiān)控系統(tǒng)的現(xiàn)狀和發(fā)展情況做一個(gè)簡要的說明,提出研究目的和意義,進(jìn)一步明確研究目標(biāo)以及所要完成的工作。視頻監(jiān)控系統(tǒng)的開發(fā)平臺(tái)。對(duì)平臺(tái)做一個(gè)簡單的介紹,并介紹搭建的過程。V4L2的介紹與使用方式。對(duì)Linux下的VideoForLinux2進(jìn)行詳細(xì)的介紹,并詳細(xì)講述使用方法和重要函數(shù)。視頻監(jiān)控系統(tǒng)的軟件設(shè)計(jì)和編碼。軟件部分采用模塊化設(shè)計(jì),通過對(duì)服務(wù)端和客戶端的分別編碼,實(shí)現(xiàn)整個(gè)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。結(jié)束語。對(duì)所完成的任務(wù)進(jìn)行總結(jié),指出該系統(tǒng)的不足指出,以此來展望之后的研究。2.硬件平臺(tái)概述2.1硬件平臺(tái)介紹2.1.1攝像頭介紹攝像頭(CREMA)作為一種視頻輸入設(shè)備,在電子技術(shù)成熟的今天被廣泛的應(yīng)用與視頻聊天、視頻會(huì)議、視頻監(jiān)控、遠(yuǎn)程醫(yī)療和視頻攝錄等方面,由于圖像傳感和解析技術(shù)的成熟,使得攝像頭所攝錄的圖片和視頻的質(zhì)量有了明顯的提高,同時(shí)由于硬件技術(shù)的成熟,攝像頭的價(jià)格也在大幅度的下降。相比于傳統(tǒng)的、專業(yè)的攝像機(jī)等視頻輸入工具,攝像頭具有體積小、使用性高、方便、即插即用等特性,如今人們在進(jìn)行非專業(yè)的視頻圖像錄制時(shí),再也不需要扛著“長槍短炮”了,只需小小的攝像頭并可達(dá)到錄制的要求。攝像頭正在取代著一部分的錄制設(shè)備,在人們的日常生活中扮演著越來越重要的角色。攝像頭一般被分為數(shù)字?jǐn)z像頭和模擬攝像頭兩大類。模擬攝像頭可以采集的模擬視頻信號(hào)轉(zhuǎn)化成數(shù)字信號(hào),之后將其存儲(chǔ)到計(jì)算機(jī)里。模擬攝像頭捕捉到的信號(hào)必須經(jīng)過特定的設(shè)備將模擬信號(hào)轉(zhuǎn)化成數(shù)字信號(hào),并加以壓縮后才可被計(jì)算機(jī)所運(yùn)用,數(shù)字?jǐn)z像頭可以直接捕捉影像,然后通過USB或者串并口傳到計(jì)算機(jī)里。目前市場上的攝像頭主要是以數(shù)字?jǐn)z像頭為主,并且目前計(jì)算機(jī)上的接口多為USB接口,所以數(shù)字?jǐn)z像頭又以USB接口數(shù)字?jǐn)z像頭為主,以下介紹USB數(shù)字?jǐn)z像頭。USB數(shù)字?jǐn)z像頭的工作原理為:景物通過鏡頭生成的光學(xué)圖像投射到了光傳感器的上面,由光傳感器將其轉(zhuǎn)化為電信號(hào),經(jīng)過A/D(模數(shù)轉(zhuǎn)換)轉(zhuǎn)換后變?yōu)閿?shù)字圖像信號(hào),再送到數(shù)字信號(hào)處理芯片DSP中進(jìn)行加工處理,將其轉(zhuǎn)化為特定的圖像格式,如JPEG格式,再通過USB結(jié)構(gòu)傳輸?shù)教幚砥髦羞M(jìn)行處理,實(shí)現(xiàn)圖像顯示存儲(chǔ)或編碼傳輸。USB數(shù)字?jǐn)z像頭結(jié)構(gòu)圖如圖所示:圖2-1數(shù)字?jǐn)z像頭結(jié)構(gòu)圖圖2-1數(shù)字?jǐn)z像頭結(jié)構(gòu)圖在組成攝像頭的所有部件中,最重要、最為核心的兩個(gè)部件是圖像傳感器芯片和DSP芯片。圖像傳感器是一種半導(dǎo)體芯片,其中表面包含有幾十萬到幾百萬的光電二極管。光電二極管受到光照射時(shí),就會(huì)產(chǎn)生電荷。它可以分為CCD和CMOS兩類,光電二極管的芯能將直接決定攝像頭的最大分辨率和圖像質(zhì)量。CCD的優(yōu)點(diǎn)是靈敏度高,噪音小,信噪比大,但是生產(chǎn)工藝復(fù)雜、成本高、功耗高。CMOS的優(yōu)點(diǎn)是集成度高、功耗低(不到CCD的1/3)、成本低,但是噪音比較大、靈敏度較低、對(duì)光源要求高。從成本考慮,市場上大多還是采用CMOS的圖像傳感器,各廠商通過采用影像光源自動(dòng)增益補(bǔ)償技術(shù),自動(dòng)亮度、白平衡控制技術(shù),色飽和度、對(duì)比度、邊緣增強(qiáng)以及伽馬校正等先進(jìn)的影像控制技術(shù),完全可以達(dá)到與CCD攝像頭相媲美的效果。數(shù)字信號(hào)處理芯片DSP一般包括這三個(gè)模塊:鏡像信號(hào)處理器ISP,JPEG圖像解碼器,USB設(shè)備控制器,主要功能是通過一系列的復(fù)雜數(shù)據(jù)算法運(yùn)算,對(duì)數(shù)字圖像信號(hào)進(jìn)行優(yōu)化處理(如壓縮編碼),并把處理后的信號(hào)通過USB等接口傳到PC等設(shè)備。DSP芯片類型的不同將直接影響圖片格式的差異。USB攝像頭的圖像格式主要有以下幾種:JPEG格式,YUV格式和第三格式。其中第三格式是指廠家用自己的圖像壓縮算法對(duì)RGB格式的數(shù)據(jù)壓縮后得到的圖片格式。同一種圖像格式的攝像頭由于采集芯片型號(hào)的不同,捕獲的圖像數(shù)據(jù)流可能也會(huì)存在微小的差異,有些芯片會(huì)在JPEG圖像數(shù)據(jù)前加一定的頭部,有些則沒有;有些YUV格式的芯片采用YYUV的數(shù)據(jù)流格式,有些則采用YUVY數(shù)據(jù)流格式。2.1.2運(yùn)行硬件平臺(tái)介紹本系統(tǒng)的的運(yùn)行硬件為一臺(tái)裝有Linux虛擬機(jī)的Window操作系統(tǒng)的筆記本電腦,配置為:處理器i5,內(nèi)存12G。2.2軟件平臺(tái)介紹2.2.1Linux操作系統(tǒng)Linux操作系統(tǒng)是一套可以免費(fèi)使用和自由傳播的操作系統(tǒng),是一個(gè)是一個(gè)基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。Linux操作系統(tǒng)誕生于1991年的10月5日。Linux存在著許多不同的Linux版本,但它們都使用了Linux內(nèi)核。Linux可安裝在各種計(jì)算機(jī)硬件設(shè)備中,比如手機(jī)、平板電腦、路由器、視頻游戲控制臺(tái)、臺(tái)式計(jì)算機(jī)、大型機(jī)和超級(jí)計(jì)算機(jī)。嚴(yán)格來講,Linux這個(gè)詞本身只表示Linux內(nèi)核,但實(shí)際上人們已經(jīng)習(xí)慣了用Linux來形容整個(gè)基于Linux內(nèi)核,并且使用GNU工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)。Linux的文件結(jié)構(gòu):/:根目錄所有的目錄、文件、設(shè)備都顯示在/之下,/是Linux文件系統(tǒng)的組織者,也是最上層的管理者。/bin:bin是二進(jìn)制binary的英文縮寫。在一般的系統(tǒng)當(dāng)中,都可以再這個(gè)目錄下找到Linux的最常用的命令。系統(tǒng)需要的那些命令經(jīng)常位于此處。/boot:Linux的內(nèi)核以及引導(dǎo)系統(tǒng)程序所需要的文件目錄,一般情況下,GRUB或者LILO系統(tǒng)引導(dǎo)管理器也位于這個(gè)目錄。/cdrom:這個(gè)目錄在剛剛完成系統(tǒng)安裝的時(shí)候是空的,可以將光驅(qū)文件系統(tǒng)掛載到此目錄上。/dev:dev是設(shè)備device英文縮寫。這個(gè)目錄對(duì)所有的用戶都十分重要。因?yàn)樵谶@個(gè)目錄中包含了所有Linux系統(tǒng)中使用的外部設(shè)備。但是這里并不是用來放外部設(shè)備的驅(qū)動(dòng)的,而是一個(gè)訪問這些外部設(shè)備的端口??梢苑浅7奖愕娜ピL問這些外部設(shè)備,和訪問其他的文件和目錄沒有任何區(qū)別。/etc:etc這個(gè)目錄是Linux系統(tǒng)中最重要的目錄之一。在這個(gè)目錄下存放了系統(tǒng)管理時(shí)要用到的各種配置文件和子目錄。要用到的網(wǎng)絡(luò)配置文件,文件系統(tǒng),系統(tǒng)配置文件,設(shè)備配置信息,設(shè)置用戶信息等都在這個(gè)目錄下。/home:如果建立了一個(gè)用戶,用戶名是XX,那么在/home下就會(huì)有一個(gè)對(duì)應(yīng)的路徑名為/home/xx路徑,用來存放用戶的主目錄。/lib:lib是庫library英文縮寫。這個(gè)目錄是被用來存放系統(tǒng)動(dòng)態(tài)連接共享庫的。幾乎所有的應(yīng)用程序都會(huì)用到這個(gè)目錄下的共享庫。因此,不要輕易的對(duì)這個(gè)目錄進(jìn)行操作。/root:Linux超級(jí)權(quán)限用戶root的家目錄。/sbin:這個(gè)目錄是用來存放系統(tǒng)管理員的系統(tǒng)管理程序。大多是設(shè)計(jì)系統(tǒng)管理的命令的存放,是超級(jí)權(quán)限用戶root的可執(zhí)行命令存放地,普通的用戶無權(quán)執(zhí)行這個(gè)目錄下的命令。/usr:這是Linux系統(tǒng)中占用應(yīng)哦按控件最大的目錄,用戶的很多應(yīng)用程序和文件都存放在這個(gè)目錄下。/tmp:臨時(shí)文件目錄,用來存放不同程序執(zhí)行時(shí)所產(chǎn)生的臨時(shí)文件。2.2.2QTQT是一個(gè)由奇趣科技在1991年開發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架。它可以開發(fā)GUI程序,也可以用于開發(fā)非GUI程序,比如控制臺(tái)工具和服務(wù)器。QT是面向?qū)ο蟮目蚣?,使用特殊的代碼生成擴(kuò)展以及一些宏,易于擴(kuò)展,允許組建編程。2008年,奇趣公司被諾基亞公司收購,QT因此成為諾基亞旗下的編程語言工具。2012年,QT被Digla收購。Qt的優(yōu)勢:Qt具有優(yōu)良的跨平臺(tái)特性:QT支持包括Windows、Linux、UNIX等數(shù)十個(gè)系統(tǒng)。面向?qū)ο螅篞T良好的封裝機(jī)制使得QT的模塊化程度非常高,可重用性較好,對(duì)于用戶開發(fā)來說是非常方便的。QT提供了一種稱為signal/slots的安全類型來替代callback,這使得各個(gè)模塊之間的協(xié)同工作變得十分簡單。豐富的API:QT包括多達(dá)250個(gè)以上的C++類,還提供基于模板的collections,serialization,file,I/Odevice,directorymanagement,date/time類。甚至還包括正則表達(dá)式的處理功能。支持2D/3D圖形渲染,支持OpenGL。大量的開發(fā)文檔。XML支持。常用類:QDialog:代表對(duì)話框,用來實(shí)現(xiàn)那些只是暫時(shí)存在的用戶界面,是獨(dú)立的窗口,但通常也有父窗口。對(duì)話框有模態(tài)和非模態(tài)兩種,,非模態(tài)對(duì)話框的行為和使用方法都類似于普通的窗口,模態(tài)對(duì)話框則有所不同,當(dāng)模態(tài)對(duì)話框顯示時(shí),其他窗口將全部進(jìn)入非激活狀態(tài),不能接受鍵盤和鼠標(biāo)事件。模態(tài)的方式又可分為兩種,一種是對(duì)整個(gè)應(yīng)用程序模態(tài),這時(shí)它的出現(xiàn)將導(dǎo)致程序中的所有窗口失去響應(yīng);另一種是對(duì)窗口模態(tài),這時(shí)僅僅會(huì)導(dǎo)致它所在的整個(gè)窗口樹失去響應(yīng)。構(gòu)造:QDialog(QWidget*parent=0,Qt::WindowFlagsf=0);模態(tài)性:voidsetModal(boolmodal);//設(shè)置對(duì)話框的模態(tài)性,當(dāng)modal為true時(shí)為模態(tài),默認(rèn)對(duì)整個(gè)應(yīng)用程序模態(tài)voidsetWindowModality(Qt::WindowModalitywindowModality);//設(shè)為對(duì)窗口模態(tài).Qt::WindowModality有以下取值:Qt::NonModal:非模態(tài)Qt::WindowModal:窗口模態(tài)Qt::ApplicationModal:應(yīng)用程序模態(tài)Qt::WindowModalitywindowModality()const;//得到窗口的模態(tài)性boolisModal()const;//判斷窗口是否為模態(tài)的QLabel:代表標(biāo)簽,是一個(gè)用于顯示文本或圖像的窗口部件構(gòu)造:QLabel(QWidget*parent=0,Qt::WindowFlagsf=0);QLabel(constQString&text,QWidget*parent=0,Qt::WindowFlagsf=0);//能夠同時(shí)通過參數(shù)text給出要顯示的文本,因此是最常用的構(gòu)造方式屬性:QStringtext()const;//獲取顯示的文本voidsetText(constQString&text);//設(shè)置顯示的文本,這是一個(gè)槽constQPixmap*pixmap()const;//獲取顯示的圖像voidsetPixmap(constQPixmap&pixmap);//設(shè)置顯示的圖像,這是一個(gè)槽voidsetNum(intnum);//設(shè)置顯示的文本為代表整數(shù)num的字符串,這是一個(gè)槽voidsetNum(doublenum);//設(shè)置顯示的文本為代表浮點(diǎn)數(shù)num的字符串voidclear;//清空顯示內(nèi)容alignment代表顯示內(nèi)容的對(duì)齊方式:Qt::Alignmentalignment()const;//獲取對(duì)齊方式voidsetAlignment(Qt::Alignmentalign);//設(shè)置對(duì)齊方式Qt::Alignment有以下取值:Qt::AlignLeft:水平方向靠左Qt::AlignRight:水平方向靠右Qt::AlignHCenter:水平方向居中Qt::AlignJustify:水平方向調(diào)整間距兩端對(duì)齊Qt::AlignTop:垂直方向靠上Qt::AlignBottom:垂直方向靠下Qt::AlignVCenter:垂直方向居中Qt::AlignCenter:等價(jià)于Qt::AlignHcenter|Qt::AlignVCenter,即水平和垂直方向都居中indent代表文本的縮進(jìn)值:intindent()const://獲取文本縮進(jìn)值voidsetIndent(intindent);//設(shè)置文本縮進(jìn)值margin代表顯示內(nèi)容的邊距:intmargin()const;//獲取邊距voidsetMargin(intmargin);//設(shè)置邊距wordWrap代表顯示的文本是否允許換行:boolwordWrap()const;//判斷是否允許換行voidsetWordWrap(boolon);//設(shè)置是否允許行換行scaledContents表示顯示圖像時(shí)是否允許縮放:boolhasScaledContents()const;//判斷是否允許圖像縮放voidsetScaledContents(boolon);//設(shè)置是否允許圖像縮放,如果允許縮放,則顯示圖像時(shí)會(huì)進(jìn)行縮放以填滿整個(gè)顯示區(qū)域QPushButton:代表按鈕,它繼承了QAbstractButton,因此也有其全部的屬性,信號(hào)和槽構(gòu)造:QPushButton(QWidget*parent=0);QPushButton(constQString&text,QWidget*parent=0);QPushButton(constQIcon&icon,constQString&text,QWidget*parent=0);//text是按鈕上顯示的文本,icon是按鈕的圖標(biāo),生成的對(duì)象默認(rèn)是沒有開關(guān)狀態(tài)的屬性:boolisFlat()const;//判斷外觀是否為扁平狀voidsetFlat(boolflat);//設(shè)置外觀是否為扁平狀如果為true,則按鈕是扁平的,否則就是立體的如果一個(gè)按鈕在對(duì)話框中,那么它就有默認(rèn)和自動(dòng)默認(rèn)的概念,分別由default屬性以及autoDefault屬性控制:boolisDefault(0const;//判斷按鈕是否為默認(rèn)按鈕voidsetDefault(boolon);//設(shè)置按鈕是否為默認(rèn)按鈕boolautoDefault()const;//判斷按鈕是否為自動(dòng)默認(rèn)按鈕voidsetAutoDefault(bool)//設(shè)置按鈕是否為自動(dòng)默認(rèn)按鈕對(duì)話框中同一時(shí)刻只能有一個(gè)默認(rèn)按鈕,當(dāng)用戶按回車鍵時(shí),等價(jià)于在對(duì)話框中單擊這個(gè)按鈕.實(shí)際上,對(duì)話框中還有一個(gè)主默認(rèn)按鈕的概念。一個(gè)自動(dòng)默認(rèn)按鈕得到焦點(diǎn)時(shí),就會(huì)變成默認(rèn)按鈕;失去焦點(diǎn)時(shí),主默認(rèn)按鈕就成為默認(rèn)按鈕。而設(shè)置一個(gè)按鈕的默認(rèn)屬性為true將同時(shí)使它成為對(duì)話框的主默認(rèn)按鈕。2.2.3Vi編輯器Vi編輯器是Visualinterface的簡稱,通常稱之為VI。它可以執(zhí)行諸如輸出、刪除、查找、替換、塊操作等眾多文本操作,而用戶可以根據(jù)自己的需要對(duì)其進(jìn)行定制,這是其他編輯程序所沒有的。Vi搬機(jī)器并不是一個(gè)排版程序,它不像Word或WPS那樣可以對(duì)字體、格式、段落等其他屬性進(jìn)行編排,它只是一個(gè)文本編輯程序。沒有菜單,只有命令,且命令繁多。Vi有三種編輯模式:命令模式、插入模式和末行模式。其中命令模式可以控制屏幕光標(biāo)的移動(dòng),字符、字或行的刪除,移動(dòng)復(fù)制某區(qū)段進(jìn)入插入模式下,或者到末行模式;插入模式用于做文字輸入等相關(guān)操作;末行模式用于將文件保存或退出vi,也可以設(shè)置編輯環(huán)境,如尋找字符串、列出行號(hào)等。vi模式切換的方式如圖所示。圖2-2Vi模式切換方式圖2-2Vi模式切換方式Vi的基本操作:進(jìn)入vi:$vimyfile切換至插入模式:在命令行模式下按一下字母i就可以進(jìn)入插入模式。切換至命令模式:按下Esc鍵就可以進(jìn)入命令模式。2.2.4ARM交叉編譯環(huán)境交叉編譯是嵌入式開發(fā)過程中的一項(xiàng)重要技術(shù),其主要特征是某機(jī)器中執(zhí)行的程序代碼不是在本機(jī)編譯生成,而是由另一臺(tái)機(jī)器編譯生成,一般把前者稱為目標(biāo)機(jī),后者稱為主機(jī)。采用交叉編譯的主要原因在于,多數(shù)嵌入式目標(biāo)系統(tǒng)不能提供足夠的資源供編譯過程使用,因而只好將編譯工程轉(zhuǎn)移到高性能的主機(jī)中進(jìn)行,這就需要在強(qiáng)大的pc機(jī)上建立一個(gè)用于目標(biāo)機(jī)的交叉編譯環(huán)境。這是一個(gè)由編譯器、連接器和解釋器組成的綜合開發(fā)環(huán)境。linux下的交叉編譯環(huán)境重要包括以下幾個(gè)部分:1.針對(duì)目標(biāo)系統(tǒng)的編譯器gcc;2.針對(duì)目標(biāo)系統(tǒng)的二進(jìn)制工具binutils;3.目標(biāo)系統(tǒng)的標(biāo)準(zhǔn)c庫glibc,有時(shí)出于減小libc庫大小的考慮,你也可以用別的c庫來代替glibc,例如uClibc、newlib等;4.目標(biāo)系統(tǒng)的linux內(nèi)核頭文件。交叉編譯環(huán)境的搭建方法:交叉編譯環(huán)境搭建所需要的文件:binutils-2.15.tar.bz2:這個(gè)壓縮包包含有l(wèi)d,ar,as等一些產(chǎn)生或者處理二進(jìn)制文件的工具。其主要目的是為GNU系統(tǒng)提供匯編和連接工具等。gcc-3.4.5.tar.bz2:這個(gè)壓縮包主要是為GNU系統(tǒng)提供C編譯器?,F(xiàn)在支持多種語言,這其中包括C/C++、Fortran、Java、Objective-C、Ada等。glibc-2.2.5.tar.gz:Libc是很多用戶層應(yīng)用都要用到的庫,用于定義系統(tǒng)調(diào)用和其它一些基本的函數(shù)調(diào)用。glibc-linuxthreads-2.2.5.tar.gz:這是Libc用于支持Posix線程而單獨(dú)發(fā)布的一個(gè)壓縮包。linux-2.6.8.tar.bz2:這個(gè)壓縮包就是Linux的內(nèi)核,在編譯glibc時(shí),要用到Linux內(nèi)核中的include目錄的內(nèi)核頭文件。3.V4L2詳細(xì)介紹3.1V4L2概述3.1.1什么是V4L2VideoforLinuxtwo(Video4Linux2)簡稱V4L2,是V4L的改進(jìn)版。V4L2是linux操作系統(tǒng)下用于采集圖片、視頻和音頻數(shù)據(jù)的API接口,配合適當(dāng)?shù)囊曨l采集設(shè)備和相應(yīng)的驅(qū)動(dòng)程序,可以實(shí)現(xiàn)圖片、視頻、音頻等的采集。在遠(yuǎn)程會(huì)議、可視電話、視頻監(jiān)控系統(tǒng)和嵌入式多媒體終端中都有廣泛的應(yīng)用。在Linux下,所有外設(shè)都被看成一種特殊的文件,成為“設(shè)備文件”,可以象訪問普通文件一樣對(duì)其進(jìn)行讀寫。一般來說,采用V4L2驅(qū)動(dòng)的攝像頭設(shè)備文件是/dev/v4l/video0。為了通用,可以建立一個(gè)到/dev/video0的鏈接。V4L2支持兩種方式來采集圖像:內(nèi)存映射方式(mmap)和直接讀取方式(read)。V4L2在include/linux/videodev.h文件中定義了一些重要的數(shù)據(jù)結(jié)構(gòu),在采集圖像的過程中,就是通過對(duì)這些數(shù)據(jù)的操作來獲得最終的圖像數(shù)據(jù)。Linux系統(tǒng)V4L2的能力可在Linux內(nèi)核編譯階段配置,默認(rèn)情況下都有此開發(fā)接口。V4L2從Linux2.5.x版本的內(nèi)核中開始出現(xiàn)。V4L2規(guī)范中不僅定義了通用API元素(CommonAPIElements),圖像的格式(ImageFormats),輸入/輸出方法(Input/Output),還定義了Linux內(nèi)核驅(qū)動(dòng)處理視頻信息的一系列接口(Interfaces),這些接口主要有:視頻采集接口——VideoCaptureInterface;視頻輸出接口——VideoOutputInterface;視頻覆蓋/預(yù)覽接口——VideoOverlayInterface;視頻輸出覆蓋接口——VideoOutputOverlayInterface;編解碼接口——CodecInterface。3.1.2V4L2的主要功能V4L2的主要功能是使程序有發(fā)現(xiàn)設(shè)備和操作設(shè)備的能力.它主要是用一系列的回調(diào)函數(shù)來實(shí)現(xiàn)這些功能。像設(shè)置攝像頭的頻率、幀頻、視頻壓縮格式和圖像參數(shù)等等。當(dāng)然也可以用于其他多媒體的開發(fā),如音頻等。V4L2是為Linux操作系統(tǒng)開發(fā)的,所以此框架只能運(yùn)行在Linux操作系統(tǒng)之上。3.2V4L2使用方法3.2.1V4L2驅(qū)動(dòng)的主要ioctl/*查詢能力*/#defineVIDIOC_QUERYCAP_IOR('V',0,structv4l2_capability)/*獲得格式*/#defineVIDIO_G_FMT_IOWR('V',4,structv4l2_format)/*設(shè)置格式*/#defineVIDIOC_S_FMT_IOWR('V',5,structv4l2_format)/*申請內(nèi)存*/#defineVIDIOC_REQBUFS_IOWR('V',8,strutv4l2_requestbuffers)/*獲得Framebuffer*/#defineVIDIOC_G_FBUF_IOW('V',10,structv4l2_framebuffer)/*設(shè)置Framebuffer*/#defineVIDIOC_S_BUF_IOW('V',11,structv4l2_framebuffer)/*設(shè)置Overlay*/#defineVIDIOC_OVERLAY_IOW('V',14,int)/*將內(nèi)存加入隊(duì)列*/#defineVIDIOC_QBUF_IOWR('V',15,structv4l2_buffer)/*從隊(duì)列取出內(nèi)存*/#defineVIDIOC_DQBUF_IOWR('V',17,strutv4l2_buffer)/*開始流*/#defineVIDIOC_STREAMON_IOW('V',18,int)/*停止流*/#defineVIDIOC_STREAMOFF_IOW('V',19,int)/*得到控制*/#defineVIDIOC_G_CTRL_IOWR('V',27,structv4l2_control)/*設(shè)置控制*/#defineVIDIOC_S_CTRL_IOWR('V',28,structv4l2_control)3.2.2V4L2的主要結(jié)構(gòu)1)設(shè)備能力結(jié)構(gòu)structv4l2_capability{__u8driver[16];//驅(qū)動(dòng)名__u8card[32];//例如HauppaugewinTV__u8bus_info[32];//PCI總線信息__u32version;//內(nèi)核版本__u32capabilities;//設(shè)備能力__u32reserved[4];};2)數(shù)據(jù)格式結(jié)構(gòu)structv4l2_format{enumv4l2_buf_typetype;//本結(jié)構(gòu)的數(shù)據(jù)類型};3)像素格式結(jié)構(gòu)structv4l2_pix_format{__u32width;//寬度__u32height;//高度}4)請求緩沖structv4l2_requestbuffers{__u32count;//緩存數(shù)量enumv4l2_buf_typetype;//數(shù)據(jù)流類型}5)數(shù)據(jù)流類型包括V4L2_MEMORY_MMAP和V4L2_MEMORY_USERPTRenumv4l2_memory{};3)像素格式結(jié)構(gòu)structv4l2_pix_format{__u32width;//寬度__u32height;//高度}4)請求緩沖structv4l2_requestbuffers{__u32count;//緩存數(shù)量enumv4l2_buf_typetype;//數(shù)據(jù)流類型}3.2.3V4L2操作流程打開設(shè)備文件。關(guān)鍵操作:intfd=open(”/dev/video0″,O_RDWR);取得設(shè)備的capability關(guān)鍵操作:ioctl(fd,VIDIOC_QUERYSTD,&std);設(shè)置視頻的制式和幀格式,制式包括PAL,NTSC,幀的格式個(gè)包括寬度和高度等。關(guān)鍵操作:ret=ioctl(fd,VIDIOC_S_FMT,&fmt);向驅(qū)動(dòng)申請幀緩沖,一般不超過5個(gè)。關(guān)鍵操作:ioctl(fd,VIDIOC_REQBUFS,&req);將申請到的幀緩沖映射到用戶空間,以便操作緩存到的幀。將申請到的幀緩沖全部入隊(duì)列,以便存放采集到的數(shù)據(jù)。關(guān)鍵操作:memset(&buf,0,sizeof(buf));ioctl(fd,VIDIOC_QUERYBUF,&buf);buffers[numBufs].start=mmap(NULL,buf.length,PROT_READ|PROT_WRITE,MAP_SHARED,fd,buf.m.offset);開始視頻的采集。關(guān)鍵操作:ioctl(fd,VIDIOC_STREAMON,&type);出隊(duì)列以取得已采集數(shù)據(jù)的幀緩沖,取得原始采集數(shù)據(jù)。VIDIOC_DQBUF,將緩沖重新入隊(duì)列尾,這樣可以循環(huán)采集。關(guān)鍵操作:ioctl(fd,VIDIOC_DQBUF,&buf);停止視頻的采集。關(guān)鍵操作:ioctl(fd,VIDIOC_STREAMOFF,&type);關(guān)閉視頻設(shè)備。關(guān)鍵操作:close(fd);4.軟件詳細(xì)設(shè)計(jì)4.1軟件運(yùn)行環(huán)境方案軟件平臺(tái)采用的嵌入式操作系統(tǒng)為Linux2.4.21。Linux具有內(nèi)核小、效率高、源碼開放、內(nèi)核直接提供網(wǎng)絡(luò)支持等優(yōu)點(diǎn),但嵌入式系統(tǒng)的硬件資源有限,因此需根據(jù)實(shí)際需求對(duì)內(nèi)核進(jìn)行裁剪,配置所需的功能模塊,然后再移植到硬件平臺(tái)上。嵌入式系統(tǒng)的軟件開發(fā)采用交叉編譯調(diào)試的方式在宿主機(jī)上安裝Linux系統(tǒng),建立交叉編譯環(huán)境,在宿主機(jī)編寫程序代碼,再利用交叉編譯工具生成目標(biāo)機(jī)上可用的可執(zhí)行文件,用該文件向目標(biāo)機(jī)平臺(tái)移植。4.2服務(wù)器設(shè)計(jì)方案服務(wù)器模塊通過嵌入式Linux操作系統(tǒng)調(diào)用Video4Linux2和底層設(shè)備驅(qū)動(dòng)程序來完成視頻捕獲。V4L2是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動(dòng),它為Linux下的各種視頻設(shè)備提供了統(tǒng)一的編程接口,應(yīng)用程序通過這些接口函數(shù)就可以操縱各種不同的設(shè)備。視頻采集流程如圖4-1所示。圖4-1視頻采集流程圖4.2.1視頻采集初始化在Linux下,攝像頭硬件已經(jīng)被映射為設(shè)備文件“/dev/video0”,用open函數(shù)打開這個(gè)設(shè)備文件,獲得其文件描述符fd,然后對(duì)這個(gè)文件描述符進(jìn)行參數(shù)初始化。1.設(shè)置視頻點(diǎn)陣格式和點(diǎn)陣大小主要是對(duì)結(jié)構(gòu)體v4l2_format進(jìn)行賦值,它由type和聯(lián)合體fmt構(gòu)成,來描述視頻設(shè)備當(dāng)前行為和數(shù)據(jù)的格式。把type賦值為視頻采集類型V4L2_BUF_TYPE_VIDEO_CAPTURE,表示定義了一個(gè)視頻采集流類型的buffer。fmt中,pix為表示圖形格式的v4l2_pix_format型結(jié)構(gòu)體。需要設(shè)定pix里的幾個(gè)變量,pixelformat表示采集格式,設(shè)置為V4L2_PIX_FMT_YUV420;width、height表示圖像的寬度、高度,以字節(jié)為單位;sizeimage表示圖像所占的存儲(chǔ)空間大小,以字節(jié)為單位;bytesperline表示每一行的字節(jié)數(shù)。賦值后,用ioctl函數(shù)通過這個(gè)結(jié)構(gòu)體對(duì)fd進(jìn)行設(shè)置。structv4l2_streamparm{enumv4l2_buf_typetype;union{structv4l2_captureparmcapture;structv4l2_outputparmoutput;__u8raw_data[200];/*user-defined*/}parm;};4.2.2申請并設(shè)置視頻采集的幀緩沖區(qū)前期初始化完成后,只是解決了一幀視頻數(shù)據(jù)的格式和大小問題,而連續(xù)視頻幀數(shù)據(jù)的采集需要用幀緩沖區(qū)隊(duì)列的方式來解決,即要通過驅(qū)動(dòng)程序在內(nèi)存中申請幾個(gè)幀緩沖區(qū)來存放視頻數(shù)據(jù)。應(yīng)用程序通過API接口提供的方法(VIDIOC_REQBUFS)申請若干個(gè)視頻數(shù)據(jù)的幀緩沖區(qū),申請幀緩沖區(qū)數(shù)量一般不低于3個(gè),每個(gè)幀緩沖區(qū)存放一幀視頻數(shù)據(jù),這些幀緩沖區(qū)在內(nèi)核空間。/*setdevicerequestbuffer*/staticintset_req(intnum_buffer,intfd){ structv4l2_requestbuffersreqbuf; memset(&reqbuf,0,sizeof(structv4l2_requestbuffers)); reqbuf.count =num_buffer; reqbuf.type =V4L2_BUF_TYPE_VIDEO_CAPTURE; reqbuf.memory =V4L2_MEMORY_MMAP; if(ioctl(fd,VIDIOC_REQBUFS,&reqbuf)<0){ fprintf(stderr,"VIDIOC_REQBUFSERROR:%s\n",strerror(errno)); return-1; } return0;}應(yīng)用程序通過API接口提供的查詢方法(VIDIOC_QUERYBUF)查詢到幀緩沖區(qū)在內(nèi)核空間的長度和偏移量地址。應(yīng)用程序再通過內(nèi)存映射方法(mmap),將申請到的內(nèi)核空間幀緩沖區(qū)的地址映射到用戶空間地址,這樣就可以直接處理幀緩沖區(qū)的數(shù)據(jù)。/*mapthedevicebuffers*/staticintmap_devf(intnum_buffer,intfd,unsignedchar**mem_list){ structv4l2_bufferbuf; inti=0; for(i=0;i<num_buffer;i++){ memset(&buf,0,sizeof(structv4l2_buffer)); buf.index =i; buf.type =V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory =V4L2_MEMORY_MMAP; if(ioctl(fd,VIDIOC_QUERYBUF,&buf)<0){ fprintf(stderr,"VIDIOC_QUERYBUFERROR:%s\n",strerror(errno)); return-1; } if((mem_list[i]=(unsignedchar*)mmap(0,buf.length,PROT_READ,MAP_SHARED,\ fd,buf.m.offset))==MAP_FAILED){ fprintf(stderr,"mmaperror:%s\n",strerror(errno)); return-1; } } return0;}(1)將幀緩沖區(qū)在視頻輸入隊(duì)列排隊(duì),并啟動(dòng)視頻采集在驅(qū)動(dòng)程序處理視頻的過程中,定義了兩個(gè)隊(duì)列:視頻采集輸入隊(duì)列(incomingqueues)和視頻采集輸出隊(duì)列(outgoingqueues),前者是等待驅(qū)動(dòng)存放視頻數(shù)據(jù)的隊(duì)列,后者是驅(qū)動(dòng)程序已經(jīng)放入了視頻數(shù)據(jù)的隊(duì)列。如圖2所示。應(yīng)用程序需要將上述幀緩沖區(qū)在視頻采集輸入隊(duì)列排隊(duì)(VIDIOC_QBUF),然后可啟動(dòng)視頻采集。/*Queuethebuffers*/staticintset_mem_type(intnum_buffer,intfd){ inti=0; structv4l2_bufferbuf; for(i=0;i<num_buffer;i++){ memset(&buf,0,sizeof(structv4l2_buffer)); buf.index =i; buf.type =V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory =V4L2_MEMORY_MMAP; if(ioctl(fd,VIDIOC_QBUF,&buf)<0){ fprintf(stderr,"VIDIOC_QBUF1ERROR:%s\n",strerror(errno)); return-1; } } return0;}(2)循環(huán)往復(fù),采集連續(xù)的視頻數(shù)據(jù)啟動(dòng)視頻采集后,驅(qū)動(dòng)程序開始采集一幀數(shù)據(jù),把采集的數(shù)據(jù)放入視頻采集輸入隊(duì)列的第一個(gè)幀緩沖區(qū),一幀數(shù)據(jù)采集完成,也就是第一個(gè)幀緩沖區(qū)存滿一幀數(shù)據(jù)后,驅(qū)動(dòng)程序?qū)⒃搸彌_區(qū)移至視頻采集輸出隊(duì)列,等待應(yīng)用程序從輸出隊(duì)列取出。驅(qū)動(dòng)程序接下來采集下一幀數(shù)據(jù),放入第二個(gè)幀緩沖區(qū),同樣幀緩沖區(qū)存滿下一幀數(shù)據(jù)后,被放入視頻采集輸出隊(duì)列。應(yīng)用程序從視頻采集輸出隊(duì)列中取出含有視頻數(shù)據(jù)的幀緩沖區(qū),處理幀緩沖區(qū)中的視頻數(shù)據(jù),如存儲(chǔ)或壓縮。最后,應(yīng)用程序?qū)⑻幚硗陻?shù)據(jù)的幀緩沖區(qū)重新放入視頻采集輸入隊(duì)列,這樣可以循環(huán)采集,如圖4-2所示圖4-2視頻采集輸入和輸出示意圖最終停止采集,釋放內(nèi)存幀緩沖區(qū)4.2.3視頻傳輸TCP/IP:TransmissionControlProtocol/InternetProtocol的簡寫,中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通信協(xié)議,是Internet最基本的協(xié)議、Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。而IP是給因特網(wǎng)的每一臺(tái)電腦規(guī)定一個(gè)地址。設(shè)置流程://創(chuàng)建socketsockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0){ syslog(LOG_DEBUG,"socket:%s\n",strerror(errno)); //exit(1); } //創(chuàng)建ip和port structsockaddr_inaddr; memset(&addr,0,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(atoi(argv[1])); addr.sin_addr.s_addr=INADDR_ANY; //bindip,port和socket if(bind(sockfd,(structsockaddr*)&addr,sizeof(addr))<0){ syslog(LOG_DEBUG,"bind:%s\n",strerror(errno)); //exit(1); } //開始listen if(listen(sockfd,10)<0){ syslog(LOG_DEBUG,"listen:%s\n",strerror(errno)); //exit(1); }4.3客戶端設(shè)計(jì)方案4.3.1客戶端界面客戶端需要具備的功能主要有拍照、暫停、停止和錄像功能,界面如圖4-3所示:圖4-3客戶端界面客戶端界面是用QT來實(shí)現(xiàn)的,其中菜單欄使用QT的QMenu控件制作。//FileMenufileMenu=menuBar()->addMenu("&File");exitAct=fileMenu->addAction("E&xit");newAct=fileMenu->addAction("N&ew");//EditMenueditMenu=menuBar()->addMenu("&Edit");optionAct=editMenu->addAction("&Options");//HelpMenuhelpMenu=menuBar()->addMenu("&Help");aboutAct=helpMenu->addAction("&AboutMe");aboutQtAct=helpMenu->addAction("About&Qt");new和close的控制按鈕是由QToolBar和QButton制作。mainToolBar=addToolBar("Main");mainToolBar->setMovable(true);mainToolBar->setIconSize(QSize(32,32));//設(shè)置圖片和文字同時(shí)顯示mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);new_w=mainToolBar->addAction("New");new_w->setEnabled(true);new_w->setIcon(QIcon(":/new.jpeg"));shutdown=mainToolBar->addAction("Close");shutdown->setEnabled(true);shutdown->setIcon(QIcon(":/stop1.png"));myfra=newQFrame(this);myfra->setAutoFillBackground(true);myfra->setEnabled(false);myfra->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);img.load(":/head.jpg");mainToolBar->addWidget(myfra);connect(new_w,SIGNAL(triggered()),this,SLOT(createclient()));connect(shutdown,SIGNAL(triggered()),this,SLOT(close()));視頻的播放界面使用QImage來制作。img.load(":/uncon.png");addrlbl=newQLabel(QString("%1").arg(addr),this);addrlbl->setStyleSheet("color:red");addrlbl->setAlignment(Qt::AlignLeft);addrlbl->setFont(QFont("Monospace",18,QFont::Bold));shoot=newQPushButton(this);shoot->setIcon(QIcon(":/shoot.png"));shoot->setIconSize(QSize(32,32));shoot->setToolTip("takephotos");shoot->setFlat(true);shoot->setFixedSize(32,32);shoot->setEnabled(true);sta=newQPushButton(this);sta->setIcon(QIcon(":/pause.png"));sta->setIconSize(QSize(32,32));sta->setToolTip("startandpause");sta->setFlat(true);sta->setFixedSize(32,32);sta->setEnabled(true);clo=newQPushButton(this);clo->setIcon(QIcon(":/stop.png"));clo->setIconSize(QSize(32,32));clo->setToolTip("exit");clo->setFlat(true);clo->setFixedSize(32,32);clo->setEnabled(true);conbar=newQHBoxLayout;conbar->addWidget(shoot);conbar->addWidget(sta);conbar->addWidget(clo);QGridLayout*mainwindow=newQGridLayout;mainwindow->setContentsMargins(0,0,0,0);mainwindow->setVerticalSpacing(0);mainwindow->addWidget(fra,0,0);mainwindow->addWidget(addrlbl,1,0,Qt::AlignLeft|Qt::AlignBottom);//mainwindow->addLayout(conbar,1,1,1,0,Qt::AlignCenter);//mainwindow->addLayout(conbar,1,1,1,0,Qt::AlignHCenter);mainwindow->addLayout(conbar,1,1,1,1,Qt::AlignRight|Qt::AlignBottom);this->setLayout(mainwindow);this->resize(800,648);4.3.2錄像功能錄像功能主要是使用一個(gè)開源庫avilib實(shí)現(xiàn),avilib可以將連續(xù)的視頻流轉(zhuǎn)化為視頻文件,具體使用方法為:avi=AVI_open_output_file(filename.toAscii());//打開視頻流文件avi=AVI_open_output_file("./1234.avi");//設(shè)置文件名AVI_set_video(avi,320,240,8,"MJPG");//設(shè)置視頻流格式AVI_close(avi);//停止視頻錄制當(dāng)執(zhí)行停止視頻錄制的函數(shù)時(shí),avilib會(huì)自動(dòng)將已經(jīng)捕獲的視頻流壓縮成視頻文件。4.3.3拍照功能拍照功能主要使用QT下QImage控件下的save方法。由于客戶端的視頻顯示窗口是使用QImage實(shí)現(xiàn)的,而QImage的save方法可以將當(dāng)前顯示在QImage上的圖片保存為jpeg圖片文件,save方法的使用方法為:img.save("image.jpg","JPEG");執(zhí)行此函數(shù)后,QImage會(huì)自動(dòng)保存文件名為image.jpg的JPEG的圖片。4.4軟件使用流程說明4.4.1打開服務(wù)端首先,打開命令終端,找到執(zhí)行文件所在的目錄,在執(zhí)行語句后加兩個(gè)參數(shù),第一個(gè)參數(shù)為攝像頭所對(duì)應(yīng)的/dev下的文件的名稱,第二個(gè)參數(shù)為設(shè)定的端口號(hào)。如圖4-1所示:圖4-4服務(wù)端運(yùn)行命令在輸入命令后,點(diǎn)擊回車鍵輸入命令,如果運(yùn)行成功,會(huì)顯示出視頻拍攝設(shè)備的信息以及拍攝的視頻格式信息,如果未成功,則會(huì)打印出錯(cuò)誤原因,運(yùn)行成功后如圖4-2所示:圖4-5服務(wù)端運(yùn)行成功服務(wù)端運(yùn)行成功后,點(diǎn)擊客戶端圖標(biāo)打開客戶端,打開后界面如圖4-3所示:圖4-6客戶端運(yùn)行界面點(diǎn)擊工具欄上的New圖標(biāo)或點(diǎn)擊顯示區(qū)的new,會(huì)自動(dòng)創(chuàng)建一個(gè)顯示窗口,之后點(diǎn)擊第一個(gè)圖標(biāo),會(huì)跳出一個(gè)窗口,提示輸入IP地址,端口號(hào),以及設(shè)備名稱,如圖4-4所示:圖4-7輸入信息界面在輸入正確信息后點(diǎn)擊ok鍵,屏幕會(huì)顯示出系統(tǒng)捕獲的視頻,同時(shí)進(jìn)入錄像模式,系統(tǒng)會(huì)自動(dòng)將視頻保存為視頻文件。如圖4-5所示:圖4-8視頻開始顯示在播放時(shí),點(diǎn)擊暫停按鈕會(huì)讓畫面暫停,點(diǎn)擊拍照功能會(huì)將當(dāng)前顯示的圖像保存成圖片文件,方便顯示,點(diǎn)擊停止按鈕會(huì)停止視頻的播放。

結(jié)論通過歷時(shí)數(shù)月的研究和總結(jié),我終于完成了該系統(tǒng)的全部內(nèi)容,在這個(gè)過程中,我深刻的了解監(jiān)控系統(tǒng)的歷史和發(fā)展現(xiàn)狀,以及使用范圍,并利用所了解的知識(shí)成功的編寫出了一套界面簡單、功能全面,并具有實(shí)用價(jià)值的可運(yùn)行在嵌入式設(shè)備上的視頻監(jiān)控系統(tǒng)。不僅深刻了我對(duì)各項(xiàng)相關(guān)知識(shí)的理解,讓我學(xué)以致用,而且讓我從學(xué)習(xí)并實(shí)踐的過程中,深深的感受到了編程所帶給我快樂和成就感,讓我對(duì)編程更加熱愛。在編程的過程中,我也深刻的體會(huì)到了“書到用時(shí)方恨少”的深刻含義,發(fā)現(xiàn)問題、研究問題、分析問題、解決問題這一套流程看似容易,實(shí)踐起來卻是十分困難。努力尋找解決方法的艱難困苦,和完成系統(tǒng)時(shí)忍不住的欣喜若狂一樣,令人刻骨銘心。我深深的感覺到要尋找問題的答案絕非易事,也正因?yàn)槿绱耍嘈呐λ玫降慕Y(jié)果才顯得彌足珍貴。問題是沒有窮盡的,但是人挑戰(zhàn)問題的腳步卻永不停歇,只有保持著對(duì)解決問題的渴望和決心,才能更多更好的解決問題!本系統(tǒng)共實(shí)現(xiàn)了服務(wù)器端和客戶端兩個(gè)大模塊,其中服務(wù)器端的主要功能是從硬件設(shè)施上得到捕獲的視頻流,并傳輸?shù)娇蛻舳松?,由客戶端?shí)現(xiàn)對(duì)視頻的現(xiàn)實(shí)、保存、拍照等一系列功能,但是由于時(shí)間緊迫,本系統(tǒng)軟硬件設(shè)計(jì)還存在很多方面的不足之處,需要進(jìn)一步完善,因此本人希望在未來的工作中對(duì)一下方面加以改進(jìn):使用專門的視頻解碼芯片對(duì)圖像數(shù)據(jù)進(jìn)行壓縮,采用更適合網(wǎng)絡(luò)傳輸?shù)囊曨l壓縮格式MPEG-4圖像壓縮算法已達(dá)到更好的效果。將客戶端移植到Windows或者以Web方式來訪問服務(wù)器以滿足更多用戶的需求。增加視頻識(shí)別功能,自動(dòng)將無用的視頻刪除,只保留記錄關(guān)鍵信息的視頻。參考文獻(xiàn)StephenPrata.CPrimerPlus.人民郵電,2005W.RichardStevens.AdvancedProgrammingintheUNIXEnvironment.人民郵電,2008JasminBlanchette,C.GUI.Qt.4編程(第二版).電子工業(yè),2008韓少云.基于嵌入式Linux的Qt圖形程序?qū)崙?zhàn)開發(fā).北京航空航天大學(xué)出版社艾朱斯特.C++Qt設(shè)計(jì)模式(第二版).電子工業(yè)出版社,2012霍亞飛.Qt及QtQuick開發(fā)實(shí)戰(zhàn)精解.北京航空航天大學(xué)出版社,2012趙國安,郁斌,薛琳強(qiáng).基于Linux嵌入式原理與應(yīng)用開發(fā).清華大學(xué),2008梁篤國,網(wǎng)絡(luò)視頻監(jiān)控技術(shù)與智能應(yīng)用,人民郵電,2012NeilMatthewRichardStones.Linux程序設(shè)計(jì)(第四版).人民郵電出版社汪光華.智能安防:視頻監(jiān)控全面解析與實(shí)例分析.機(jī)械工業(yè)出版社,2012

致謝首先,非常感謝王羽老師和孟亮老師,在他們的悉心指導(dǎo)下,我的論文得以順利完成,在我完成畢業(yè)設(shè)計(jì)這段時(shí)間,王老師給我了我莫大的幫助與鼓舞,他知識(shí)淵博,思維縝密,工作踏實(shí)嚴(yán)謹(jǐn),潛移默化地熏陶著我們,鞭策著我們。而在論文完成期間,孟老師也給了我無數(shù)的指導(dǎo)和建議,讓我及時(shí)了解到自己的錯(cuò)誤并改正。在此,向王老師和孟老師表示由衷的感謝和崇高的敬意,今后都會(huì)將老師的諄諄教誨牢記于心!同時(shí),感謝所有熱情幫助過我,支持過我的所有老師同學(xué),他們在學(xué)習(xí)和生活上給了我莫大的幫助,讓我感受到了集體的溫暖與力量!

外文原文TheImplementationofEmbeddedImageAcquisitionBasedonV4L2LUYinli,YUHongli,ZHANGPengpengPhysicalElectronics,DepartmentofElectricalEngineeringofUniversityofSouthChinaHengyang,People’sRepublicofChinaluyinli198755@163.com,tianqing924@163.comAbstractInviewofthecurrentsituationofthelessembeddedLinuximageacquisitionapplicationbasedonV4L2(VideoforLinuxTwo),embeddedimageacquisitionsystembasedonV4L2isdesigned.S3C6410isadoptedashardwaredevelopmentplatformandLinuxassoftwareplatform.AfterloadingthedriverofCMOScameraOV9650andotherrelativedrivers,imageacquisitionapplicationsonthebasisofV4L2iscompiled,adoptingdoubleframebuffertoreduceCPUutilizationratetoaccomplishacquisitionandpreviewimage.Withthesizeof400×480andtheframerateof15framespersecond,thepicturecollectedshowsclearlyandithasgoodquality.Theexperimentresultindicatesthatthesystemhasgoodscalability,anditoffersanewideaforembeddedhand-helddevices.Keywords-V4L2;OV9650;imageacquisition;S3C6410;doubleframebuffer

I.INTRODUCTIONThevideoimageprocessingtechnologyiswidelyusedinelectronictechnologyandcomputertechnology.Theimagefromacameraorotherimageacquisitionequipmentsistransformedmathematicallytogettheinformationofdigitalimage;then,itisencoded,filtered,enhanced,recovered,compressed,storedandotherprocessesconductedbythecomputer;visualimagesandotherresultsfinallywillbereceived.Withthedevelopmentofembeddedtechnology,thecurrentimageacquisitiontechnologyistransformedfromtheanaloguetothedigital.Amongthem,embeddedimageacquisitionattractsmoreandmorepeople'sattentionforitssuperiorperformance.Embeddedmicroprocessoristhebestchoicefortheimageprocessingsystembecauseofitshighperformance,cost-effective,andlowpower.SamsungS3C6410hasARM11coreandadopts64/32bitinternalbusarchitecture.Italsoincludesmanypowerfulhardwareacceleratorssuchasmotionvideoprocessing,audioprocessandsoon.AnintegratedMFC(MultiFormatcodec)supportsencodinganddecodingofMPEG4/H.263/H.264anddecodingofVC1,soitisveryconvenientforimageprocessing.S3C6410isutilizedasthecoreoftheembeddedhardwareplatform,thepaperdesignsaimagecollectionapplicationsonbaseofV4L2.AfteraddingsupportforOV9650andV4L2tothekernelandtransplantingLinuxoperatingsystemtothehardwareplatform,imageacquisitionapplications,usingdoubleframebuffertoreducepowerconsumption,isdevisedonthebasisofV4L2,ultimately,picturewillbegatheredandshowedontheLCD.II.HARDWARESYSTEMSTRUCTUREThewholeimageacquisitionsystemmainlyincludesCMOScameraOV9650,corecontrollerS3C6410,LCDandothersperipherals.Thesystemhardwarestructureisshowedasfig

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論