張?zhí)稀」盘覐姟〔茏映伞≠R紹存 黃志敏
摘要:基于ARM S3C6410平臺,研究人員結(jié)合HR-S501人體熱感紅外模塊和攝像頭模塊,運用H264視頻壓縮技術(shù)和百度云后臺上傳技術(shù),設(shè)計開發(fā)了基于ARM的實驗室紅外監(jiān)控視頻報警系統(tǒng)。實現(xiàn)了由紅外模塊實現(xiàn)監(jiān)控,攝像頭輔助進行報警,傳輸視頻到移動客戶端等的功能。
關(guān)鍵詞: ARM;視頻壓縮;紅外感應;百度云
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2014)30-7085-05
計算機、通信、網(wǎng)絡(luò)控制及嵌入式等技術(shù)的飛速發(fā)展, 信息交換溝通領(lǐng)域的不斷擴大, 覆蓋了從現(xiàn)場設(shè)備到控制、管理的各個層次。嵌人式系統(tǒng)因其穩(wěn)定性、實時性高的特點,已在工業(yè)、國防、運輸及航天等領(lǐng)域被廣泛地應用。如果將嵌人式系統(tǒng)連接到應用廣泛的網(wǎng)絡(luò)上, 則幾乎可以方便、低廉地將信息傳到世界的任何一個地方來進行遠程監(jiān)控。嵌人式遠程監(jiān)控系統(tǒng)現(xiàn)已成為工業(yè)控制網(wǎng)絡(luò)重要的發(fā)展方向之一?;诘倪h程監(jiān)控系統(tǒng)是信息網(wǎng)絡(luò)與控制結(jié)合的產(chǎn)物,它借助網(wǎng)絡(luò)完成監(jiān)視控制任務, 將監(jiān)視范圍擴大到更大的空間, 進一步推進了控制技術(shù)向網(wǎng)絡(luò)化、分散化和開放化的發(fā)展[1]。
目前,在高等院校中的實驗室監(jiān)控系統(tǒng)都是采用傳統(tǒng)的安防系統(tǒng)設(shè)計的24H攝像頭錄像進行監(jiān)控。這種方式不僅大大浪費了攝像頭的有效工作時間,而且不間斷地工作也會縮短攝像頭的使用壽命?;趯嶒炇业雀咝=淌业谋O(jiān)控我們設(shè)計了一種更高效的監(jiān)控方式,此方案相比于傳統(tǒng)監(jiān)控系統(tǒng)不僅大大縮短了攝像頭的工作時間,而且大大提高了了攝像頭采集信息的有效性。同時此方案也將移動技術(shù)融合到設(shè)計中來,將適用范圍從傳統(tǒng)的實驗室擴展到家庭安防監(jiān)控的隊列,而移動技術(shù)的加入更是將實時監(jiān)控信息反饋到目標客戶端上,并且更加精準,更加方便。
本方案通過利用ARM S3C6410主板強大的硬件資源和LINUX系統(tǒng)設(shè)計了一套基于ARM的紅外感應的視頻報警系統(tǒng)。本方案主要由紅外模塊完成全天候的監(jiān)控工作,攝像頭進行輔助監(jiān)控,H264視頻壓縮技術(shù)進行視頻壓縮,百度云實現(xiàn)視頻的移動端對接。由于工業(yè)標準的紅外模塊不僅在強度上大大超過了傳統(tǒng)攝像頭的質(zhì)量,而人體熱感的立體監(jiān)控在監(jiān)控效果上面也大大超過了傳統(tǒng)攝像頭的監(jiān)控系統(tǒng)。而紅外探頭的小巧隱蔽的特點使得此監(jiān)控系統(tǒng)更容易布置和監(jiān)控[2]。
1 總體框架設(shè)計
整體技術(shù)方案由前端用戶端和后臺硬件端組成。前端軟件端主要是方便用戶對日常監(jiān)控的一些簡單功能修改操作,主要的功能是登陸、修改信息、更改用戶權(quán)限。后臺硬件控制端主要包括了以下內(nèi)容:1) 視頻控制端:主要實現(xiàn)對已錄制視頻的壓縮截取與后臺轉(zhuǎn)發(fā); 2) 錄像控制:主要實現(xiàn)信號感應還有錄像的控制; 3) 傳輸控制:主要實現(xiàn)選擇網(wǎng)絡(luò)環(huán)境與百度云存儲; 4) 監(jiān)控管理:主要實現(xiàn)后臺數(shù)據(jù)的用戶存儲推送.
整個系統(tǒng)的主體設(shè)計框架圖如圖1所示。
2 硬件設(shè)計
對于整個硬件端的設(shè)計我們進行了如下構(gòu)思,根據(jù)設(shè)計要求,我們將整個監(jiān)控端系統(tǒng)分成了以下幾個部分:
1) 監(jiān)控設(shè)備層,該部分主要包含了紅外模塊和攝像頭模塊,將此核心監(jiān)控部分獨立出來不僅便于設(shè)備的布線,也便于設(shè)備的正常運轉(zhuǎn),一旦系統(tǒng)出問題,這種分區(qū)式的結(jié)構(gòu)將大大減少查錯的時間。
2) 網(wǎng)絡(luò)設(shè)備層,該部分主要包含了3G無線網(wǎng)卡,WIFI模塊等通信設(shè)備,該層主要負責監(jiān)控設(shè)備端的視頻信息的轉(zhuǎn)移,正是通過此層才得以實現(xiàn)監(jiān)控視頻直接到移動端的目的。
3) 內(nèi)部控制管理層,主要以整個以太網(wǎng)、ARM11主控控制器組成。主要完成整個系統(tǒng)的信息搜集、處理和發(fā)布,同時承擔著對整個系統(tǒng)的統(tǒng)一管理和監(jiān)控。
硬件部分的ARM控制部分核心如下圖所示:
圖2 ARM硬件結(jié)構(gòu)圖
由ARM11核心微處理器連接各種輸入,通過CPLD(Complex Programmable Logic Device)復雜可編程邏輯器件實現(xiàn)諸如紅外,攝像頭,3G,WLAN等各種模塊的編程。有了ARM11處理器和CPLD的連接,從而全面實現(xiàn)了從信號輸入輸出,編程實現(xiàn)上來完成真正的ARM控制層[3]。
作為驅(qū)動監(jiān)控設(shè)備的觸發(fā)點,人體紅外的探測距離、靈敏度和穩(wěn)定性都是需要考慮的。在此我們選擇了HC-SR501人體紅外感應模塊,它是基于紅外線技術(shù)的自動控制模塊,采用德國原裝進口LHI778探頭設(shè)計,基于人體測量的設(shè)計,適合用于實驗室等安防報警的設(shè)計,同時它的高精度探測距離較遠,靈敏度高,可靠性強,軍工品質(zhì)也保證了所選模塊的使用壽命;攝像頭作為整個系統(tǒng)的核心輔助,作用在于當紅外探測發(fā)現(xiàn)系統(tǒng)異常需要報警的時候,攝像頭能夠完成拍攝而且對拍攝的清晰度有一定的要求,由于我們使用了云技術(shù)將視頻同步到云端用移動設(shè)備查看。所以攝像頭所拍視頻的大小要有一定的限制,因此我們選擇了主流130W像素的OV9650作為整個系統(tǒng)的攝像工具。不僅保證了其攝像的清晰度,也能保證在H264壓縮模式下視頻所占內(nèi)存的最小化。
3 軟件設(shè)計
程序主要是應用嵌入式技術(shù)的后臺監(jiān)控,軟件起著輔助操作的作用,所以對于軟件的考慮僅僅是輔助用戶使用,為此設(shè)計軟件的第一層是用戶登陸關(guān)卡,第二層主要是常用的一些功能的融合。
3.1 常用功能融合
首先是常用的身份驗證,除去常用的身份驗證流程。
主要采用以下模式進行常用功能模塊的嵌入,原理如4圖所示。
圖4采用了五個主要方式去實現(xiàn)整個軟件界面:其中開啟監(jiān)控與開啟3G,wifi、為用戶主動開啟裝置,不僅可以檢驗設(shè)備狀態(tài),也可以隨意切換網(wǎng)絡(luò)模式進行監(jiān)控的調(diào)試。
其余三種功能主要是為了方便用戶更好的使用本軟件。其中添加百度云賬號方便了用戶直接更改移動端的賬號,即使用戶變更賬號也不用通過后臺去修改??刂其浿茣r間主要是方便用戶的視頻監(jiān)控的時間間隔,便于用戶使用自己喜歡的時間間隔進行收集,程序默認的錄制時間為3S。監(jiān)控管理部分主要便于用戶進行前臺的日常維護,即不通過后臺也能完成軟件功能檢查,可用性維護等功能的實現(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, "未知命令!\n");
usage();
ret = 1;
}if (api != NULL) {
BaiduPCS_Free(api);
}curl_global_cleanup();
return ret;
}
百度云主要使用了CURL技術(shù),這是一種命令行方式下工作的開源文件傳輸工具,然后使用一種輕量級數(shù)據(jù)交換個格式JSON(JavaScript Object Notation),使用它與百度的PCS接口交互,從而在開發(fā)板上直接用對存儲在百度網(wǎng)盤里的東西進行操作[4]。
以下來是H264即錄像時間控制和壓縮的部分代碼:
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