国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Linux及OK6410環(huán)境下視頻監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)

2019-06-06 04:21張海嬌孫文勝
軟件導(dǎo)刊 2019年3期

張海嬌 孫文勝

摘 要:隨著城市建設(shè)數(shù)字化、智慧化、管理遠(yuǎn)程化、生產(chǎn)異地化,安防和智能管理技術(shù)擁有越來越廣闊的發(fā)展前景。針對監(jiān)控產(chǎn)品技術(shù)升級需求,提出了一種以O(shè)K6410嵌入式ARM開發(fā)板為硬件平臺,以Linux-3.6.0為軟件平臺的視頻監(jiān)控系統(tǒng)。描述了整個系統(tǒng)架構(gòu)以及系統(tǒng)軟硬件設(shè)計,重點介紹了V4L2視頻框架設(shè)計以及CMOS攝像頭實現(xiàn)圖像捕捉的過程,并創(chuàng)新設(shè)計了循環(huán)鏈表緩沖池,明顯緩解了輸入輸出同步問題,提高了程序健壯性。實際應(yīng)用表明,該系統(tǒng)能較好地為多個用戶同時提供實時視頻服務(wù),具有較高的穩(wěn)定性和可擴(kuò)展性,并擁有日志記錄功能。

關(guān)鍵詞:視頻監(jiān)控系統(tǒng);Linux;OK6410;V4L2;緩沖池

DOI:10. 11907/rjdk. 182098

中圖分類號:TP319文獻(xiàn)標(biāo)識碼:A文章編號:1672-7800(2019)003-0121-05

0 引言

隨著科技的不斷發(fā)展和人們安防意識的提升,網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)得到了廣泛應(yīng)用 [1]。網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)主要經(jīng)歷了3個發(fā)展階段:第一階段為已經(jīng)退出歷史舞臺的模擬監(jiān)控系統(tǒng)[2];第二階段為目前小范圍使用的PC機(jī)插卡式監(jiān)控系統(tǒng)[3];第三階段為當(dāng)今普遍使用的嵌入式視頻監(jiān)控系統(tǒng)[4]。

目前,網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)逐步向移動化和全數(shù)字化演進(jìn)[5],移動視頻監(jiān)控[6]、基于IPV的視頻監(jiān)控[7]、滿足數(shù)字化家庭需求的視頻監(jiān)控[8]均以嵌入式技術(shù)為依托。隨著嵌入式處理器性能的不斷提高,嵌入式視頻監(jiān)控系統(tǒng)應(yīng)用越來越廣泛。

為在嵌入式芯片上進(jìn)行多種方式擴(kuò)展,本系統(tǒng)選用資源容量和圖像處理能力較為強(qiáng)大的OK6410開發(fā)板作為硬件平臺,利用嵌入式Linux操作系統(tǒng)內(nèi)核搭建軟件平臺,為多個用戶同時提供實時視頻服務(wù)。系統(tǒng)在V4L2視頻框架[9]中新定義了攝像頭捕捉結(jié)構(gòu)體,創(chuàng)新設(shè)計了V412框架操作,實現(xiàn)用戶查看監(jiān)控視頻中重要畫面的抓圖功能;同時創(chuàng)新設(shè)計了適用于本系統(tǒng)的循環(huán)鏈表緩沖池,以及采用適當(dāng)?shù)木€程同步機(jī)制對緩沖池進(jìn)行讀寫操作,使系統(tǒng)可以明確分離輸入輸出設(shè)備,增強(qiáng)程序健壯性,提高系統(tǒng)模塊化水平;充分利用OK6410的開發(fā)資源,加入日志記錄功能,實現(xiàn)系統(tǒng)的調(diào)試控制,保障運(yùn)行穩(wěn)定性,為日后系統(tǒng)升級擴(kuò)展提供支持。

1 系統(tǒng)總體設(shè)計

本系統(tǒng)采用C/S(客戶/服務(wù))架構(gòu)[10],通過個人PC上通用的http服務(wù),用戶不需要安裝客戶端即可在網(wǎng)頁上獲取監(jiān)控服務(wù)[11]。以因特網(wǎng)作為通信平臺,傳輸html文件表單和視頻流數(shù)據(jù),結(jié)合相關(guān)傳感和嵌入式技術(shù),有效獲取實時視頻數(shù)據(jù),同時利用高效穩(wěn)定的Linux操作系統(tǒng)內(nèi)核管理硬件平臺,使系統(tǒng)擁有強(qiáng)大功能。

系統(tǒng)有前端采集、視頻處理、網(wǎng)絡(luò)服務(wù) [12] 3大子系統(tǒng),通過前端采集系統(tǒng)將CMOS攝像頭[13]采集的視頻數(shù)據(jù)導(dǎo)入視頻處理系統(tǒng),經(jīng)過處理的視頻數(shù)據(jù)更適合存儲和傳輸。當(dāng)有客戶登錄服務(wù)器時,被處理的視頻數(shù)據(jù)導(dǎo)入網(wǎng)絡(luò)服務(wù)系統(tǒng),客戶即可通過網(wǎng)頁查看實時監(jiān)控視頻。

1.1 系統(tǒng)硬件設(shè)計

本監(jiān)控系統(tǒng)采用基于三星S3C6410處理器ARM 11的飛凌公司OK6410開發(fā)板,此開發(fā)板具有更高的主頻和豐富的外設(shè),提供LCD 接口、Camera 輸入接口、4路串口、SDIO接口、100M 網(wǎng)卡、USB2.0-OTG接口、USB Host 接口、音頻輸入輸出接口、按鍵接口等硬件資源[14],適用于對性能和處理能力有更高要求的嵌入式系統(tǒng)應(yīng)用場合。系統(tǒng)主控機(jī)硬件由電源模塊、按鍵設(shè)備模塊、串口設(shè)備模塊、網(wǎng)絡(luò)設(shè)備模塊、數(shù)據(jù)存儲單元模塊和視頻監(jiān)控模塊組成,硬件設(shè)計如圖1所示。

1.2 系統(tǒng)軟件設(shè)計

系統(tǒng)軟件平臺采用功能強(qiáng)大、穩(wěn)定安全的Linux操作系統(tǒng),使用的Linux內(nèi)核版本為3.6.0。前期在OK6410開發(fā)板上完成Linux操作系統(tǒng)的移植、U-BOOT移植、文件系統(tǒng)制作與移植以及交叉編譯環(huán)境的搭建[15]。系統(tǒng)軟件設(shè)計要滿足以下幾個功能:①通過軟件編程,控制CMOS攝像頭傳感器,實現(xiàn)視頻數(shù)據(jù)的采集;②完成文件系統(tǒng)搭建以及FLASH和 SD卡存儲設(shè)備驅(qū)動,使所采集視頻信息可以保存到本地存儲設(shè)備;③完成基于Linux的TCP并發(fā)服務(wù)器搭建[16];④在軟件編程上考慮使用對應(yīng)的硬件視頻編解碼控制器驅(qū)動軟件代碼,通過S3C6410的H.264硬件編碼器[17]和PP硬件多媒體轉(zhuǎn)換器[18],完成視頻硬件H.264編碼和縮放轉(zhuǎn)碼功能;⑤因為系統(tǒng)需要使用按鍵作為系統(tǒng)功能控制輸入設(shè)備,所以在軟件設(shè)計上需要加上對應(yīng)按鍵驅(qū)動。系統(tǒng)軟件功能結(jié)構(gòu)設(shè)計如圖2所示。

2 系統(tǒng)功能模塊設(shè)計

2.1 V4L2視頻框架設(shè)計

V4L2視頻框架只能在Linux操作系統(tǒng)上運(yùn)行,是針對uvc免驅(qū)USB設(shè)備的編程框架,主要用于設(shè)置攝像頭的頻率、幀率、視頻壓縮格式等圖像參數(shù),完成對USB攝像頭設(shè)備圖像數(shù)據(jù)的采集,在APP編程中主要使用該框架提供的API和驅(qū)動命令工作。該框架的工作模式如圖3所示。

針對v4l2_camera.h新定義了描述攝像頭捕捉的結(jié)構(gòu)體CAMERA_CAPABILITY,該結(jié)構(gòu)體定義如下:

typedef struct

{? /* output param */

int cam_fd;

unsigned int width;

unsigned int height;

unsigned long int file_length;

unsigned long int data_size;

int isstreaming;????????????????? // state

void *mem[NB_BUFFER];?????? // 內(nèi)核視頻緩沖區(qū)長度

struct v4l2_capability cap;??????? // 攝像頭查詢驅(qū)動能力

struct v4l2_fmtdesc fmtdesc;????? // 攝像頭支持的視頻格式

struct v4l2_format format;??????? // 攝像頭視頻參數(shù)

struct v4l2_requestbuffers req;???? // 前端數(shù)據(jù)緩沖區(qū)轉(zhuǎn)換物理地址

struct v4l2_buffer buf;?????????? // 前端視頻緩沖區(qū)

}CAMERA_CAPABILITY;

系統(tǒng)創(chuàng)新設(shè)計了v4l2框架操作,在v4l2_camera.c源文件中實現(xiàn)了攝像頭捕捉,相關(guān)操作實現(xiàn)如下:

extern int Camera_Init(CAMERA_CAPABILITY *cam)??? // 初始化v4l2框架

extern int Camera_Start(CAMERA_CAPABILITY *cam)?? // 開啟視頻捕捉

extern int Camera_Stop(CAMERA_CAPABILITY *cam)??? // 停止視頻捕捉

extern int Camera_Grab(CAMERA_CAPABILITY *cam

#if CAM_PHOTO

,

char *photo_name,

int volatile *photo_enable_flag

#endif

)? // 循環(huán)捕捉一幀

extern int Camera_Exit(CAMERA_CAPABILITY *cam)??? // 退出視頻捕捉

操作流程如下:

(1)調(diào)用Camera_Init(&cam);初始化攝像頭捕捉程序。

(2)調(diào)用Camera_Grab(&cam,PHOTONAME,&photo_post);進(jìn)行一幀圖像的捕獲,其中第二和第三個參數(shù)在用戶配置宏CAM_PHOTO非0時有效。PHOTONAME為保存圖片的名字,photo_post為是否拍照的flag標(biāo)準(zhǔn),非0代表保存當(dāng)前幀圖片,保存格式默認(rèn)為BMP圖片文件格式。

(3) 調(diào)用Camera_Exit(&cam);退出攝像頭視頻捕捉。

2.2 循環(huán)鏈表緩沖池設(shè)計

本系統(tǒng)創(chuàng)新設(shè)計了循環(huán)單向鏈表緩沖池,使用該緩沖池可明確分離輸入輸出設(shè)備,提高系統(tǒng)模塊化水平,很簡單地增加輸入或輸出設(shè)備數(shù)量使之同時工作。循環(huán)單向鏈表緩沖池結(jié)構(gòu)如圖4所示。

循環(huán)鏈表緩沖池設(shè)計方案如下:

在queue.h中新定義了描述循環(huán)鏈表節(jié)點NODE和緩沖池的結(jié)構(gòu)體MyQueue:

typedef struct signal_loop_chain

{

unsigned int * dataaddr;

unsigned long int len;

struct signal_loop_chain *next;

}NODE;

typedef struct _QUEUE

{

NODE *queue_head;

NODE *queue_end;

int n;

}MyQueue;

在queue.c源文件中定義了功能函數(shù)的實現(xiàn),具體如下:

extern NODE *Create_loop_chain(int n);??? // 循環(huán)鏈表緩沖池創(chuàng)建

extern int Quere_Show();? // 打印當(dāng)前鏈表信息,調(diào)試用

extern int Quere_Read_Buf(S3C_HD_JPEG_DECODE_INFO *to

#if WEB_CAP

,WEB_STREAM_CAP *web

#endif

); ? // 讀鏈表某一數(shù)據(jù)塊

extern int Quere_Write_Buf(CAMERA_CAPABILITY *in);? // 寫鏈表某一空塊

extern int Free_loop_chain(); // 鏈表注銷資源

設(shè)計鏈表后,還需要利用存儲空間塊儲存數(shù)據(jù),故使用OK6410的硬件cached內(nèi)存分配器,獲取8塊cached虛擬內(nèi)存區(qū)域,在鏈表初始化時依次插入到鏈表中。

采用循環(huán)鏈表緩沖池優(yōu)化了存儲,同時使用多線程編程,極大優(yōu)化了系統(tǒng)執(zhí)行靈活度,提高了系統(tǒng)模塊化程度,但是隨之產(chǎn)生的是線程同步問題。

在Linux線程同步中,有POSIX無名信號量、POSIX有名信號量、線程互斥鎖、線程讀寫鎖、線程條件變量等幾種同步機(jī)制[19]。綜合比較這幾種同步機(jī)制,本系統(tǒng)采用POSIX無名信號量和線程讀寫鎖作為緩沖池的同步機(jī)制,使用POSIX無名信號量用于讀寫緩沖池同步。由于多用戶的網(wǎng)絡(luò)數(shù)據(jù)傳輸模型與單一寫多個同時讀取的同步模型相似,故使用線程讀寫鎖用于多用戶網(wǎng)絡(luò)數(shù)據(jù)流傳輸,從而實現(xiàn)系統(tǒng)穩(wěn)定的同步機(jī)制。

3 系統(tǒng)調(diào)試與測試

本系統(tǒng)調(diào)試工作主要有:串口調(diào)試、攝像頭數(shù)據(jù)捕捉調(diào)試、網(wǎng)絡(luò)調(diào)試、HTTP服務(wù)器調(diào)試。

3.1 串口調(diào)試

本系統(tǒng)需要串口進(jìn)行Linux命令和調(diào)試信息傳輸。OK6410開發(fā)板自帶COM19針串口接口,并在系統(tǒng)軟件設(shè)計中留有DEBUG配置宏和config.h配置文件,故只需在電腦上開啟串口軟件,同時在配置文件中打開DEBUG宏,即可在串口中打印系統(tǒng)調(diào)試日志信息。

3.2 攝像頭數(shù)據(jù)捕捉調(diào)試

本系統(tǒng)使用羅技C270高清USB攝像頭,該款攝像頭支持USB2.0,最大分辨率為1 024×768,感光元件為CMOS。在使用前打開總線熱插拔功能,注冊USB攝像頭驅(qū)動程序以及V4L2驅(qū)動。

在設(shè)計調(diào)試中發(fā)現(xiàn),OK6410開發(fā)板的USB Host是1.1接口,Linux在識別USB1.1接口后,強(qiáng)制減緩了V4L2框架的最大傳輸速率,導(dǎo)致V4L2框架識別的YUV格式分辨率只有160×120。為了得到較為正常的分辨率,系統(tǒng)使用了經(jīng)過壓縮的MJPEG圖像,其分辨率可以達(dá)到800×600,基本滿足設(shè)計要求。開啟攝像頭捕捉調(diào)試宏,通過調(diào)試信息查看攝像頭捕捉子系統(tǒng)是否正常工作。經(jīng)上板測試,該攝像頭捕捉子系統(tǒng)工作正常。

3.3 網(wǎng)絡(luò)調(diào)試

OK6410開發(fā)板帶有RJ-45網(wǎng)絡(luò)變壓器,開發(fā)板使用192.168.0.232作為自身的IP地址,使用網(wǎng)線將其與路由器相連,然后在電腦上使用PING命令檢測網(wǎng)絡(luò)層是否可以建立連接。經(jīng)上板測試,該開發(fā)板可與電腦正常通信。

3.4 HTTP服務(wù)器調(diào)試

在調(diào)試HTTP服務(wù)器前,需要將自行開發(fā)的幾個HTML文件放入BOA指定的www文件夾中,BOA默認(rèn)使用index.html作為主頁[20]。調(diào)試時使用boa命令打開BOA服務(wù)器守護(hù)進(jìn)程,然后利用IP地址即可登陸服務(wù)器頁面,如圖5所示。

輸入賬號密碼后,CGI程序?qū)⑼ㄟ^數(shù)據(jù)庫查詢賬號密碼是否符合要求。如果符合要求則跳轉(zhuǎn)到控制頁面,如圖6所示。

按下“視頻預(yù)覽選擇”中的視頻圖標(biāo)后,將進(jìn)入視頻實時監(jiān)控頁面,如圖7所示。

按下“視頻預(yù)覽選擇”中的照相機(jī)圖標(biāo)后進(jìn)入拍照演示頁面,如圖8所示。

4 結(jié)語

本系統(tǒng)利用嵌入式系統(tǒng)優(yōu)點,在OK6410開發(fā)板基礎(chǔ)上設(shè)計了一種基于Linux操作系統(tǒng)的視頻監(jiān)控系統(tǒng),同時創(chuàng)新設(shè)計了V412框架操作,實現(xiàn)了攝像頭抓拍功能,并創(chuàng)新定義使用了循環(huán)鏈表緩沖池,以及采用POSIX無名信號量和線程讀寫鎖的同步機(jī)制,極大優(yōu)化了系統(tǒng)執(zhí)行靈活度,提高了軟件模塊化水平。上板調(diào)試與測試表明:本系統(tǒng)穩(wěn)定可靠,圖像實時準(zhǔn)確,日志記錄功能方便調(diào)試,符合設(shè)計預(yù)期要求,同時系統(tǒng)可擴(kuò)展性良好,對安防監(jiān)控系統(tǒng)設(shè)計有借鑒作用。

參考文獻(xiàn):

[1] NAERING N, VENETIANER PL, LIPTON A. The evolution of video surveillance:an overview[J]. Machine Vision and Application,2008,19(5):279-290.

[2] 馬瑜晨,許全宜. 基于模擬和數(shù)字技術(shù)相結(jié)合的視頻監(jiān)控系統(tǒng)[J]. 電子技術(shù)與軟件工程,2018,63(6):62-63.

[3] RAJESH N, SAROJADEVI H. Emerging trends in video surveillance application[C]. Proceedings of International Conference on Software and Computer Application,2011:125-128.

[4] 錢曉東. 攝像機(jī)監(jiān)控的發(fā)展與應(yīng)用[J]. 中國安防,2013(1):56-60.

[5] 王若涵. 網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)現(xiàn)狀與發(fā)展趨勢研究[J]. 科技與創(chuàng)新,2018(1):79-80.

[6] 薛樹濱. 基于嵌入式Linux的移動視頻監(jiān)控系統(tǒng)[D]. 濟(jì)南:山東大學(xué),2014.

[7] 陶祥亞,仲兆滿. IPv6環(huán)境下嵌入式視頻監(jiān)控系統(tǒng)設(shè)計與實驗性研究[J]. 智能建筑與智慧城市,2017(4):44-48.

[8] 王菲. 嵌入式智能家居控制系統(tǒng)的設(shè)計[J]. 電子技術(shù)與軟件工程,2017(16):193-194.

[9] 郝俊,孟傳良. 基于V4L2的ARM11 USB視頻采集終端的設(shè)計與實現(xiàn)[J]. 貴州大學(xué)學(xué)報:自然科學(xué)報,2011,28(4):74-78.

[10] 劉科. 基于C/S的局域網(wǎng)內(nèi)遠(yuǎn)程控制系統(tǒng)的設(shè)計與實現(xiàn)[D]. 成都:電子科技大學(xué),2015.

[11] ANTONY J,MATHURIA D S,DATTA T S,et al. Development of intelligent instruments with embedded HTTP servers for control and data acquisition in a cryogenic setup——the hardware, firmware,and software implementation[J]. Review of Scientific Instruments,2015,86(12): 131-132.

[12] WANG Y, PANG Z Y, WANG S, et al. Design and implementation of embedded wireless video monitoring system[J]. Journal of Chongqing University of Technology, 2015, 29(4):67-72.

[13] 劉磊. 基于CMOS圖像傳感器的無線視頻監(jiān)控系統(tǒng)設(shè)計[D]. 上海:上海師范大學(xué),2015.

[14] JIA Y. S3C6410(OK6410開發(fā)板介紹) [EB/OL]. https://blog.csdn.net/qq_33265533/article/details/53048380

[15] PAN L,WANG W. Design of the remote video monitoring system platform[J]. Ieri Procedia,2012,2(4):62-68.

[16] 徐成杰. 創(chuàng)建高效的多用戶TCP服務(wù)器[J]. 計算機(jī)應(yīng)用,2002,22(2):110-112.

[17] 肇啟龍. 基于網(wǎng)絡(luò)和H.264的視頻監(jiān)控系統(tǒng)設(shè)計[J]. 電子科技,2015,28(2):113-118.

[18] 甄聰聰,趙磊. 基于RTSP和H.264的嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)[J]. 科技信息,2014, 10(1):121-128.

[19] 吳宇佳,浦偉,周妍. Linux下多線程數(shù)據(jù)采集研究與實現(xiàn)[J]. 信息安全與通信保密,2012:90-94.

[20] ZHAO H, XIAO C, ZHUO L, et al. The design of embedded video system based BOA server[C].? International Conference on Computer Science&Service System,2012: 483-486.

(責(zé)任編輯:杜能鋼)

布尔津县| 龙陵县| 英山县| 凤庆县| 台州市| 察隅县| 杨浦区| 昌宁县| 施甸县| 保德县| 泗洪县| 孟州市| 富顺县| 甘洛县| 积石山| 大兴区| 武胜县| 肥城市| 准格尔旗| 嘉禾县| 友谊县| 西贡区| 襄城县| 津南区| 新丰县| 元江| 杭州市| 盐源县| 建平县| 广饶县| 玉溪市| 卢龙县| 崇明县| 义马市| 资中县| 曲水县| 威宁| 甘德县| 渑池县| 敦化市| 屯留县|