混合第三方庫視頻系統(tǒng)接口設(shè)計與實現(xiàn)
掃描二維碼
隨時隨地手機看文章
0 引 言
現(xiàn)有物聯(lián)網(wǎng)監(jiān)控系統(tǒng)的功能正在日益多元化。例如后臺服務(wù)器算法與深度學(xué)習(xí)相結(jié)合,使得監(jiān)控的智能水平取得了長足進步 [1] ;主從 -PTZ 攝像頭的引入形成了多個攝像頭組,能夠完成之前單個攝像頭無法完成的工作 [2] ;具有深度信息的攝像頭能夠從三維立體的角度重新進行監(jiān)控 [3]。同 時,與視頻監(jiān)控系統(tǒng)有關(guān)的其他技術(shù)也在迅猛的發(fā)展之中,例如基于 FPGA,DSP 芯片,每個攝像頭能夠完成若干前端處理,從而降低對通信帶寬的要求 [4] ;基于 USB 2.0 數(shù)據(jù)傳輸技術(shù),可使視頻數(shù)據(jù)傳輸的速度成倍提高 ;基于云存儲技術(shù)使得視頻數(shù)據(jù)的存儲、訪問與相關(guān)運算能夠并行、遠(yuǎn)程處理,同時實現(xiàn)了海量視頻數(shù)據(jù)以及相關(guān)若干技術(shù) ;基于 GPU芯片性能的提升,視頻、圖像的處理速度較之前有了很大提高 [5-6]。
對現(xiàn)有監(jiān)控系統(tǒng)而言,新的功能、應(yīng)用領(lǐng)域正在形成,而這些新應(yīng)用解決方案的實現(xiàn)既需要新的硬件,又需要新的軟件 ;既可以選擇自行開發(fā),也可以直接集成第三方軟硬件包。自行開發(fā)與集成第三方軟件包相比,各有優(yōu)劣。
以計算機視覺應(yīng)用中的第三方軟件包為例,現(xiàn)有第三方算法庫較多,能夠支持的應(yīng)用也較多,如目標(biāo)識別、行為檢測、深度學(xué)習(xí)、深度信息等。如果均采用自行研發(fā)的方式進行實現(xiàn),應(yīng)用程序的穩(wěn)定性與處理速度將完全取決于開發(fā)者自身的能力與水平 ;如果開發(fā)者水平高,不僅能夠在功能的選擇上擁有絕對的自主權(quán),還可以通過優(yōu)化與功能裁剪實現(xiàn)更高的系統(tǒng)穩(wěn)定性與運行速度 ;但如果研發(fā)者水平受限,則程序的表現(xiàn)將無法預(yù)測。
系統(tǒng)集成直接使用第三方軟件包,其程序代碼的編寫水平完全取決于第三方軟件包,在搭設(shè)系統(tǒng)的同時,其應(yīng)用服務(wù)的質(zhì)量是同質(zhì)化的,難分伯仲 ;對用戶的服務(wù)支持則完全取決于第三方軟件包,無過多自主權(quán)。
至于涉及的第三方硬件的軟件開發(fā)包無需多言,絕大多數(shù)研發(fā)者都無力進行新硬件的設(shè)計、制造與相應(yīng)軟件開發(fā),均以使用第三方硬件為主。
1 深度相機
以深度算法的應(yīng)用作為案例進行現(xiàn)有視頻系統(tǒng)接口的案例解析。
在原有視頻監(jiān)控系統(tǒng)中添加深度信息,需要進行相關(guān)功能的研發(fā),首先需要硬件的支持,而新的硬件往往自帶第三方開發(fā)包,可供開發(fā)者二次開發(fā)。
深度相機(又名 3D 相機)是指可通過距離信息獲取物體之間的位置關(guān)系,能夠區(qū)分前景與后景 ;使用相機獲取的深度信息對目標(biāo)圖像的分割、標(biāo)記、識別、跟蹤等傳統(tǒng)應(yīng)用仍然有效,而且可以根據(jù)深度信息進行改進與提高 ;借助深度信息與 2D 相機無法獲取數(shù)據(jù)與信息,但進行算法的設(shè)計與改進后便能夠快速完成對目標(biāo)的識別與追蹤,進行復(fù)雜目標(biāo)的狀態(tài)行為判讀 [7-8]。
目前深度相機包括 TOF(Time of Fligh,TOF)、結(jié)構(gòu)光、激光掃描等,主要用于機器人、互動游戲等。其中較多指 TOF 相機 [9-10],微軟第二代 Kinect v2 采用的就是 TOF 技 術(shù),在 30 fps 條件下能夠?qū)崿F(xiàn) 1 920×1 080 的顏色分辨率、512×424 的深度分辨率,最多支持 6 人的姿態(tài)識別,每人25 個關(guān)節(jié)點,檢測范圍最遠(yuǎn)可達 4 m,水平有效角度最大為70°,垂直有效角度最大為 60°。
以激光散斑圖像深度信息獲取方法為例,深度相機實現(xiàn)這些功能的工作原理 :經(jīng)過圖像預(yù)處理后的輸入散斑圖和參考散斑圖寫入多條行形成輸入散斑窗、參考散斑窗,在輸入散斑窗中提取中心相同、窗口大小不同的圖像塊,對應(yīng)參考散斑窗的匹配散斑窗,以搜索策略并且求最小 SAD 方法,搜索最佳匹配塊,得到最佳偏移量,再通過參考閾值進行篩選,自適應(yīng)選擇某一圖像塊對應(yīng)的最佳偏移量作為當(dāng)前圖像塊中心點的最佳偏移量,然后通過深度計算公式得到其深度信息 [11-12]。
由上可見,該方法涉及的數(shù)學(xué)公式較多,運算量較大,同時,類似 30 fps 條件的視頻參數(shù)對相關(guān)計算的實時性提出了較高要求?,F(xiàn)在一般的解決方案為依靠 FPGA,DSP 進行相關(guān)運算,這就涉及到了與硬件相關(guān)的第三方開發(fā)包。以第三方 OpenCV 軟件包與硬件相關(guān)的 HLS 算法庫進行接口設(shè)計層次化、模塊化說明。
2 接口的層次化、模塊化設(shè)計
現(xiàn)有視頻監(jiān)控系統(tǒng)在進行接口層次化、模塊化設(shè)計時可以參考 HLS 算法庫與 OpenCV 軟件包進行集成的案例。在該案例應(yīng)用中,支持深度相機的系統(tǒng)被設(shè)計用來實現(xiàn)深度相關(guān)算法。
Vivado 高層次綜合(Vivado High-Level Synthesis,HLS)在所有 HLx 版本中可直接使用 C,C++ 以及 System C 語言規(guī)范對 Xilinx 可編程器件進行編程,HLS 使系統(tǒng)和設(shè)計架構(gòu)師支持 ISE® 和 Vivado 設(shè)計環(huán)境,無需手動創(chuàng)建 RTL 便能夠快速創(chuàng)建 IP,包含 HLS 流庫,HLS Math,HLS 視頻,HLS IP,HLS 線性代數(shù),HLS DSP 庫等內(nèi)容。HLS 在該案例中的主要功能是利用硬件加速相應(yīng)的 OpenCV 應(yīng)用。
OpenCV(Open Source Computer Vision Library,OpenCV)是一個基于 BSD 許可(開源)發(fā)行的跨平臺計算機視覺庫,可運行在 Linux,Windows,Android 和 Mac OS 操作系統(tǒng)上。OpenCV 輕量級且高效—由一系列 C 函數(shù)和少量 C++ 類構(gòu)成, 同時提供 Python,Ruby,Matlab等語言接口,實現(xiàn)了圖像處理和計算機視覺方面的諸多通用算法。OpenCV 在該案例中的主要功能是進行深度信息相關(guān)算法設(shè)計與應(yīng)用。系統(tǒng)層結(jié)構(gòu)與模塊接口示意如圖 1所示。
由圖 1 可知,不同第三方庫進行集成時,彼此之間的業(yè)務(wù)流按照數(shù)據(jù)類型的不同需要選擇不同的接口 —在OpenCV 與 HLS 之間進行圖像處理時需要 Axivideo2Mat 與Mat2Axivideo 接口。而在 OpenCV 與 HLS 之間進行視頻處理時,僅需 Mat2Axivideo 接口。其接口類型根據(jù)數(shù)據(jù)類型的不同而變化。OpenCV 與 HLS 部分接口函數(shù)示意如圖 2所示。
從圖 2 中可以看出,在視頻與圖像分析的應(yīng)用中,為能夠充分利用深度相機的深度信息,需要 OpenCV 與 HLS 各自按照數(shù)據(jù)類型的不同采用不同的接口函數(shù)進行處理,并根據(jù)需要進行不同數(shù)據(jù)類型之間的轉(zhuǎn)換,例如從 Mat 到video, 從 Mat 到 hlsMat, 或者從 video 到 Mat, 從 hlsMat到 Mat。
由此可見,接口就是進行的一系列數(shù)據(jù)類型轉(zhuǎn)換,轉(zhuǎn)換的最終目的是為不同算法提供符合其輸入要求的數(shù)據(jù)。
3 數(shù)據(jù)接口的標(biāo)準(zhǔn)化
接口(Interface)是一系列操作的集合,在軟件架構(gòu)中,強調(diào)模塊之間的數(shù)據(jù)交換操作。為拓展模塊應(yīng)用范圍、進行二次開發(fā)、與其他系統(tǒng)集成,尤其要適應(yīng)未來的技術(shù)趨勢,就需要進行數(shù)據(jù)接口的標(biāo)準(zhǔn)化 [8]。
數(shù)據(jù)接口的標(biāo)準(zhǔn)化首先需要明確數(shù)據(jù)的類型。在視頻監(jiān)控系統(tǒng)中,有效數(shù)據(jù)類型主要包括圖像、視頻以及其他數(shù)據(jù)、狀態(tài)數(shù)據(jù)四大類。作為數(shù)據(jù)接口的標(biāo)準(zhǔn)化內(nèi)容之一,首先需要統(tǒng)一的內(nèi)容較多,如圖像大小、圖像類型、視頻幀數(shù)、色彩模型、數(shù)據(jù)格式、數(shù)據(jù)長度、數(shù)據(jù)實時性等,數(shù)據(jù)類型與業(yè)務(wù)流程相同,是進行劃分的兩大要素。
對不同型號、不同設(shè)備、不同參數(shù)的視頻,需根據(jù)效果以及實驗進行對比,降高升低。高參數(shù)設(shè)備采集的視頻信息需進行預(yù)處理,以達到同一標(biāo)準(zhǔn) ;同樣,對達不到參數(shù)要求的設(shè)備,可結(jié)合金字塔法等進行預(yù)處理,使之達到同一標(biāo)準(zhǔn)。標(biāo)準(zhǔn)統(tǒng)一后,對數(shù)據(jù)的通信速度、數(shù)據(jù)的后期處理速度、處理精確度、存儲速度、讀取速度等多項指標(biāo)都有明顯改進。
統(tǒng)一視頻處理輸出后的數(shù)據(jù)格式是標(biāo)準(zhǔn)化的重點。視頻監(jiān)控系統(tǒng)采集視頻信息,然后交由后臺服務(wù)器進行視頻信息的處理,其處理結(jié)果(系統(tǒng)輸出)是應(yīng)用層其他系統(tǒng)需要的輸入,因此需進一步規(guī)范視頻監(jiān)控系統(tǒng)處理后的數(shù)據(jù)格式。
對視頻監(jiān)控系統(tǒng)處理后的數(shù)據(jù),可采用視頻、圖像、與文本 /XML 等結(jié)合的方式。其中,對視頻而言,需要規(guī)范每秒多少幀、每一幀的寬高、色彩模型、ROI 位置及長寬等 ;對圖像而言,需要規(guī)范寬高、色彩模型、ROI 位置及長寬等,這里的參數(shù)應(yīng)該與視頻參數(shù)完全吻合,只是視頻的參數(shù)多于圖像參數(shù)而已 ;對于文本 /XML 而言,需要對視頻、圖像進行編號,對應(yīng)編號保留所有視頻、圖像處理后的相關(guān)信息。
為最大限度保持算法設(shè)計上的靈活性,可對同一視頻 /圖像利用算法庫進行多種不同數(shù)據(jù)格式的轉(zhuǎn)換,通過不同的算法得到不同的輸出 ;與不同參數(shù)需求的新設(shè)備進行數(shù)據(jù)通信 ;集成不同的第三方庫,從而較好地解決系統(tǒng)的二次開發(fā)問題。圖 3 所示為一種混合第三方庫支持的車牌定位算法及其得到的車牌定位效果。對于成功定位的車牌,使用了文獻 [13] 中提到的車牌字符分割算法并將字符以二值化方式顯示。
第三方視頻處理庫為 OpenCV2.4.9,在 Windows 7 操作系統(tǒng)上借助 Qt5.0 實現(xiàn),其中部分功能函數(shù)使用了 GPU 加速實現(xiàn)。主要硬件環(huán)境為 ThinkPad x230 筆記本電腦,Core i3(2.4 GHz)四核 CPU,8G 內(nèi)存。實驗數(shù)據(jù)集包含 800 幅含車牌的圖像以及 400 幅不含車牌的圖像。
實驗測試對象中包含了大部分復(fù)雜環(huán)境,如顏色干擾(“湘 BY2054”和“粵 JPG999”的車身均為藍(lán)色),傾斜的車牌(“粵 CFL980”“遼 ANB082”“粵 B0PA09”),復(fù)雜的背景和光照條件(“遼 M66B66”和“浙 BY1V13”)等。從結(jié)果可以看出 :混合第三方庫支持的車牌定位算法在復(fù)雜條件下均能夠準(zhǔn)確定位車牌,并能夠從車牌上準(zhǔn)確讀取車牌字符 [13]。
4 結(jié) 語
不同第三方庫進行集成時,彼此之間的業(yè)務(wù)流需按照數(shù)據(jù)類型的不同來選擇接口。在軟件架構(gòu)中,強調(diào)模塊之間的數(shù)據(jù)交換操作。為拓展模塊應(yīng)用范圍、進行二次開發(fā)、與其他系統(tǒng)集成,就需要進行數(shù)據(jù)接口的標(biāo)準(zhǔn)化。數(shù)據(jù)接口的標(biāo)準(zhǔn)化首先需要明確數(shù)據(jù)類型,然后盡量統(tǒng)一模塊之間處理輸出的數(shù)據(jù)格式。
在系統(tǒng)設(shè)計與實現(xiàn)中采用論文中提到的解決方案,在一定程度上解決了原有系統(tǒng)架構(gòu)適應(yīng)性差、調(diào)整困難的缺陷,能夠借助分層次與模塊化手段來提高系統(tǒng)穩(wěn)定性,并借助第三方庫提高系統(tǒng)核心運算的速度,易于二次開發(fā)。在工程應(yīng)用中,該方法可作為一種快速軟件原型開發(fā)的輔助手段,具有較為廣泛的應(yīng)用場景。