張夢娜,于鴻洋
(電子科技大學(xué)電子科學(xué)技術(shù)研究院,四川成都 611731)
近年來,社會不斷進(jìn)步,人們生活水平不斷提高,人們對于隱私保護(hù)的觀念逐漸增強(qiáng),視頻監(jiān)控系統(tǒng)在教育、銀行、交通、醫(yī)療等各行各業(yè)有著廣泛的應(yīng)用。而視頻監(jiān)控系統(tǒng)的核心就是云臺控制[1]。傳統(tǒng)的云臺控制是通過手動摁下云臺上相應(yīng)的按鈕而進(jìn)行的,這對監(jiān)控人員的地理位置有很大的限制,帶來了許多不便之處,故通過網(wǎng)絡(luò)遠(yuǎn)程控制云臺逐漸成為視頻監(jiān)控的一種新趨勢。網(wǎng)絡(luò)控制云臺由于受到網(wǎng)絡(luò)本身的一些約束可能導(dǎo)致發(fā)送命令延時或錯誤。綜合以上優(yōu)劣,本文提出了一種基于C/S模式的遠(yuǎn)程云臺控制系統(tǒng)的設(shè)計方案,對于其中的網(wǎng)絡(luò)延時或者發(fā)送命令錯誤都有相應(yīng)的處理。同時加入了客戶端的權(quán)限控制,使得云臺控制更加高效實用。
本系統(tǒng)設(shè)計的是一種基于客戶端/服務(wù)器(C/S)模式的遠(yuǎn)程云臺控制系統(tǒng)。監(jiān)控設(shè)備采用的是云臺攝像頭一體機(jī)(內(nèi)置解碼器,支持協(xié)議為PELCO-D/P自適應(yīng))。服務(wù)器通過網(wǎng)絡(luò)可以與多種平臺(windows,linux,ios,andriod)的客戶端交互,并可以通過權(quán)限的判定有選擇性地讓權(quán)限高的客戶端擁有云臺控制的優(yōu)先權(quán)??蛻舳耸紫韧ㄟ^SOCKET通信與服務(wù)器建立連接,再根據(jù)自定義的協(xié)議向服務(wù)器發(fā)送云臺控制命令。當(dāng)客戶端連接上服務(wù)器之后,服務(wù)器首先判定此客戶端是否具有控制權(quán)限。若有則將客戶端命令轉(zhuǎn)化為相應(yīng)的云臺控制命令,再通過串口向云臺發(fā)送指令;若無則斷開連接。發(fā)送的指令通過一體機(jī)內(nèi)的內(nèi)置解碼器解釋最終控制云臺全方位轉(zhuǎn)動以及聚焦縮放。云臺控制系統(tǒng)框圖[2]如圖1所示。
圖1 云臺控制系統(tǒng)框圖
取下球機(jī)外罩,可以看到內(nèi)置解碼器電路板上有兩組撥碼開關(guān)。其中一組有4位,前兩位是控制協(xié)議開關(guān),后兩位是波特率開關(guān)。另外一組有8位,是地址撥碼開關(guān)。撥碼開關(guān)撥到“ON”表示“1”,撥到“OFF”表示“0”。由于本系統(tǒng)采用PELCO-D協(xié)議,波特率為2 400 Baud,故根據(jù)產(chǎn)品說明書將第一組撥碼開關(guān)設(shè)置為0000,第二組撥碼開關(guān)設(shè)置為00000001(即地址為16進(jìn)制01H)。
數(shù)據(jù)格式包括1位起始位、8位數(shù)據(jù)、1位停止位,無效驗位。波特率為2 400 Baud。命令格式如圖2所示。
圖2 命令格式
該協(xié)議中所有數(shù)值都為十六進(jìn)制數(shù);同步字節(jié)始終為FFH;地址碼為攝像機(jī)的邏輯地址號,地址范圍00H~FFH,可以在設(shè)備中設(shè)置;指令碼表示不同的動作;數(shù)據(jù)碼1,2分別表示水平、垂直方向速度(00~3FH),F(xiàn)FH表示“turbo”速度;校驗碼 =MOD[(Byte2+Byte3+Byte4+Byte5+Byte6)/100H]。
命令字1和命令字2設(shè)置如表1所示。
表1 命令字設(shè)置
例如,欲控制云臺向左旋轉(zhuǎn),可發(fā)送一串16進(jìn)制碼FF010004FF0004。
首先打開串口,串口對應(yīng)的設(shè)備文件名為“/dev/ttyS0”,參數(shù)O_RDWR表示可讀可寫,即
然后設(shè)置串口屬性,SetSpeed函數(shù)設(shè)置波特率為2 400 Baud,SetParity函數(shù)設(shè)置數(shù)據(jù)格式為8位數(shù)據(jù),1位停止位,無校驗位,即
接下來輸入命令碼,保存在字符串strCommOut中,即CheckSum函數(shù)用來計算校驗碼。
最后向串口發(fā)送命令,即
為了方便交互,自定義了一組5位的0/1字符串作為客戶端發(fā)送的命令。0/1字符串是一種非常簡單的組合,而固定長度的字符串在網(wǎng)絡(luò)通信中能夠通過一定的機(jī)制保證收發(fā)完整。因為read()和write()函數(shù)每一次接收和發(fā)送數(shù)據(jù)長度不能確定。故在本系統(tǒng)的設(shè)計中,通過函數(shù)recv()和send()來收發(fā)數(shù)據(jù)。設(shè)置兩個函數(shù)的最大接收字節(jié)數(shù)和最大發(fā)送字節(jié)數(shù)MAXSIZE為5,并且將函數(shù)的第4個參數(shù)設(shè)置為MSG_WAITALL,這樣可以保證每次接收和發(fā)送的數(shù)據(jù)長度到達(dá)5時才返回,由此收發(fā)的數(shù)據(jù)長度得到了保證。而收發(fā)的數(shù)據(jù)內(nèi)容正確與否則采用錯誤重傳機(jī)制,即如果客戶端發(fā)送的命令不在自定義的協(xié)議范圍內(nèi),則服務(wù)器端返回消息告知客戶端命令發(fā)送不正確,請重新發(fā)送命令。
而在服務(wù)器端為了便于識別其含義,宏定義一組字母字符串來代表0/1字符串(如:#define ACTION_BEGIN“11111”),以增加程序的可讀性。表2所示為具體的交互協(xié)議。
表2 客戶端與服務(wù)器交互協(xié)議
客戶端與服務(wù)器的交互具體分為三大模塊:SOCKET通信模塊、身份驗證模塊和命令處理模塊。
3.2.1 SOCKET通信模塊
通信流程分為客戶端和服務(wù)器端,使用TCP協(xié)議進(jìn)行通信。首先是服務(wù)器端建立套接字socket(),綁定地址和端口bind(),然后監(jiān)聽端口listen(),阻塞直到有客戶端連接。客戶端也要建立套接字socket(),然后主動發(fā)起連接connect(),服務(wù)器端則接受連接accept()。最后客戶端和服務(wù)器端經(jīng)過TCP的“3次握手”建立連接,此時就可以相互通信發(fā)送和接收數(shù)據(jù)了。如果某一方調(diào)用close()主動關(guān)閉連接,則接下來會經(jīng)歷TCP的“4次握手”釋放連接。
3.2.2 身份驗證模塊
首先服務(wù)器端不斷地接受不同客戶端的連接請求并將它們置于連接隊列,然后再進(jìn)行身份驗證。此前需要預(yù)先進(jìn)行權(quán)限等級的設(shè)置,本系統(tǒng)的設(shè)計中用戶PRIOR具有最高權(quán)限(唯一),其他注冊用戶具有相同的權(quán)限。定義一個標(biāo)志位flag,當(dāng)flag為2時表明此時最高權(quán)限的用戶在控制云臺,當(dāng)flag為1時表明此時一般權(quán)限的用戶在控制云臺,當(dāng)flag為0時表明沒有用戶在控制云臺。flag的初始值置為0。當(dāng)服務(wù)器端與客戶端建立了連接之后,首先讀取客戶端的信息(用戶名和密碼),然后在數(shù)據(jù)庫中查詢有無此用戶。若無,則向此客戶端發(fā)送信息“You have no permission and can not control!”并斷開連接;若是一般用戶,如果此時flag為0則直接給予控制權(quán)限并將flag置1,如果flag不為0則主動斷開連接;若是PRIOR用戶,如果此時flag為0則直接給予控制權(quán)限并將flag置2,如果flag為1則剝奪正在控制云臺的用戶的權(quán)限,強(qiáng)制斷開連接,將控制權(quán)限交給PRIOR用戶,并將flag置2。身份驗證流程如圖3所示。
3.2.3 命令處理模塊
如果當(dāng)前客戶端得到控制云臺的權(quán)限,則通過與服務(wù)器事先協(xié)商好的交互協(xié)議向服務(wù)器發(fā)送命令。若服務(wù)給予了用戶控制權(quán)限后,則創(chuàng)建一個子進(jìn)程fork()來處理控制命令,將客戶端的命令轉(zhuǎn)化為對應(yīng)的云臺控制命令,再向串口寫命令,從而控制云臺全方位轉(zhuǎn)動。在控制過程中,開始時客戶端必須要向服務(wù)發(fā)送控制碼11111(宏定義ACTION_BEGIN,表明開始控制云臺),控制結(jié)束后客戶端必須要向服務(wù)器發(fā)送控制碼00000(宏定義ACTION_END,表明結(jié)束控制云臺)。此模塊中同時設(shè)定了超時機(jī)制,若超過5 min客戶端未向服務(wù)器端發(fā)送任何命令,服務(wù)器端就強(qiáng)制斷開連接。命令處理流程如圖4所示。
圖3 身份驗證流程
圖4 命令處理流程
本系統(tǒng)設(shè)計的是一種基于客戶端/服務(wù)器(C/S)模式的遠(yuǎn)程云臺控制系統(tǒng)。監(jiān)控設(shè)備選擇的是保千里迷你紅外高速球(云臺和攝像頭一體機(jī),內(nèi)置解碼器[7-8],支持協(xié)議為PELCO-D/P自適應(yīng),10倍光學(xué)變焦,可設(shè)置預(yù)置點,帶紅外夜視功能)。服務(wù)器配置fedora14操作系統(tǒng),客戶端是基于ios平臺開發(fā)的。服務(wù)器端連接RS-232規(guī)格的串口線,中間通過RS-232/RS-485轉(zhuǎn)換器連接到云臺RS-485規(guī)格的串口線上。服務(wù)器與客戶端通過網(wǎng)絡(luò)進(jìn)行通信。
圖5所示為云臺控制演示系統(tǒng)。其中左邊為客戶端設(shè)計的云臺控制界面(ios手機(jī)版)。右上方為服務(wù)器端控制界面,當(dāng)與客戶端連接之后,會顯示客戶端的IP地址,然后顯示開始控制消息,接著打印客戶端發(fā)送的控制指令,最后顯示結(jié)束控制消息。右下方為客戶端的反饋界面,開始和結(jié)束控制都會收到服務(wù)器端發(fā)送的相應(yīng)的提示消息。圖6為客戶端控制云臺的幾個監(jiān)控畫面。其中包括了原監(jiān)控畫面、視頻放大畫面、視頻縮小畫面、菜單欄畫面、云臺下轉(zhuǎn)畫面、云臺上轉(zhuǎn)畫面、系統(tǒng)重啟畫面、云臺右轉(zhuǎn)畫面、云臺左轉(zhuǎn)畫面。
圖5 云臺控制演示系統(tǒng)(截圖)
圖6 監(jiān)控畫面(截圖)
經(jīng)過多次測試,本系統(tǒng)運行穩(wěn)定可靠,能夠精確控制云臺全方位轉(zhuǎn)動、聚焦和縮放。同時還可以進(jìn)入菜單欄調(diào)整各項參數(shù),功能全面,操作簡單,方便實用。
本文介紹的云臺控制系統(tǒng)主要應(yīng)用于視頻監(jiān)控系統(tǒng)中,基于教研室自擬項目“基于智能視音頻的LED大屏控制與遠(yuǎn)程監(jiān)視”,致力于開發(fā)一套完備的集人臉、手勢識別、視頻監(jiān)控、云臺遠(yuǎn)程控制為一體的解決方案。其中,云臺控制不僅可供客戶端進(jìn)行遠(yuǎn)程控制,還可與人臉識別系統(tǒng)配合,通過人臉定位調(diào)整云臺的方向并進(jìn)行適當(dāng)放大,以達(dá)到更好的識別效果。目前,蘋果客戶端的云臺控制APP已在蘋果應(yīng)用商店上架。
如今,市場上商用的云臺控制系統(tǒng)都集成于視頻采集卡中,主要用于PC端,為了追求系統(tǒng)的穩(wěn)定,支持的操作系統(tǒng)一般是Windows XP系統(tǒng)。而如今隨著智能手機(jī)的普遍應(yīng)用,特別是安卓系統(tǒng)和蘋果系統(tǒng)得到廣大用戶的喜愛與推廣,手機(jī)軟件的開發(fā)應(yīng)用將掀起一股新的互聯(lián)網(wǎng)IT革命熱潮,民用的云臺控制系統(tǒng)更具潛力,具有布局范圍廣、控制方便、操作人性化、開放互動等優(yōu)點。
本文主要介紹了一種新的基于客戶端/服務(wù)器(C/S)模式的遠(yuǎn)程云臺控制系統(tǒng)。云臺與客戶端通過串口通信進(jìn)行控制,客戶端與服務(wù)器通過網(wǎng)絡(luò)通信交互。本系統(tǒng)還加入了客戶端身份驗證模塊,給與客戶群不同的權(quán)限,使云臺控制變得更加有效而準(zhǔn)確。系統(tǒng)測試表明,客戶端能夠準(zhǔn)確控制云臺全方位轉(zhuǎn)動并且還實現(xiàn)了聚焦、放縮、掃描,轉(zhuǎn)到預(yù)置位,進(jìn)入菜單等多種功能。此云臺控制系統(tǒng)具有較好的應(yīng)用價值和市場前景。
:
[1]尚青青,朱秀昌.高清視頻監(jiān)控中心的設(shè)計與實現(xiàn)[J].電視技術(shù),2013,37(11):186-187.
[2]王鋼,李博,魏民,等.帶有云臺信息反饋的視頻監(jiān)控系統(tǒng)軟件的開發(fā)設(shè)計[J].安防科技,2008(12):29-32.
[3]吳力普,王文白.一種智能云臺控制操作鍵盤設(shè)計[J].北方工業(yè)大學(xué)學(xué)報,2011,23(3):46-50.
[4]吳力普,吳濤,張月魁.一種帶反饋應(yīng)答功能的云臺鏡頭控制器設(shè)計[J].安防科技,2011(3):18-20.
[5]楊軼龍,徐馳,翁麗娜,等.基于閉環(huán)控制的云臺通信協(xié)議設(shè)計[J].安防科技,2011(11):18-20.
[6]權(quán)立偉,石江宏,薛財鋒.IP視頻監(jiān)控系統(tǒng)中云臺控制模塊的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2006(11):86-88.
[7]雷偉軍,朱曦,劉長明.基于Visual C++云臺控制系統(tǒng)關(guān)鍵技術(shù)與算法[J].西安文理學(xué)院學(xué)報:自然科學(xué)版,2008,11(3):76-79.
[8]戴鈞,戴國駿.閉路監(jiān)視系統(tǒng)中云臺鏡頭控制的原理及實現(xiàn)[J].杭州電子工業(yè)學(xué)院學(xué)報,2001,21(1):59-62.