基于Android的MJPEG網(wǎng)絡(luò)攝像機設(shè)計
2 系統(tǒng)軟件設(shè)計
2.1 網(wǎng)絡(luò)攝像機軟件設(shè)計
搭建攝像機需要Linux系統(tǒng)環(huán)境,首先移植Bootloader,對Linux 2.6.32內(nèi)核進(jìn)行裁剪,加載Linux UVC(USB video device class)驅(qū)動及相關(guān)驅(qū)動,將編譯好的Linux系統(tǒng)鏡像燒寫到ARM板Nand Flash中,對Bootloader沒置啟動引導(dǎo)地址,即完成軟件運行環(huán)境搭建。
分析網(wǎng)絡(luò)攝像機性能需求與拓展性,須滿足下列條件:
◆視頻監(jiān)控實時性;
◆支持多客戶端同時連接;
◆圖像識別算法或預(yù)留接口;
◆功能模塊化滿足后期開發(fā)可擴展。
因此,采用多線程架構(gòu)與互斥鎖機制來保證實時性、模塊化的思想設(shè)計代碼結(jié)構(gòu)。軟件程序主流程如圖3所示。本文引用地址:http://www.ex-cimer.com/article/149360.htm
其中主要實現(xiàn)如下功能。
①初始化Linux V4L2接口,必須按照V4L2標(biāo)準(zhǔn)結(jié)構(gòu)初始化結(jié)構(gòu)體,其中包括struct v412_capability cap;struct v412_format fmt;struct v412_buffer buf;struct v412_requestbuffers rb;struct v412_streamparm setfps。此外將視頻設(shè)備名、視頻寬度、視頻高度、幀率、視頻格式和抓取方法傳遞給函數(shù)init_videoIn(struct vdIn*vd,char*device,int width,intheight,int fps,int format,int grabmethod)實現(xiàn)初始化。值得注意的是眾多USB camera并不支持JPEG格式視頻流直接抓取,針對YUYV格式抓取卻有廣泛支持。后期進(jìn)行圖像識別算法操作時直接分析YUYV原始圖像數(shù)據(jù),將節(jié)省JPEG壓縮數(shù)據(jù)轉(zhuǎn)換為原始圖像數(shù)據(jù)的大量運算開銷,因此采用YUYV抓取模式。
②創(chuàng)建核心圖像處理線程。在該線程內(nèi)實現(xiàn):抓取功能。
◆UVC設(shè)備單幀抓取,uvcGrab(struct vdIn*vd)函數(shù)實現(xiàn)單幀YUYV格式的原始圖像拷貝到內(nèi)存,采用高效的mmap內(nèi)存映射方法讀??;
◆JPEG核心算法實現(xiàn),JPEG壓縮算法占用大量CPU時間,下一小節(jié)將詳細(xì)討論。
③創(chuàng)建套接字接口。為實現(xiàn)多用戶同時連接網(wǎng)絡(luò)攝像機,必須采用socket服務(wù)線程,每當(dāng)有新用戶連接同時產(chǎn)生一個新線程與之對應(yīng),實現(xiàn)多用戶端同步監(jiān)控。
④搭建基于Web瀏覽器訪問方式的Web主頁。嵌入式設(shè)備資源有限,輕量級的Web Server主要有:Boa、Httpd、Thttpd等。本設(shè)計選用開源的Boa、交叉編譯Boa源碼配置boa.conf文件,配置系統(tǒng)etc自啟動shell加入Boa程序,將編寫HTML頁面文件放入系統(tǒng)中對應(yīng)的www目錄后即可正常工作。
2.2 MJPEG壓縮算法研究與實現(xiàn)
MJPEG(Motion Joint Photographic Experts Group)視頻編碼格式,把運動的視頻序列作為連續(xù)的靜止圖像來處理,這種壓縮方式單獨完整地壓縮每一幀,編輯過程中可隨機存儲每一幀,可進(jìn)行精確到幀的編輯。MJPEG單幀壓縮算法為JPEG(Joint Photographic Experts Group)。人眼視覺生理特性決定眼睛對構(gòu)成圖像的不同頻率成分具有不同的敏感度。JPEG壓縮是有損壓縮,但損失的部分是人類視覺不容易察覺到的部分,利用眼睛對色彩域中的高頻信息部分不敏感的特點,節(jié)省大量需要處理的數(shù)據(jù)信息。一幀原始圖像數(shù)據(jù)對其進(jìn)行JPEG算法編碼過程分兩大部分:
①空間冗余度,去除視覺上的多余信息;
②結(jié)構(gòu)(靜態(tài))冗余度,去除數(shù)據(jù)本身的多余信息。
JPEG編碼中主要涉及包括:DCT、zigzag編碼、量化、RLE編碼、范式Huffman編碼、DC(直流分量)的編碼。JPEG編碼流程如圖4所示。
評論