• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      嵌入式動態(tài)圖像監(jiān)測系統(tǒng)設(shè)計與實現(xiàn)

      2013-09-12 01:49:54謝發(fā)榮陳宇星
      微處理機 2013年1期
      關(guān)鍵詞:瀏覽器網(wǎng)頁嵌入式

      謝發(fā)榮,張 力,陳宇星

      (昆明理工大學(xué)信息工程與自動化學(xué)院計算機科學(xué)與技術(shù)系,昆明 650500)

      1 監(jiān)控系統(tǒng)總體方案

      系統(tǒng)主要由圖像采集端、嵌入式服務(wù)器、服務(wù)器端顯示、監(jiān)控終端4部分組成。系統(tǒng)結(jié)構(gòu)如圖1所示。圖像采集端采用USB攝像頭進行現(xiàn)場監(jiān)控采集,嵌入式服務(wù)器移植Boa為Web服務(wù)器,用C語言編寫CGI程序放在Web服務(wù)器上,監(jiān)控客戶端瀏覽器通過HTTP協(xié)議請求CGI網(wǎng)頁,Web服務(wù)器接收到客戶端請求,啟動圖像采集程序,采集程序可以把采集到的圖片直接保存成文件,可以用JPEG壓縮處理,也可以把圖片顯示在服務(wù)器端LCD上,同時Web服務(wù)器解析CGI網(wǎng)頁后給客戶端應(yīng)答,在客戶端網(wǎng)頁上就能顯示動態(tài)圖像。此外可以在客戶端網(wǎng)頁上可視化地配置服務(wù)端采集程序圖像幀率fps(frame per second),圖像分辨率,圖像壓縮比,圖像顯示格式,服務(wù)器端LCD上是否實時顯示動態(tài)圖像等。

      圖1 系統(tǒng)結(jié)構(gòu)圖

      2 硬件、操作系統(tǒng)及驅(qū)動程序

      系統(tǒng)采用的處理器是Samsung公司生產(chǎn)的ARM體系16/32位ARM920T的RISC處理器S3C2440A。ARM的主要特點是高性能,低功耗,低價格,符合嵌入式產(chǎn)品需求。系統(tǒng)用到的外設(shè)主要有USB攝像頭和一個LCD等。有關(guān)該處理器的詳細信息可到Samsung公司官網(wǎng)查看技術(shù)文檔。操作系統(tǒng)內(nèi)核主目錄上的Makefile文件中有menuconfig,uImage,zImage等目標(biāo),在命令行上鍵入 make menuconfig得到一個可視化選擇界面,可以選擇要參與編譯的選項,系統(tǒng)中使用到USB攝像頭,因此要注意選擇USB驅(qū)動支持和V4L2驅(qū)動選項,選擇后保存可以生成.config文件,再鍵入make uImage可生成內(nèi)核鏡像文件,利用bootloader把內(nèi)核鏡像文件下載到開發(fā)板的NandFlash,在u-boot的引導(dǎo)下操作系統(tǒng)就可以運行起來了[2]。

      3 V4L2采集圖像以及JPEG壓縮

      3.1 V4L2 采集圖像

      Linux平臺下第一代視頻編程的接口是Video for Linux(V4L),是為統(tǒng)一和規(guī)范各種視頻設(shè)備引入的統(tǒng)一接口,是各設(shè)備提供商在為設(shè)備編寫驅(qū)動時遵循的標(biāo)準(zhǔn),也是編寫視頻應(yīng)用程序要遵循的標(biāo)準(zhǔn)。在Linux C下這個標(biāo)準(zhǔn)以頭文件的形式放于Linux內(nèi)核中。在Linux中視頻設(shè)備是設(shè)備文件,可以像訪問普通文件一樣對其讀寫,攝像頭在/dev/video0下。因為系統(tǒng)中USB攝像頭采用V4L2標(biāo)準(zhǔn),所以以下主要介紹V4L2視頻采集接口的編程方法。采集過程定義了一個結(jié)構(gòu)如下。

      typedef struct VideoBuffer{

      void*start;//指向開始位置

      size_t length;//長度

      }VideoBuffer;//VideoBuffer類型定義一個緩沖,用來存放映射地址

      采集流程如圖2所示。初始化包括打開設(shè)備文件、查詢設(shè)備是否具有特定的能力、設(shè)置圖片屬性(如圖片亮度、對比度)、設(shè)置圖片采集幀率。全部緩沖入隊列的目的是讓緩沖隊列的個數(shù)為申請到的緩沖個數(shù),一般為5個,緩沖個數(shù)太小則會影響采集速度,太大會占用太多內(nèi)存。申請緩沖并映射包括向驅(qū)動申請緩沖,查詢緩沖的大小和偏移量,定義一個VideoBuffer*類型數(shù)據(jù)并分配地址,根據(jù)緩沖大小和偏移量將驅(qū)動的緩沖映射到用戶區(qū)域。采用內(nèi)存映射操作內(nèi)存就相當(dāng)于操作文件,對于讀取大量數(shù)據(jù)的文件是相當(dāng)有效的,而采用直接讀寫文件的方式讀寫太頻繁,造成讀寫效率低下速度慢[3-4]。是否可讀利用select函數(shù)監(jiān)控設(shè)備是否可讀,若不可讀或監(jiān)控超時則結(jié)束程序,若可讀則從隊列里取出一個數(shù)據(jù)處理,再入隊列以保持緩沖個數(shù)。

      圖2 V4L2采集流

      3.2 JPEG 圖像壓縮

      實驗使用的USB攝像頭只支持MJPEG格式,是一種動態(tài)壓縮格式,相對JPEG壓縮而言,可在一幀內(nèi)對一部分壓縮,壓縮后傳輸,最后再補齊未壓縮的,而JPEG壓縮是對整個畫面壓縮,對每一幀的壓縮也是采用JPEG壓縮。因 V4L2中沒有提供對MJPEG壓縮的設(shè)置,分辨率640x480的一幀數(shù)據(jù)達90kB,若直接對其傳輸無法滿足實時性要求,所以對MJPEG數(shù)據(jù)的處理是用JPEG算法對其解壓,再用某些壓縮算法壓縮,系統(tǒng)仍采用JPEG壓縮,在不影響視覺情況下,一幀大小達10KB左右。在Linux下可采用jpeglib開源庫對數(shù)據(jù)進行解壓和壓縮處理,解壓處理過程數(shù)據(jù)流向是從文件到內(nèi)存,壓縮過程數(shù)據(jù)流向是從內(nèi)存到文件。JPEG解壓過程和壓縮過程可閱讀jpeglib的文檔。因程序在ARM Linux平臺上運行,應(yīng)該將jpeglib庫做交叉編譯,并將編譯過的庫拷貝到ARM Linux下。

      4 圖像顯示

      4.1 利用SDL庫將圖片顯示到LCD上

      Simple Direct Media Layer(簡稱SDL)是一個跨平臺的多媒體庫,是直接控制底層的多媒體硬件接口。SDL在嵌入式平臺下使用FrameBuffer驅(qū)動。SDL是在GNU LGPL Version 2下發(fā)布的,這意味著可對SDL源代碼修改而不用公開代碼,免費用于商業(yè)軟件,libSDL庫可從官網(wǎng)下載[9-10]。用 SDL庫可直接將BMP圖片顯示在LCD上,但要顯示JPEG圖片,先要把它解壓才能顯示到LCD上,JPEG解壓過程如上節(jié)所述。根據(jù)SDL庫的開發(fā)文檔,顯示過程為先創(chuàng)建屏幕層,再創(chuàng)建圖層,在圖層上放JPEG解壓后的數(shù)據(jù),再把圖層放到屏幕層上即可顯示,循環(huán)更改圖像層的數(shù)據(jù),即可實現(xiàn)動態(tài)顯示圖像。

      4.2 CGI C程序設(shè)計將圖片到網(wǎng)頁上

      CGI(Common Gateway Interface)是通用網(wǎng)關(guān)接口,是Web服務(wù)器提供交互式信息服務(wù)的標(biāo)準(zhǔn)接口。Web服務(wù)器上執(zhí)行CGI程序后把輸出結(jié)果(特定功能的HTML代碼)給瀏覽器顯示[1]。CGI可用任何語言來編寫,但由于C語言是編譯執(zhí)行的,執(zhí)行速度快,并且具有很好的移植性,所以嵌入式Linux平臺下用C語言寫CGI是首選。Web服務(wù)器通過調(diào)用 CGI程序?qū)崿F(xiàn)和 Web瀏覽器的交互,POST方式時CGI通過標(biāo)準(zhǔn)輸入STDIN從Web服務(wù)器獲得輸入數(shù)據(jù),GET方式時CGI通過環(huán)境變量從Web服務(wù)器獲得輸入數(shù)據(jù),CGI處理輸入的數(shù)據(jù)后,Web服務(wù)器將CGI執(zhí)行結(jié)果(HTML文件)通過stdout給瀏覽器。編寫CGI程序前,要移植Web服務(wù)器Boa,它是一個小巧、高性能的自由軟件,廣泛應(yīng)用于嵌入式系統(tǒng)[6、8],移植過程可參考其文檔。系統(tǒng)中瀏覽器和Web服務(wù)器交互的方法采用GET方法。根據(jù)以上介紹,C語言編寫CGI程序時用函數(shù)getenv()獲得環(huán)境變量作為輸入數(shù)據(jù),CGI各個環(huán)境變量的作用可參考相關(guān)文獻[1],環(huán)境變量REQUEST_METHOD為瀏覽器和Web服務(wù)器交互方法,QUERY_STRING為GET方法時通過URL傳遞參數(shù)字符串[5、7]。輸出 html給 Web服務(wù)器解析的方法有兩種,第一種,用標(biāo)準(zhǔn)輸出函數(shù)如printf(),puts(),fprintf(),fwrite()等把HTML代碼輸出到標(biāo)準(zhǔn)輸出stdout,前兩個函數(shù)就是直接輸出到標(biāo)準(zhǔn)輸出,而后兩個函數(shù)要指明stdout,Web服務(wù)器對其解析并返回給瀏覽器。第二種,對于現(xiàn)成的HTML文件,CGI提供了重定向輸出,printf("Location: ../image.htm ")。系統(tǒng)采用第二種方法,把動態(tài)顯示圖片網(wǎng)頁做成image.htm。

      以下制作顯示圖像頁面image.htm。動態(tài)顯示圖片的方法很多。方法一使用Java Applet不斷刷新;方法二用<mata content-type=refresh content=n>定時n秒刷新整個頁面;方法三用JavaScript腳本語言定時調(diào)用網(wǎng)頁重載函數(shù)setInterval(“window.location.reload()”,600)[8]; 方 法 四 使 用 框 架IFRAM。比較這些方法,方法一可實現(xiàn)動態(tài)圖像流暢顯示,由于Applet程序在瀏覽器的虛擬機中運行,開發(fā)者須確??蛻舳税惭b適當(dāng)版本的Java運行環(huán)境。方法二和三都定時刷新整個頁面,使Web服務(wù)器負擔(dān)加重且圖片顯示不流暢。方法四因采用局部刷新頁面,效果比方法二、三好,Web服務(wù)器負擔(dān)減輕,但實現(xiàn)復(fù)雜,需要兩個以上網(wǎng)頁嵌套。系統(tǒng)利用JavaSctipt和圖像預(yù)加載技術(shù)實現(xiàn)動態(tài)圖像顯示。

      圖片預(yù)加載技術(shù)是指在顯示圖片前從服務(wù)器上加載圖片,顯示圖片時直接從瀏覽器緩存里顯示而不必從服務(wù)器下載。用JavaScript實現(xiàn)圖片預(yù)加載的原理是在HTML中建一個<img>圖片,在內(nèi)存中建立10個Image對象(因在圖像采集端采集到的圖像0.jpg…9.jpg)。預(yù)加載時指定每一張圖像的src屬性,因每次預(yù)加載都要從服務(wù)器端下載,所以在src屬性的地址后面加上隨機數(shù)Math.random()防止預(yù)加載使用緩存。在顯示圖片前都調(diào)用預(yù)加載函數(shù),并指明HTML<img>的src屬性就為預(yù)加載圖片地址,二者地址要相同,否則顯示圖片時瀏覽器又要從服務(wù)器端下載圖片。可適當(dāng)調(diào)整調(diào)用預(yù)加載函數(shù)時間間隔來達到最佳效果,系統(tǒng)使用800ms。比較而言,使用Javascript和圖像預(yù)加載技術(shù)是一種實現(xiàn)簡單又效果明顯的方法。把以上圖像預(yù)加載的過程寫到image.htm文件,當(dāng)瀏覽器請求開始監(jiān)控時就重定向到image.htm實現(xiàn)了動態(tài)圖像監(jiān)控。CGI程序調(diào)用監(jiān)控程序,為確保只有一個監(jiān)控程序運行,利用了文件鎖技術(shù),把監(jiān)控程序和一個文件相關(guān)聯(lián),建立一個文件并把監(jiān)控程序的進程號寫入文件,在第一次調(diào)用監(jiān)控程序時給文件加排它鎖,若第二次啟動讀寫該文件內(nèi)容就會被拒絕,則不會再啟動監(jiān)控程序,做到了只有一個監(jiān)控程序運行。

      5 實驗結(jié)果

      在瀏覽器中輸入網(wǎng)址即可打開監(jiān)控主頁,可設(shè)置系統(tǒng)參數(shù),如采集分辨率、亮度、幀率等,單擊開始監(jiān)控按鈕進入監(jiān)控頁面。此時開發(fā)板上的LCD和網(wǎng)頁都在動態(tài)的顯示監(jiān)控圖像。如圖3所示,LCD在顯示動態(tài)圖像,網(wǎng)頁上也在顯示動態(tài)圖像。單擊停止按鈕,操作系統(tǒng)發(fā)送一個停止信號給采集進程,監(jiān)控結(jié)束。

      圖3 動態(tài)圖像監(jiān)控效果

      6 結(jié) 束 語

      系統(tǒng)利用V4L2編程對USB攝像頭采集圖片,把采集到的圖片用JPEG算法壓縮,使圖片壓縮比可控,并用SDL庫將采集到的圖像顯示在LCD液晶屏上,同時利用JavaScript和圖片預(yù)加載技術(shù)實現(xiàn)了網(wǎng)頁動態(tài)圖像的流暢顯示,可在瀏覽器端觀看動態(tài)的、實時的圖像。除了利用Ajax技術(shù)刷新網(wǎng)頁中的局部圖像,圖片預(yù)加載技術(shù)也是刷新局部圖像的好方法。這種方法是一種簡單、經(jīng)濟、可行的方法,既可實現(xiàn)動態(tài)監(jiān)控,又可大大減短開發(fā)周期。下一步可以把采集到的圖像壓縮成視頻傳輸或存儲,或?qū)D像進行分析以實現(xiàn)智能的數(shù)字監(jiān)控系統(tǒng)。

      [1]黃光奇.CGI編程指南[M].北京:電子工業(yè)出版社,1999.

      [2]方興.基于S3C2410智能家居監(jiān)控系統(tǒng)[J].信息技術(shù)科技資訊,2010(25):1.

      [3]劉升,趙晶晶,范秀麗.基于V4L2的嵌入式視頻監(jiān)控系統(tǒng)[J].微計算機應(yīng)用,2011(1):3-5.

      [4]張軍衛(wèi),韓佩富,矯春海.基于嵌入式Web服務(wù)器的視頻監(jiān)控系統(tǒng)設(shè)計[J].計算機安全,2011(2):3.

      [5]王芳,王凱,王先超.基于ARM-Linux與DS18B20的溫度監(jiān)測系統(tǒng)[J].計算機工程與設(shè)計,2010(12):3-4.

      [6]劉輝,劉毅敏.嵌入式Web服務(wù)器的研究與設(shè)計[J].數(shù)字通信,2011(4):3-4.

      [7]胡書衛(wèi),陸培倫.一種基于Linux的嵌入式視頻監(jiān)控系統(tǒng)實現(xiàn)[J].安防科技,2009(1):2-3.

      [8]齊躍峰,劉宇鵬.基于ARM的智能家居視頻監(jiān)控系統(tǒng)[J].電子技術(shù),2010(4):2.

      [9]張偉偉.基于ARM的嵌入式視頻監(jiān)控系統(tǒng)設(shè)計[D].南京:南京理工大學(xué),2007.

      [10]方衛(wèi)民.基于ARM的嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)[D].北京:北京郵電大學(xué),2008.

      猜你喜歡
      瀏覽器網(wǎng)頁嵌入式
      反瀏覽器指紋追蹤
      電子制作(2019年10期)2019-06-17 11:45:14
      基于CSS的網(wǎng)頁導(dǎo)航欄的設(shè)計
      電子制作(2018年10期)2018-08-04 03:24:38
      搭建基于Qt的嵌入式開發(fā)平臺
      基于URL和網(wǎng)頁類型的網(wǎng)頁信息采集研究
      電子制作(2017年2期)2017-05-17 03:54:56
      嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
      環(huán)球瀏覽器
      再見,那些年我們嘲笑過的IE瀏覽器
      網(wǎng)頁制作在英語教學(xué)中的應(yīng)用
      電子測試(2015年18期)2016-01-14 01:22:58
      10個必知的網(wǎng)頁設(shè)計術(shù)語
      Altera加入嵌入式視覺聯(lián)盟
      宣城市| 石狮市| 开封县| 武夷山市| 建平县| 历史| 汕尾市| 临邑县| 无极县| 府谷县| 鄢陵县| 沧州市| 丰都县| 绥滨县| 拉孜县| 鄱阳县| 甘德县| 鲜城| 清新县| 高邑县| 本溪| 博兴县| 隆德县| 木兰县| 湛江市| 洱源县| 顺平县| 安化县| 麻栗坡县| 灵寿县| 东源县| 常熟市| 日照市| 南雄市| 牟定县| 阿拉善盟| 利津县| 綦江县| 秭归县| 资兴市| 平原县|