?

節約存儲空間的遠程視頻監控系統

2018-09-27 08:09偉,魯,
傳感器與微系統 2018年10期
關鍵詞:服務端云臺舵機

劉 偉, 黃 魯, 徐 俊

(1.中國科學技術大學 電子科學與技術系,安徽 合肥 230026;2.中國科學技術大學 信息科學實驗中心,安徽 合肥 230026)

0 引 言

高性能IP網絡的廣泛部署推動了網絡視頻監控的快速發展。嵌入式設備價格低廉、便攜性好?;贗P網絡的嵌入式無線監控設備也在人們的生活中逐漸廣泛應用[1]。傳統視頻監控為全天候實時錄制,保存了大量的無用信息,占用存儲空間。本文在嵌入式開發平臺上,使用混合高斯模型提取前景目標,并結合幀間差分檢測結果實時判斷監測區域動態變化,僅對動態變化添加時間戳實時錄制,節約存儲空間,提高視頻錄制的有效內容[2]。

1 系統總體架構

如圖1所示,系統采用主從(client/server)模式,由無線網絡傳輸,ARM服務器,客戶端3部分組成,其中服務端和客戶端均基于Qt框架編程實現。

圖1 系統總體框架

通過無線路由器連接客戶端和服務端,傳遞視頻圖像數據和控制指令。服務器采用S5PV210微處理器的Smart 210

開發板[3],使用Linux下的V4L2(video for Linux2)接口USB攝像頭,輸出MJPEG格式圖像;兩路脈寬調制 (pulse width modulation,PWM)對左右和上下轉動的舵機云臺控制,實現多角度的視頻監控??蛻舳私Y合OpenCV對監控區域移動檢測,實時錄像及圖像保存;同時發送指令對服務端云臺進行控制[4]。

2 ARM端服務器實現

2.1 Qt軟件配置

為了保證Qt框架下編譯的服務器程序能在ARM開發板上能運行,必須重新構建適用ARM板的 Qt編譯套件[5]。開發環境是在虛擬機上Ubuntu16.04,并安裝Qt 5.8。使用Cmake 3.8編譯Jrtplib庫文件分別生成適合于Windows和ARM板的庫文件。

2.2 視頻采集與發送

調用QTcpServer類監聽客戶端的連接申請,初始化圖像采集線程,使用Qt下的信號與槽機制,采集線程的信號綁定主線程的發送槽函數,傳遞采集的圖像數據到主線程發送函數。如圖2所示。

圖2 采集發送流程

2.2.1 MJPEG格式圖像采集分析及實現

為減小視頻數據的無線傳輸帶寬需求并保障實時性,采用MJPEG格式壓縮。查看Linux內核源碼可知,對于MJPEG格式內核分配存儲大小為Width·Height·2Byte, 而經過壓縮的圖像數據小于該值,因此存儲空間中有不需要傳輸的無效數據。系統根據MJPEG格式特征提取完整1幀數據傳入主線程發送。

重新實現Qt中QThead類的多線程run()函數,在run()函數內使用V4L2接口通過多線程方式采集圖像數據,提高效率[6]。

2.2.2 基于RTP協議的主線程視頻發送

圖像視頻采用基于UDP的RTP協議進行傳輸,使用Jrtplib庫實現,只需實例化RTPSession類、RTPUDPv4TransmissionParams類、RTPSessionParams類,分別用于設置創建會話、傳輸參數、會話參數;由于Jrtplib庫默認的傳輸包大小為1 400B,所以,需要調用RTPSession︰︰SetMaximumPacketSize()設置傳輸包最大限制,對于640像素×480像素格式的攝像頭可設置為65 536。Qt圖像采集線程發送信號觸發主線程執行RTPSession︰︰SendPacket()函數完成圖像數據網絡發送。此外由于Jrtplib相對于Qt是第三方庫文件,所以需要在.pro文件下添加INCLUDEPATH及LIBS路徑。

2.2.3 云臺控制

S5PV210微處理器輸出2路PWM信號。使用Linux下的Misc(雜散類)驅動模型配置寄存器值參數。 PWM模塊時鐘源為pclk=66.7 MHz,云臺舵機最小占空比步進為10 μs,fpwm=50 Hz,則PWM模塊的定時器頻率為fTimer=100 kHz。根據公式參數配置如下[7]

(1)

取prescaler_value=165,divider_value=4,得到定時器計數值tcnt=2 009,輸出的PWM周期為20.09 ms。

為使ARM服務端啟動時自動加載PWM驅動模塊,在文件系統/etc/init.d/rcS中添加如下兩條命令:

insmod pwm0.ko;insmod pwm1.ko

采用兩個型號為SG90的180°轉角舵機實現上下和左右自由旋轉,使用兩路周期為50 Hz的PWM信號調節輸出占空比控制舵機轉動,如圖3 舵機模型及實物,高脈寬時間Td對應的轉動角度。

圖3 舵機模型及實物

3 Windows上監控客戶端實現

使用Qt編寫客戶端界面如圖4所示,客戶端包括視頻實時顯示、圖像保存、實時錄像控制、云臺控制部分。為能夠使用 OpenCV庫需要在.pro工程文件中添加INCLUDEPATH及LIBS路徑。

圖4 Windows客戶端顯示

3.1 接收RTP數據及云臺控制

重新實現Qt下的QThread︰︰run()多線程函數[9],數據接收只需用到Jrtplib庫中的RTPSession類即可,循環調用RTPSession︰︰poll()接收數據,通過GotoFirstSourceWithData()及GotoNextSourceWithData()判斷有效數據源,最后通過類中的GetNextPacket()抽取有效的圖像數據包;使用QByteArray︰︰fromRawData()構建QByteArray類型數據,以Qt︰︰DirectConnection方式連接主線程中的顯示槽函數,在顯示函數中構建QImage類型數據,使用setPixmap()將圖形放入預設大小為640像素×480像素的QLable中顯示。

使用TCP協議傳輸云臺控制命令,分別在4個PushButton的clicked()槽函數中實現對攝像頭云臺上下左右控制命令發送,命令數據包格式為“舵機ID+占空比”,接收端通過對數據包解析,執行對應的響應函數。

3.2 動態檢測及加時間戳錄像

為了實現對監控區域動態偵測并錄制,使用幀間差分法檢測出變化量,計算量小,實時性好;通過差分運算基本上可以消除相鄰幀的高相似度背景,而相鄰幀在運動目標變化的區域有較大的差別;由于運動目標距離攝像頭位置遠近及目標大小影響幀間差分檢測的結果,因此同時使用幀間差分檢測結果與前景目標大小的比值作為動態檢測的判別依據。結合OpenCV,使用混合高斯模型實時檢測,得到背景B(x,y)圖像。設Cn(x,y)為當前幀灰度圖像,進行差分運算An(x,y)=Cn(x,y)-Cn-1(x,y),In(x,y)=Cn(x,y)-B(x,y),得到幀間差分結果An(x,y)及前景目標In(x,y)。

對差分結果進行開運算,消除光線強弱變化引入的噪點,平滑較大變化的二值圖區域同時又不明顯改變其面積;采用8鄰域的連通域標記法,統計所有的連通域得到幀間差分面積Dn和前景面積Sn,T1,T3為變化的面積閾值,T2為比值系數,具體方法為:

1)當Dn>T1,變化足夠明顯,直接對當前幀加時間戳并錄制;

2)當Dn較小時,同時前景面積Sn>T3,判斷(Dn·100/Sn>T2,對當前幀加時間戳錄制。

T1=100,T2=1,T3=500得到較好的實驗效果。

檢測并錄制流程如圖5,實驗中檢測效果如圖6。

結合OpenCV對截圖保存和錄制的視頻加時間戳格式為“年/月/日 時/分/秒”,主要采用Qt中QDateTime類,及CV︰︰putText()實現添加時間戳,并使用CV︰︰VideoWriter類完成視頻錄制。流程如圖7所示。其中時間量轉換為字符串代碼如下:

QDateTime time=QDateTime︰︰currentDateTime();/*獲取系統時間*/

QString str=time.toString(“yyyy/MM/dd hh︰mm︰ss”);/*字符轉換*/

string text=str.toStdString();/*轉為滿足putText()的字符類型*/

圖5 檢測并錄制流程

圖6 實驗中檢測效果

圖7 添加時間戳方法

4 系統測試

ARM開發板上電啟動后,串口打印出如下信息表明舵機云臺PWM驅動模塊加載成功:[29.003502]pwm0 pwm initialized ok 29.033495]pwm1 pwm initialized ok。

ARM服務端通過USB-WiFi連上路由器,保證PC客戶端和服務端在同一網段或使用路由器IP轉發功能,進行ping測試;ARM開發板服務端執行:./camera-wifi-qws 指令啟動服務端程序進入監聽狀態,Qt Creator中運行客戶端,與服務器完成TCP連接;服務端為主頻1 GHz-Linux3.0.8內核的Smart210開發板,以分辨率為 640像素×480像素,平均20幀/s視頻采集并傳輸至主頻為3.3 GHz,內存為8 GB的Windows客戶端顯示。截圖保存及視頻錄制結果如圖8所示。

圖8 測試結果保存

使用 中的gettimeofday()計時函數測試視頻流檢測及錄制平均耗時為43ms,滿足視頻實時性要求,客戶端對云臺實時可控。

5 結束語

實現了一種節約存儲空間的嵌入式視頻實時監控系統,提高了常規視頻監控存儲的有效內容,節約了存儲空間;可遠程實時操控攝像頭云臺進行多角度監控,增強了監控能力;測試結果表過該系統運行穩定,具有較好的可靠性和實時性。

猜你喜歡
服務端云臺舵機
云上之家——萬科·郡西云臺
龍門山·臥云臺
幫我買云臺
含齒隙彈載舵機的全局反步模糊自適應控制
基于STM32的無線FPV云臺設計
新時期《移動Web服務端開發》課程教學改革的研究
基于dsPIC單片機的飛艇舵機控制實現
在Windows Server 2008上創建應用
基于高速同步485總線通信的多通道舵機控制器設計
基于云模型的舵機同步控制
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合