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

?

基于ARM的實(shí)驗(yàn)室紅外感應(yīng)視頻報(bào)警系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

2014-11-19 00:32張?zhí)?/span>古桃強(qiáng)曹子成賀紹存黃志敏
電腦知識(shí)與技術(shù) 2014年30期

張?zhí)稀」盘覐?qiáng) 曹子成 賀紹存 黃志敏

摘要:基于ARM S3C6410平臺(tái),研究人員結(jié)合HR-S501人體熱感紅外模塊和攝像頭模塊,運(yùn)用H264視頻壓縮技術(shù)和百度云后臺(tái)上傳技術(shù),設(shè)計(jì)開(kāi)發(fā)了基于ARM的實(shí)驗(yàn)室紅外監(jiān)控視頻報(bào)警系統(tǒng)。實(shí)現(xiàn)了由紅外模塊實(shí)現(xiàn)監(jiān)控,攝像頭輔助進(jìn)行報(bào)警,傳輸視頻到移動(dòng)客戶端等的功能。

關(guān)鍵詞: ARM;視頻壓縮;紅外感應(yīng);百度云

中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)30-7085-05

計(jì)算機(jī)、通信、網(wǎng)絡(luò)控制及嵌入式等技術(shù)的飛速發(fā)展, 信息交換溝通領(lǐng)域的不斷擴(kuò)大, 覆蓋了從現(xiàn)場(chǎng)設(shè)備到控制、管理的各個(gè)層次。嵌人式系統(tǒng)因其穩(wěn)定性、實(shí)時(shí)性高的特點(diǎn),已在工業(yè)、國(guó)防、運(yùn)輸及航天等領(lǐng)域被廣泛地應(yīng)用。如果將嵌人式系統(tǒng)連接到應(yīng)用廣泛的網(wǎng)絡(luò)上, 則幾乎可以方便、低廉地將信息傳到世界的任何一個(gè)地方來(lái)進(jìn)行遠(yuǎn)程監(jiān)控。嵌人式遠(yuǎn)程監(jiān)控系統(tǒng)現(xiàn)已成為工業(yè)控制網(wǎng)絡(luò)重要的發(fā)展方向之一。基于的遠(yuǎn)程監(jiān)控系統(tǒng)是信息網(wǎng)絡(luò)與控制結(jié)合的產(chǎn)物,它借助網(wǎng)絡(luò)完成監(jiān)視控制任務(wù), 將監(jiān)視范圍擴(kuò)大到更大的空間, 進(jìn)一步推進(jìn)了控制技術(shù)向網(wǎng)絡(luò)化、分散化和開(kāi)放化的發(fā)展[1]。

目前,在高等院校中的實(shí)驗(yàn)室監(jiān)控系統(tǒng)都是采用傳統(tǒng)的安防系統(tǒng)設(shè)計(jì)的24H攝像頭錄像進(jìn)行監(jiān)控。這種方式不僅大大浪費(fèi)了攝像頭的有效工作時(shí)間,而且不間斷地工作也會(huì)縮短攝像頭的使用壽命。基于實(shí)驗(yàn)室等高校教室的監(jiān)控我們?cè)O(shè)計(jì)了一種更高效的監(jiān)控方式,此方案相比于傳統(tǒng)監(jiān)控系統(tǒng)不僅大大縮短了攝像頭的工作時(shí)間,而且大大提高了了攝像頭采集信息的有效性。同時(shí)此方案也將移動(dòng)技術(shù)融合到設(shè)計(jì)中來(lái),將適用范圍從傳統(tǒng)的實(shí)驗(yàn)室擴(kuò)展到家庭安防監(jiān)控的隊(duì)列,而移動(dòng)技術(shù)的加入更是將實(shí)時(shí)監(jiān)控信息反饋到目標(biāo)客戶端上,并且更加精準(zhǔn),更加方便。

本方案通過(guò)利用ARM S3C6410主板強(qiáng)大的硬件資源和LINUX系統(tǒng)設(shè)計(jì)了一套基于ARM的紅外感應(yīng)的視頻報(bào)警系統(tǒng)。本方案主要由紅外模塊完成全天候的監(jiān)控工作,攝像頭進(jìn)行輔助監(jiān)控,H264視頻壓縮技術(shù)進(jìn)行視頻壓縮,百度云實(shí)現(xiàn)視頻的移動(dòng)端對(duì)接。由于工業(yè)標(biāo)準(zhǔn)的紅外模塊不僅在強(qiáng)度上大大超過(guò)了傳統(tǒng)攝像頭的質(zhì)量,而人體熱感的立體監(jiān)控在監(jiān)控效果上面也大大超過(guò)了傳統(tǒng)攝像頭的監(jiān)控系統(tǒng)。而紅外探頭的小巧隱蔽的特點(diǎn)使得此監(jiān)控系統(tǒng)更容易布置和監(jiān)控[2]。

1 總體框架設(shè)計(jì)

整體技術(shù)方案由前端用戶端和后臺(tái)硬件端組成。前端軟件端主要是方便用戶對(duì)日常監(jiān)控的一些簡(jiǎn)單功能修改操作,主要的功能是登陸、修改信息、更改用戶權(quán)限。后臺(tái)硬件控制端主要包括了以下內(nèi)容:1) 視頻控制端:主要實(shí)現(xiàn)對(duì)已錄制視頻的壓縮截取與后臺(tái)轉(zhuǎn)發(fā); 2) 錄像控制:主要實(shí)現(xiàn)信號(hào)感應(yīng)還有錄像的控制; 3) 傳輸控制:主要實(shí)現(xiàn)選擇網(wǎng)絡(luò)環(huán)境與百度云存儲(chǔ); 4) 監(jiān)控管理:主要實(shí)現(xiàn)后臺(tái)數(shù)據(jù)的用戶存儲(chǔ)推送.

整個(gè)系統(tǒng)的主體設(shè)計(jì)框架圖如圖1所示。

2 硬件設(shè)計(jì)

對(duì)于整個(gè)硬件端的設(shè)計(jì)我們進(jìn)行了如下構(gòu)思,根據(jù)設(shè)計(jì)要求,我們將整個(gè)監(jiān)控端系統(tǒng)分成了以下幾個(gè)部分:

1) 監(jiān)控設(shè)備層,該部分主要包含了紅外模塊和攝像頭模塊,將此核心監(jiān)控部分獨(dú)立出來(lái)不僅便于設(shè)備的布線,也便于設(shè)備的正常運(yùn)轉(zhuǎn),一旦系統(tǒng)出問(wèn)題,這種分區(qū)式的結(jié)構(gòu)將大大減少查錯(cuò)的時(shí)間。

2) 網(wǎng)絡(luò)設(shè)備層,該部分主要包含了3G無(wú)線網(wǎng)卡,WIFI模塊等通信設(shè)備,該層主要負(fù)責(zé)監(jiān)控設(shè)備端的視頻信息的轉(zhuǎn)移,正是通過(guò)此層才得以實(shí)現(xiàn)監(jiān)控視頻直接到移動(dòng)端的目的。

3) 內(nèi)部控制管理層,主要以整個(gè)以太網(wǎng)、ARM11主控控制器組成。主要完成整個(gè)系統(tǒng)的信息搜集、處理和發(fā)布,同時(shí)承擔(dān)著對(duì)整個(gè)系統(tǒng)的統(tǒng)一管理和監(jiān)控。

硬件部分的ARM控制部分核心如下圖所示:

圖2 ARM硬件結(jié)構(gòu)圖

由ARM11核心微處理器連接各種輸入,通過(guò)CPLD(Complex Programmable Logic Device)復(fù)雜可編程邏輯器件實(shí)現(xiàn)諸如紅外,攝像頭,3G,WLAN等各種模塊的編程。有了ARM11處理器和CPLD的連接,從而全面實(shí)現(xiàn)了從信號(hào)輸入輸出,編程實(shí)現(xiàn)上來(lái)完成真正的ARM控制層[3]。

作為驅(qū)動(dòng)監(jiān)控設(shè)備的觸發(fā)點(diǎn),人體紅外的探測(cè)距離、靈敏度和穩(wěn)定性都是需要考慮的。在此我們選擇了HC-SR501人體紅外感應(yīng)模塊,它是基于紅外線技術(shù)的自動(dòng)控制模塊,采用德國(guó)原裝進(jìn)口LHI778探頭設(shè)計(jì),基于人體測(cè)量的設(shè)計(jì),適合用于實(shí)驗(yàn)室等安防報(bào)警的設(shè)計(jì),同時(shí)它的高精度探測(cè)距離較遠(yuǎn),靈敏度高,可靠性強(qiáng),軍工品質(zhì)也保證了所選模塊的使用壽命;攝像頭作為整個(gè)系統(tǒng)的核心輔助,作用在于當(dāng)紅外探測(cè)發(fā)現(xiàn)系統(tǒng)異常需要報(bào)警的時(shí)候,攝像頭能夠完成拍攝而且對(duì)拍攝的清晰度有一定的要求,由于我們使用了云技術(shù)將視頻同步到云端用移動(dòng)設(shè)備查看。所以攝像頭所拍視頻的大小要有一定的限制,因此我們選擇了主流130W像素的OV9650作為整個(gè)系統(tǒng)的攝像工具。不僅保證了其攝像的清晰度,也能保證在H264壓縮模式下視頻所占內(nèi)存的最小化。

3 軟件設(shè)計(jì)

程序主要是應(yīng)用嵌入式技術(shù)的后臺(tái)監(jiān)控,軟件起著輔助操作的作用,所以對(duì)于軟件的考慮僅僅是輔助用戶使用,為此設(shè)計(jì)軟件的第一層是用戶登陸關(guān)卡,第二層主要是常用的一些功能的融合。

3.1 常用功能融合

首先是常用的身份驗(yàn)證,除去常用的身份驗(yàn)證流程。

主要采用以下模式進(jìn)行常用功能模塊的嵌入,原理如4圖所示。

圖4采用了五個(gè)主要方式去實(shí)現(xiàn)整個(gè)軟件界面:其中開(kāi)啟監(jiān)控與開(kāi)啟3G,wifi、為用戶主動(dòng)開(kāi)啟裝置,不僅可以檢驗(yàn)設(shè)備狀態(tài),也可以隨意切換網(wǎng)絡(luò)模式進(jìn)行監(jiān)控的調(diào)試。

其余三種功能主要是為了方便用戶更好的使用本軟件。其中添加百度云賬號(hào)方便了用戶直接更改移動(dòng)端的賬號(hào),即使用戶變更賬號(hào)也不用通過(guò)后臺(tái)去修改。控制錄制時(shí)間主要是方便用戶的視頻監(jiān)控的時(shí)間間隔,便于用戶使用自己喜歡的時(shí)間間隔進(jìn)行收集,程序默認(rèn)的錄制時(shí)間為3S。監(jiān)控管理部分主要便于用戶進(jìn)行前臺(tái)的日常維護(hù),即不通過(guò)后臺(tái)也能完成軟件功能檢查,可用性維護(hù)等功能的實(shí)現(xiàn)。

其中我們是用的百度云上傳技術(shù),其中部分代碼為:

int main(int argc, char **argv) {

int ret = 0;

if (argc < 2) {

usage();

return 1;}

char *command = argv[1];

argc —;

argv ++;

curl_global_init(CURL_GLOBAL_ALL);

if (strcmp(command, "info") == 0) {

ret = command_info(argc, argv);

} else if (strcmp(command, "ls") == 0) {

ret = command_ls(argc, argv);

} else if (strcmp(command, "upload") == 0 || strcmp(command, "up") == 0) {

ret = command_upload(argc, argv);

} else if (strcmp(command, "download") == 0 || strcmp(command, "down") == 0) {

ret = command_download(argc, argv);

} else if (strcmp(command, "mv") == 0) {

ret = command_move_or_copy(argc, argv, "mv");

} else if (strcmp(command, "cp") == 0) {

ret = command_move_or_copy(argc, argv, "cp");

} else if (strcmp(command, "rm") == 0) {

ret = command_remove(argc, argv);

} else {

color_log(COLOR_LOG_ERROR, "未知命令?。躰");

usage();

ret = 1;

}if (api != NULL) {

BaiduPCS_Free(api);

}curl_global_cleanup();

return ret;

}

百度云主要使用了CURL技術(shù),這是一種命令行方式下工作的開(kāi)源文件傳輸工具,然后使用一種輕量級(jí)數(shù)據(jù)交換個(gè)格式JSON(JavaScript Object Notation),使用它與百度的PCS接口交互,從而在開(kāi)發(fā)板上直接用對(duì)存儲(chǔ)在百度網(wǎng)盤(pán)里的東西進(jìn)行操作[4]。

以下來(lái)是H264即錄像時(shí)間控制和壓縮的部分代碼:

int main(int argc, char **argv)

{int mytime;

if(argv[1] == NULL)

mytime=3;

else

mytime=atoi(argv[1]);

FBOpen();

system("clear");

fflush(stdin);

int fd =open("/dev/adc", 0);

if (fd < 0) return 0;

int value = -1;

while(1)

{while(value<400)

{ value = -1;

char buffer[30] = "";

int len = read(fd, buffer, sizeof buffer -1);

if (len > 0)

{buffer[len] = '\0';

sscanf(buffer, "%d", &value);

//printf("%d\n",value);

}}

try

{struct timeval start,end;

// TFrameBuffer FrameBuffer;

TVideo Video;

int timeuse = 0;

int oldTimeUse = 0;

TH264Encoder Encoder;

gettimeofday( &start, NULL );

for (;;)

{Video.FetchPicture();

Encoder.Encode(Video);

//FrameBuffer.DrawRect(Video);

gettimeofday( &end, NULL );

timeuse = 1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;

timeuse /= 1000000;

if (oldTimeUse != timeuse)

{//printf(".\n");endprint